我想为迷你缓冲区完成列表设置特定的窗口。目前,我的配置中有3个窗口:
______
| | |
|____| |
|____|_|
在这种情况下,我想使用左下角的窗口来显示迷你缓冲区完成列表。
目前,它似乎随机选择一个窗口,大多数情况下喜欢使用最右边的窗口,但该窗口太窄了,无法显示完成列表,必须水平滚动,这很烦人。
此外,我正在使用一个名为revive.el的lisp脚本,当我加载Emacs时,从文件(~/.revive.el)中恢复我的窗口配置。
我想为迷你缓冲区完成列表设置特定的窗口。目前,我的配置中有3个窗口:
______
| | |
|____| |
|____|_|
在尝试使用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*
显示在底部的窗口中。如果已经显示了两个或更多的窗口,则使用左下角的窗口来显示*Completions*
。
C-x b *Completions* RET
当光标在该窗口处于活动状态时。每当迷你缓冲区必须显示一些完成时,它应始终使用此特定窗口。但是,这将依赖于保持此缓冲区始终处于打开和可见状态 - 可能不完全是您想要的?
其他可能性:
不如 Trey 的答案稳健,但似乎也以一种粗糙的方式工作。
; Go to the 3rd window, and make it dedicated.
(other-window 2)
(set-window-dedicated-p (selected-window) 1)
仅当您不介意第三个窗口被锁定时,此方法才有效。不幸的是,它仍会尝试不时使用第一个窗口(这较不令人沮丧,但仍不理想)。
注意:我刚试过Trey的解决方案,现在它能用,所以我建议大家使用它。