在Emacs中,如何更改迷你缓冲区完成列表窗口?

Nic*_*ton 7 emacs elisp

我想为迷你缓冲区完成列表设置一个特定的窗口.目前,我在此配置中有3个窗口:

 ______
|    | |
|____| |
|____|_|
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想使用左下角窗口显示迷你缓冲区完成列表.

目前,它似乎是一个随机的窗口,并且大多数时候它喜欢使用最右边的窗口,这个窗口太薄而不能显示完成列表而不必我水平滚动,这很烦人.

另外,我使用了一个名为口齿不清脚本revive.el恢复从文件(〜/ .revive.el)我的窗口配置时,我打开Emacs的.

Tre*_*son 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)))
Run Code Online (Sandbox Code Playgroud)

这可以通过将单个窗口分成两部分并*Completions*在底部窗口中显示,或者,如果已经显示2个或更多窗口,则使用左下方窗口来显示*Completions*.