2009-05-22 84 views
7

我想爲minibuffer完成列表設置一個特定的窗口。目前,我在這個配置中3個窗口:在Emacs中,如何更改minibuffer完成列表窗口?

______ 
| | | 
|____| | 
|____|_| 

在這種情況下,我想使用左下方窗口迷你緩衝區完成列表。

目前,它似乎是一個隨機的窗口,大多數時候它喜歡使用最右邊的窗口,這太薄了,無法顯示完成列表,而我不得不水平滾動,這是令人煩惱的。

另外,我使用了一個名爲revive.el口齒不清腳本文件(〜/ .revive.el)恢復我的窗口配置當我加載Emacs的。

+0

它似乎是最近最少使用的窗口... – 2009-05-22 23:45:21

+0

嗯,我不確定 - 它似乎不是我可以預測的...有時候,它喜歡用左下角,但是它將其調整到屏幕高度的一半;這是令人討厭的,因爲我想在左上角有很多編輯代碼的空間。 – 2009-05-23 19:03:52

+0

注意OP所需要的內容,但是可以使用Tomohiro Matsuyama的popwin.el:https:// github將完成緩衝區顯示在專用窗口中。com/m2ym/popwin-el – 2014-02-06 06:59:01

回答

9

在嘗試使用minibuffer-scroll-window(原來不是用戶可定製的)的路徑開始後。我嘗試這樣的做法:

(add-to-list 'special-display-buffer-names '("*Completions*" my-display-completions)) 

(defun my-display-completions (buf) 
    "put the *completions* buffer in the right spot" 
    (let ((windows (delete (minibuffer-window) (window-list)))) 
    (if (eq 1 (length windows)) 
     (progn 
      (select-window (car windows)) 
      (split-window-vertically))) 
    (let ((target-window (window-at 0 (- (frame-height) 2))) 
      (pop-up-windows t)) 
     (set-window-buffer target-window buf) 
     target-window))) 

這是通過兩個分裂的唯一窗口,在窗口的底部顯示*Completions*,或者,如果有已經顯示出2個或更多的窗口,使用底部左側的窗口顯示*Completions*

1

稍微作弊回答可能做你想要什麼:

使用手動

C-x b *Completions* RET 

當光標在該窗口活躍使底部左側窗口中的*完井*緩衝區。然後,每當小型緩衝器必須顯示一些完成時,它總是應該使用這個特定的窗口。但是,這將依賴於此緩衝區始終保持打開狀態並可見 - 可能不是您想要的?

其他可能性:

  1. 看看 「Icicles」 幫助 - 例如它提到「有很多冰柱功能可以增強'* Completions *'的顯示和行爲。」
  2. Minibuffer Commands That Do Completion可能是有用的嗎?
0

並不像Trey的回答那樣健壯,而且似乎也很粗魯。

; Go to the 3rd window, and make it dedicated. 
(other-window 2) 
(set-window-dedicated-p (selected-window) 1) 

這隻適用於你不介意第三個窗口被鎖定的情況。不幸的是,它仍然會嘗試不時地使用第一個窗口(這不那麼令人沮喪,但仍然不受歡迎)。

注意:我剛試過Trey的解決方案,現在它工作,所以我建議人們使用它。

相關問題