2014-10-16 55 views
1

我有2個窗口,一個是緩衝區列表,當我使用n時,如何在其他窗口的緩衝區列表中顯示緩衝區,以及p導航到緩衝區列表中? 非常感謝。如何在焦點位於緩衝區列表中的其他窗口中實時顯示緩衝區內容

+0

我不知道一個簡單的解決方案,因爲目標框架需要被識別爲可能有兩個以上的框架。我想可能有一個條件,如果只有兩個幀存在,然後使用其他幀。這是一個控制顯示幀緩衝區的複雜方法的鏈接 - 我在過去一年左右成功地使用了這種方法:http://stackoverflow.com/a/18371427/2112489 – lawlist 2014-10-16 18:16:43

+0

上述評論假定原始海報在經驗豐富的Emacs用戶所使用的相同環境中使用術語「frame」。如果原始海報的含義是使用術語「窗口」作爲經驗豐富的Emacs用戶理解術語的含義,那麼需要澄清問題。演示差異的例子包括但不限於以下功能:'find-file-other-window'; '找到文件 - 其他 - frame'; '交換機到緩衝另一window'; '交換機到緩衝另一frame'。 – lawlist 2014-10-16 18:25:46

+0

注意:'buffer-menu-mode'具有工具欄條目,其中包括各種功能以處理緩衝區列表中顯示的文件 - 例如'o' - *在其他窗口中選擇*。對於喜歡禁用/不可見工具欄的用戶,以下鍵盤和鼠標快捷鍵組合會顯示類似於工具欄的彈出菜單:'C-down-mouse-3' – lawlist 2014-10-16 18:43:37

回答

1

如果我理解了正確的問題,答案只是在緩衝區菜單中使用C-o。顯示您在另一個窗口中所在行的緩衝區,但不會選擇該緩衝區。也就是說,它不會將輸入焦點移動到該緩衝區的窗口。緩衝區列表保留了輸入焦點,因此您可以在不同的行上繼續使用C-o,以顯示不同的緩衝區。

如果您的意思是一個Emacs窗口,當您說「frame」時,請參閱上文。即使緩衝區位於不同的框架上也是如此,有以下警告:某些窗口管理器(包括MS Windows)會將輸入焦點更改爲創建的新框架。因此,例如,如果您有非nilpop-up-frames(以便使用單獨的框架顯示緩衝區),並且您選擇顯示的緩衝區(使用C-o)尚未顯示在其他某個框架中,則顯示它不僅爲它創造了一個新的框架,而且將焦點轉移到了新的框架上。如果緩衝區在另一個幀中已經可見,那麼C-o只會提高該幀。

緩衝區列表顯示中當前沒有鍵限制,以便(a)將光標向下或向上移動到下一個或上一個緩衝區行,並(b)調用顯示在目標緩衝線。但是你可以很容易地定義這樣的命令,並將其綁定到一個鍵:

(defun show-next (arg) 
    "Show next line's buffer in another window." 
    (interactive "p") 
    (next-line arg) 
    (Buffer-menu-switch-other-window)) 

(defun show-previous (arg) 
    "Show previous line's buffer in another window." 
    (interactive "p") 
    (previous-line arg) 
    (Buffer-menu-switch-other-window)) 

(define-key Buffer-menu-mode-map "\M-n" 'show-next) 
(define-key Buffer-menu-mode-map "\M-p" 'show-previous) 
0

這裏是我的原型在dired緩衝區此功能。它在訪問後殺死一個緩衝區。

這是我喜歡ranger文件管理器的一個功能,它在探索目錄時非常方便。

(setq show-next-current-buffer nil) 

(defun show-next() 
    (interactive) 
    (next-line 1) 
    (dired-find-file-other-window) 
    (if show-next-current-buffer (kill-buffer show-next-current-buffer)) 
    (setq show-next-current-buffer (current-buffer)) 
    (other-window 1) 
    ) 

(defun show-previous() 
    (interactive) 
    (previous-line 1) 
    (dired-find-file-other-window) 
    (if show-next-current-buffer (kill-buffer show-next-current-buffer)) 
    (setq show-next-current-buffer (current-buffer)) 
    (other-window 1) 
    ) 

(define-key dired-mode-map "n" 'show-next) 
(define-key dired-mode-map "p" 'show-previous) 

編輯:我寫了一個小的方式來啓用/禁用輕鬆此功能。請參閱https://gitlab.com/emacs-stuff/my-elisp/blob/master/dired-show.el,並將其融入您的需求。

+0

這在dired模式下非常有用。 – godblessfq 2014-10-17 18:10:30

相關問題