2009-05-22 64 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的解决方案,现在它工作,所以我建议人们使用它。

相关问题