2009-05-22 12 views
7

Me gustaría establecer una ventana específica para la lista de finalización del minibúfer. Actualmente, tengo 3 ventanas en esta configuración:En Emacs, ¿cómo cambio la ventana de lista de finalización del minibúfer?

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

En este caso, me gustaría utilizar la ventana inferior izquierda de la lista de terminación minibuffer.

Actualmente, parece una ventana al azar, y la mayoría de las veces le gusta usar la ventana del extremo derecho, que es demasiado delgada para mostrar la lista de finalización sin tener que desplazarse horizontalmente, lo cual es irritante.

Además, estoy usando un script Lisp llamada revive.el-restaurar mi configuración de la ventana de un archivo (~/.revive.el) cuando la carga de Emacs.

+0

Parece ser la ventana utilizada menos recientemente ... –

+0

Hmm, no estoy seguro, no parece ser tan predecible para mí ... Algunas veces, le gusta usar la parte inferior izquierda, pero lo cambia a la mitad de la altura de la pantalla; lo cual es molesto porque me gusta tener mucho espacio para editar el código en la esquina superior izquierda. –

+0

Tenga en cuenta todo lo que desea el OP, pero el búfer de terminaciones puede aparecer en una ventana dedicada utilizando popwin.el: https: // github de Tomohiro Matsuyama.com/m2ym/popwin-el –

Respuesta

9

Después de iniciar el camino de intentar usar minibuffer-scroll-window (que resulta no ser personalizable por el usuario). He intentado este enfoque:

(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))) 

Esto funciona mediante el fraccionamiento de la única ventana en dos y mostrando *Completions* en la ventana inferior, o, si ya hay 2 o más ventanas que se muestran, mediante la ventana de abajo a la izquierda para mostrar la *Completions*.

+0

Quizás necesite usar setq-default en lugar de setq. – Svante

+0

Parece que minibuffer-complete establece la variable a cero al ingresar la primera vez que se invoca. No estoy seguro de cómo esa variable puede personalizarse alguna vez. –

+0

Hmm, la función my-minibuffer-setup-hook que ha especificado no parece tener ningún efecto para mí, tristemente. –

1

Una respuesta poco trampa que puede hacer lo que quiera:

manualmente hacer la ventana inferior izquierda los * Terminaciones * buffer usando

C-x b *Completions* RET 

cuando el cursor está activo en esa ventana. Entonces, siempre que el minibúfer tenga que mostrar algunas terminaciones, siempre debe usar esta ventana en particular. Sin embargo, esto dependerá de que este búfer permanezca abierto y visible todo el tiempo, probablemente no sea exactamente lo que quieres.

Otras posibilidades:

  1. ver si "Icicles" ayuda - por ejemplo, menciona "Hay muchas características de Carámbanos que mejoran la visualización y el comportamiento de '* Completions *'".
  2. Minibuffer Commands That Do Completion puede ser útil?
+0

Lo he intentado con ambos, pero parece que no logro que recuerden la ventana que se usará para el búfer * Completions *. ¡Gracias de cualquier manera! –

+0

Ah, también, sí, soy consciente de que cambiar el buffer de una ventana es una forma de solucionar el problema, pero como probablemente sabrá, es temporal. Cuando presiono tab en el minibúfer la próxima vez, no usa la ventana que usó la última vez. Muy frustrante –

0

No es tan robusto como la respuesta de Trey, pero también parece funcionar de manera tosca.

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

Esto solo funciona si no te importa que la 3ª ventana esté bloqueada. Lamentablemente, aún así intentará usar la primera ventana de vez en cuando (lo cual es menos frustrante, pero aún no es deseable).

Nota: Acabo de probar la solución de Trey y funcionó ahora, por lo que recomiendo que la gente la use.

Cuestiones relacionadas