В Emacs, как мне изменить окно списка завершения минибуфера? - PullRequest
7 голосов
/ 23 мая 2009

Я хотел бы установить конкретное окно для списка завершения минибуфера. В настоящее время у меня есть 3 окна в этой конфигурации:

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

В этом случае я бы хотел использовать нижнее левое окно для списка завершения минибуфера.

В настоящее время это окно кажется случайным, и большую часть времени ему нравится использовать крайнее правое окно, которое слишком тонкое, чтобы показывать список завершения без необходимости прокрутки по горизонтали, что раздражает.

Кроме того, я использую скрипт lisp с именем revive.el до восстановления моей конфигурации окна из файла (~ / .revive.el) при загрузке Emacs.

Ответы [ 3 ]

9 голосов
/ 23 мая 2009

После запуска по пути попытки использовать 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 голос
/ 24 мая 2009

Слегка обманчивый ответ, что может делать то, что вы хотите:

Вручную сделайте нижнее левое окно буфером * Completions *, используя

C-x b *Completions* RET

когда курсор активен в этом окне. Тогда всякий раз, когда минибуфер должен отображать некоторые дополнения, он всегда должен использовать это конкретное окно. Тем не менее, это будет зависеть от того, что этот буфер остается открытым и видимым все время - вероятно, не совсем то, что вы хотите?

Другие возможности:

  1. Посмотрите, помогает ли " Сосульки " - например, в нем упоминается «Существует множество функций Icicles, которые улучшают отображение и поведение‘ * Completions * ’».
  2. Команды минибуфера, которые выполняют завершение может быть полезным?
0 голосов
/ 26 мая 2009

Не такой надежный, как ответ Трея, но, похоже, работает грубо.

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

Это работает, только если вы не возражаете против блокировки 3-го окна. К сожалению, он все равно будет время от времени пытаться использовать 1-е окно (что не так разочаровывает, но все же нежелательно).

Примечание: Я только что попробовал решение Трея, и теперь оно работает, поэтому я рекомендую людям использовать его.

...