2014-03-02 56 views
4

當我想自定義的行爲,當我在Emacs分割窗口:控制Emacs的行爲分割窗口

我總是分裂,因爲我想查看一個單獨的緩衝並排側與一個我正在編輯。

我使用electric-buffer-list(綁定到C-x C-b)導航緩衝區。

我最終做所有的下列分別:

  1. C-×3到水平分割。

  2. C-x o切換到另一個窗口。

  3. C-x C-b調用electric-buffer-list所以我可以選擇我想查看的緩衝區。

好像我應該能夠寫一個elisp的功能,會做這一切時,我按C-×3

我發現this post其中描述了我想要的行爲的焦點切換部分,但我不明白如何擴展該答案以實現我所要做的所有事情。


編輯:回顧@ lawlist的帖子和調試我的語法後,我覺得我想要做這樣的事情:

(defun split-right-and-buffer-list() 
    (interactive) 
    (split-window-horizontally) 
    (other-window 0) 
    (electric-buffer-list 0)) 

(global-set-key (kbd "C-x 3") 'split-right-and-buffer-list) 

這不我想要的一切,但是緩衝列表出現時只列出當前緩衝區,而不是當我從其鍵綁定中調用electric-buffer-list時得到的所有緩衝區的正常列表。

+0

這裏是一個類似的線程在那裏我修改'拆分窗口below' - 你可以創建自己的函數,水平分割:http://stackoverflow.com/a/19300409/2112489你不必須使用'defalias' - 也就是說,您可以通過名稱來調用您自己修改的函數。在你想要的窗口中,你可以使用'switch-to-buffer' - 在我們使用'select-window'的窗口之間移動。 。 ' – lawlist

+0

這些鏈接中的任何一個如何在分離窗口中顯示標準緩衝區列表?如果您願意,可以修改示例以顯示不同類型的緩衝區列表。此鏈接是一個左或右拆分示例:http://stackoverflow.com/a/21544307/2112489此鏈接是一個拆分下面的示例:http://stackoverflow.com/a/21591259/2112489 – lawlist

回答

2

一些非常小的修改,你想出了這個功能會做你想要什麼:

(defun split-right-and-buffer-list() 
    (interactive) 
    (split-window-horizontally) 
    (other-window 1) 
    (electric-buffer-list nil)) 

(global-set-key (kbd "C-x 3") 'split-right-and-buffer-list) 
  1. 傳遞1代替0作爲參數傳遞給other-window導致Emacs的選擇是創建新的窗口致電split-window-horizontally的結果。

  2. 傳遞nil,而不是0作爲參數傳遞給electric-buffer-list導致的Emacs顯示所有緩衝區,而不僅僅是文件訪問的。

    這裏可能會讓你感覺不舒服的是electric-buffer-list(它不包含關於ARG所需的任何信息)的文檔中沒有提及。但是當你看到這個命令的source code時,你會注意到它只是將參數的值傳遞給一個名爲list-buffers-noselect的函數(並不用於其他任何東西)。此功能的文檔包含上面提到的缺少的信息。

1

如果你不介意自定義命令你想嘗試以下功能

(require 'ido) 

(defun my-split-window-open-buffer-right (buffer) 
    (interactive (list (ido-read-buffer "Please select a buffer: "))) 
    (select-window (split-window-right)) 
    (switch-to-buffer buffer)) 

(defun my-split-window-open-buffer-below (buffer) 
    (interactive (list (ido-read-buffer "Please select a buffer: "))) 
    (select-window (split-window-below)) 
    (switch-to-buffer buffer)) 

它們綁定到你喜歡的鑰匙是什麼。我寧願通過重新定義/建議我沒有寫過的函數。