2016-06-08 28 views
0

我前段時間升級了emacs(現在是Debian 24.5 + 1-6 + b2),我注意到Cx Cb(列表緩衝區)的行爲發生了改變兩個窗口處於活動狀態:之前,它始終會在另一個窗口(光標當前不在的那個窗口)中顯示緩衝區列表。現在,如果緩衝區引用同一個文件,它只顯示另一個窗口中的緩衝區列表。如果它們引用不同的文件,它將顯示相同的窗口(光標當前所在的窗口)中的緩衝區列表。有兩個窗口的列表緩衝區(Cx Cb)的舊行爲

這真的讓人惱火,因爲我習慣了舊的行爲。我怎樣才能恢復舊的行爲? (這是一個錯誤,如果沒有,究竟是什麼改變的原理是什麼?)

+0

而不是使用'(defun定義列表緩衝區(可選ARG)「(互動式」 P 「)(display-buffer(list-buffers-noselect arg)))''可以考慮像這樣添加一個't':'(defun list-buffers(&optional arg)」Doc-string ...「」(交互式「P」 )(display-buffer(list-buffers-noselect arg)t))'這能解決你的問題嗎? – lawlist

+0

Emacs *主分支中* display-buffer的doc-string的最後一段指出:* *'display-buffer'的ACTION參數也可以有非零和非列表值。在一個窗口中顯示緩衝區,即使它已經顯示在選定的窗口中如果用前綴參數交互調用,ACTION是t。*「 – lawlist

+0

@lawlist:實際上我沒有定義list-緩衝'.emacs'中的任何地方,我沒有改變任何地方的綁定。如果您可以指向我必須進行此更改的文件,或者更好,如果您可以向我解釋需要添加到我的'.emacs'文件的內容,我可以嘗試一下您的建議。我對elisp的東西不是很熟悉,我只是想讓老的行爲迴歸。 :-) – dirkt

回答

1

功能list-bufferswindow.el利用功能display-buffer,第二和第三個可選的參數(即,動作和畫面)nil因爲他們沒有指定任何東西。 Emacs主分支中display-buffer的文檔字符串的最後一段顯示爲:「」display-buffer「的ACTION參數也可以具有非零和非列表值,這意味着要在窗口中顯示緩衝區比選擇一個,即使它已經顯示在選擇窗口等。如果用一個前綴參數交互叫,行動噸。

buff-menu.el定義list-buffers原有的功能包含一行,看起來像這樣:(display-buffer (list-buffers-noselect arg))。這個答案的作用是增加一個t,以便display-buffer的第二個可選參數 - 即ACTION - 是非零和非列表。這實現了上述文檔字符串中描述的行爲。新功能看起來是這樣的,它可以直接粘貼到.emacs文件:「 DOC-字符串」

(defun list-buffers (&optional arg) 
    "Display a list of existing buffers. 
The list is displayed in a buffer named \"*Buffer List*\". 
See `buffer-menu' for a description of the Buffer Menu. 

By default, all buffers are listed except those whose names start 
with a space (which are for internal use). With prefix argument 
ARG, show only buffers that are visiting files." 
    (interactive "P") 
    (display-buffer (list-buffers-noselect arg) t)) 
相關問題