我想为迷你缓冲区完成列表设置一个特定窗口。目前,我在此配置中有3个窗口:
______
| | |
|____| |
|____|_|
在这种情况下,我想使用左下角窗口显示迷你缓冲区完成列表。
目前,它似乎是一个随机的窗口,而且大多数时候它都喜欢使用最右边的窗口,这个窗口太薄而不能显示完成列表而不必我水平滚动,这很烦人。
另外,当我加载Emacs时,我正在使用名为revive.el的lisp脚本来从文件(〜/ .revive.el)恢复我的窗口配置。
答案 0 :(得分: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 :(得分:1)
可能会做出你想做的事情,这是一个有点作弊的答案:
使用
手动将左下窗口设为* Completions *缓冲区C-x b *Completions* RET
当光标在该窗口中处于活动状态时。然后每当迷你缓冲区必须显示一些完成时,它应该总是使用这个特定的窗口。但是,这将依赖于这个缓冲区始终保持打开和可见 - 可能不是你想要的?
其他可能性:
答案 2 :(得分:0)
不像Trey的回答那么强大,但似乎也粗暴地运作。
; Go to the 3rd window, and make it dedicated.
(other-window 2)
(set-window-dedicated-p (selected-window) 1)
这仅在您不介意锁定第3个窗口时才有效。不幸的是,它仍然会不时尝试使用第一个窗口(这不太令人沮丧,但仍然是不可取的)。
注意:我刚试过Trey的解决方案,现在就可以了,所以我建议人们使用它。