簡體   English   中英

在Emacs中,如何更改迷你緩沖區完成列表窗口?

[英]In Emacs, how do I change the minibuffer completion list window?

我想為迷你緩沖區完成列表設置一個特定的窗口。 目前,我在此配置中有3個窗口:

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

在這種情況下,我想使用左下角窗口顯示迷你緩沖區完成列表。

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

另外,當我加載Emacs時,我正在使用名為revive.el的lisp腳本從文件(〜/ .revive.el) 恢復窗口配置。

在開始嘗試使用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*

一個有點作弊的答案可能會做你想要的:

使用左手邊的左下窗口完成* Completions *緩沖區

C-x b *Completions* RET

當光標在該窗口中處於活動狀態時。 然后每當迷你緩沖區必須顯示一些完成時,它應該總是使用這個特定的窗口。 但是,這將依賴於此緩沖區始終保持打開和可見 - 可能不是您想要的?

其他可能性:

  1. 看看“ 冰柱 ”是否有幫助 - 例如它提到“有許多冰柱特征可以增強'*完成*'的顯示和行為”。
  2. 完成的Minibuffer命令可能有用嗎?

不像Trey的回答那么強大,但似乎也是以粗暴的方式運作。

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

這僅在您不介意鎖定第3個窗口時才有效。 不幸的是,它仍然會不時嘗試使用第一個窗口(這不太令人沮喪,但仍然是不受歡迎的)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM