2012-08-29 2 views
2

emacs에서 현재 열려있는 모든 버퍼를 다른 창에 렌더링하는 M-x 명령 또는 키 조합이 있습니까? 명확성을 위해 4 개의 열린 버퍼가 있고 현재 표시된 버퍼가 하나만 있다고 가정하고 한 단계에서 각 버퍼를 한 사분면에 표시하려고합니다.Emacs에 열려있는 버퍼를 모두 표시합니다.

+0

버퍼 4 개? 내 이맥스는 현재 188 개의 버퍼를 가지고있다. – cjm

+0

cjm이 모든 버퍼를 화면의 다른 부분으로 분할 했습니까? –

+0

분명히 아닙니다, 그들은 적합하지 않을 것입니다. 나는 실제로 한 번에 몇 가지만 표시합니다 (종종 1 번만 표시). – cjm

답변

2

그것을 할 수있는 이미 알려진 방법이없는 경우 다음과 같은 코드를 시작할 수 있습니다 :

(defun buffer-in-window-list() 
    (let (buffers) 
    (walk-windows (lambda (window) (push (window-buffer window) buffers)) t t) 
    buffers)) 

(defun display-all-buffers() 
    (interactive) 
    (let (buffers-in-window (buffer-in-window-list)) 
    (dolist (buffer (buffer-list)) 
     (when (and (not (string-match "\\`[[:space:]]*\\*" (buffer-name buffer))) 
       (not (memq buffer buffers-in-window))) 
     (set-window-buffer (split-window (get-largest-window)) buffer))) 
    (balance-windows))) 

display-all-buffers 명령에 대한 새 창을 엽니가 각 버퍼는 현재 어디에도 표시되지 않습니다 (다른 프레임 포함). 유용성을 위해, 내부적으로 만 사용되기 때문에 이름이 *으로 시작하는 버퍼 (선택적으로 공백 문자가 접두사 임)를 무시합니다.

이맥스는 사용자가 너무 작은 창을 만들 수 없도록합니다. 따라서 표시 할 버퍼가 너무 많은 경우 명령은 가능한 한 많은 버퍼를 최신 표시 또는 선택 순서대로 표시하고 오류를 신호로 보냅니다.

3

덤프를 권장합니다. M-x ibuffer는 아마도 당신이 원하는 것일 것입니다. 여기 내 ibuffer 구성입니다 :

;; *Messages* is so annoying. Also, I really like ibuffer 
(require 'ibuf-ext) 
(add-to-list 'ibuffer-never-show-predicates "^\\*Messages") 
(add-to-list 'ibuffer-never-show-predicates "^\\*Completions") 
(global-set-key (kbd "C-b") 'ibuffer) 
(kill-buffer "*scratch*") 
('ibuffer) 
(switch-to-buffer "*Ibuffer*") 
+0

감사합니다 user996056, 나는 ibuffer에 대해 몰랐습니다.이 설정은 유용합니다! –