Cuando se trabaja en un marco Emacs maximizado, puede ser difícil ver el contenido del área de minibúfer / eco en la parte inferior de la pantalla, pero también hace que pierda el foco en el texto que se edita al escribir un comando, lo cual es bastante problema en términos de usabilidad.
¿Hay alguna forma de mover el área del minibúfer / eco en el centro del búfer emacs actual, sobre el texto que se edita cuando el minibúfer está activo o, mejor, capturar el contenido del minibúfer y mostrarlo también en el centro del búfer actual mientras escribe el comando?
minibuffer
Sébastien Le Callonnec
fuente
fuente
Respuestas:
Minibúfer emergente en el centro
Aquí hay una manera de hacer exactamente lo que pidió: mostrar el minibúfer en el centro de la pantalla .
Eso es relativamente fácil de lograr y es lo que obtendrá con el
oneonone.el
paquete (como señala @Drew). El problema con este enfoque es que el minibúfer también se usa para mensajes, por lo que mantenerlo oculto no es algo muy conveniente. ¡No es para preocuparse! Se me ocurrió otra solución.Implementación
Para implementar esto, necesitamos crear el marco de minibúfer al inicio de emacs.
Luego aplicamos parches
read-from-minibuffer
para usar este segundo minibúfer, en lugar del minibúfer del marco original.Esto podría no funcionar con absolutamente todo, pero trabajado en todo lo que probé hasta ahora ---
find-file
,ido-switch-buffer
,eval-expression
. Si haces encontrar alguna excepción, se puede parchear estas funciones sobre una base de caso por caso llamandouse-popup-minibuffer
en ellos.Posición cerca del punto
Para colocar este marco de minibúfer cerca de la altura del punto, simplemente defina algo como la siguiente función. No es perfecto (de hecho, es horrible en muchos casos), pero hace un trabajo decente al estimar la altura del punto.
fuente
(setf (symbol-function function) ...)
perder el tiempo, sería mejor usarloadvice-add
(o el anteriorad-add-advice
).Minibúfer en la parte superior
Mostrar el minibúfer en el centro de la pantalla es complicado. Una alternativa razonable (que puede o no encontrar más legible) es moverlo a la parte superior.
Puede configurar la ubicación (o existencia) del minibúfer de un cuadro con el
minibuffer
parámetro del cuadro en lainitial-frame-alist
variable.Marco separado
Establecer el parámetro en
nil
configurará el marco para que no tenga minibúfer, y Emacs creará automáticamente un marco de minibúfer separado para usted. Puede colocar estos dos marcos utilizando el administrador de ventanas de su sistema operativo, o puede hacerlo desde Emacs.El siguiente fragmento ejemplifica cómo colocar el marco del minibúfer en la parte superior, con el marco regular justo debajo, pero definitivamente tendrá que cambiar los números para tener en cuenta el tamaño de su monitor.
La forma más rápida de ajustar esto es cambiar el tamaño de los marcos en el administrador de ventanas y luego evaluar
(frame-parameters)
para ver los valores de los parámetros que tiene.Mismo marco
Otra posibilidad es establecer el
minibuffer
parámetro en una ventana. Desafortunadamente, no pude hacer que esto funcione para una ventana en el mismo marco.fuente
Library
oneonone.el
te ofrece esto de forma inmediata.Simplemente personalice la opción
1on1-minibuffer-frame-top/bottom
en la posición que desee para el marco de minibúfer independiente. El valor es el número de píxeles desde la parte superior (si no es negativo) o desde la parte inferior (si es negativo) de su pantalla. Por ejemplo, establezca el valor en la altura de su pantalla dividida por 2, para centrarla verticalmente.Si, por el contrario, desea que se posicione dinámicamente, digamos en el centro vertical del marco actual, puede hacerlo (a) dejando
1on1-minibuffer-frame-top/bottom
=nil
y (b) aconsejando a la función1on1-set-minibuffer-frame-top/bottom
que vincule esa variable dinámicamente a la posición adecuada. Por ejemplo:(Defina la función
my-dynamic-position
para calcular la posición que desea, en función de los criterios que desee (ventana actual / tamaño y posición del marco, fase de la luna, ...).fuente