Me gustaría mostrar 3 listas de palabras en líneas separadas horizontalmente a lo largo de la parte inferior (aunque la parte superior también funcionaría) de cada cuadro de emacs que tengo abierto. He pensado en 6 formas de hacer esto, y todas tienen problemas:
Lo primero que pensé fue agregar una línea a mi línea de modo, pero AFAICT no puede usar el carácter de nueva línea en una línea de modo, simplemente se convierte a "^ J".
Mi segundo pensamiento fue tener la línea en la parte superior de la pantalla y usar la línea de encabezado, pero tampoco admite el carácter de nueva línea.
Podría mostrar una superposición en las últimas 3 líneas de la ventana, pero hacer que esto sea robusto parece difícil: el desplazamiento tendría que activarse cuando el punto llegara a la superposición en lugar del final real de la ventana, y tendría que reposicionar constantemente la superposición ya que las superposiciones están en el espacio de texto, no en el espacio de la ventana.
Podría intentar hacer ventanas dedicadas en la parte inferior del marco. He intentado codificar esto, pero tampoco es muy robusto, no parece funcionar bien cuando un marco ya contiene ventanas divididas y he tenido que volver a vincular Cx, 1 a una versión personalizada de delete-other-windows que ignora mis ventanas especiales y estoy seguro de que hay otros casos de esquina. Además, cuando se abre una ventana de ayuda ahora se abre verticalmente porque cree que ya hay una división horizontal (que técnicamente existe, pero es solo para mostrar una ventana de una línea).
Podría tener un marco dedicado para esto, pero luego mi configuración no funcionará en modo terminal, y tendría que hacer un script en mi administrador de ventanas para manejarlo en la parte inferior de la pantalla, haciéndolo no seleccionable, sin afectar el diseño, etcétera etcétera.
Podría insertar el texto de las 3 líneas directamente en el minibúfer. Obtuve esto parcialmente funcionando, puedo hacer crecer el minibúfer para acomodar las 3 líneas, y puedo mostrarlas. Sin embargo, cada vez que se hace eco de un mensaje, las líneas desaparecen hasta que emito otro comando en el momento en que vuelven a aparecer. Idealmente, las 3 líneas y el área de eco no se superpondrían para poder ver ambas. Esto sería menos molesto si pudiera filtrar de manera confiable qué mensajes van al área de eco: encontré una solución en EmacsWiki pero no parece funcionar para los mensajes que se originan en la fuente emacs C (específicamente me gustaría obtener deshacerse de los mensajes que guardan archivos porque guardo automáticamente en un temporizador).
Para el contexto, mi objetivo es mostrar constantemente las palabras que se usan con más frecuencia en el búfer actual, el punto más cercano en el búfer actual y las palabras que se usaron más recientemente en el búfer actual. Tengo la intención de poder insertarlos en el búfer a través de comandos de voz. Entonces podría decir "2 más cercano" y hacer que elija el segundo elemento de la lista de palabras punto más cercano e insertarlo. Solo me importa que las listas de palabras sean visibles para cualquier búfer que esté editando actualmente. No quiero usar las ventanas emergentes utilizadas por los diversos modos de finalización de código porque necesito que las listas estén siempre visibles.
Respuestas:
Con mucha experimentación hacky pude obtener el n. ° 6 (usando texto de minibúfer) a un estado de trabajo 'suficientemente bueno'. Aquí hay una captura de pantalla:
Hay varias partes clave para que esto funcione:
Aquí hay un enlace a mi implementación con un cinturón de ejemplo que muestra el anillo de matar. Eventualmente, esto será parte de un proyecto adecuado: https://gist.github.com/jgarvin/ce37d08654978fd7e4c9
Esta es la primera vez que escribo una cantidad significativa de elisp, por lo que la calidad probablemente sea inferior, pero funciona.
fuente
Desafortunadamente, ni la línea de modo ni la línea de encabezado pueden ser líneas múltiples. He preguntado sobre esto antes y no hay (al menos no) ninguna opción oculta para que esto funcione. Entonces 1 y 2 están fuera. También siento que 3 y 6 son hacks que no te harán feliz a la larga. 3 y 4 parecen buenos enfoques, pero lograr que funcionen de manera confiable será una gran inversión.
Por lo tanto, recomendaría que primero mencione esto en emacs-devel . En mi experiencia, las cosas se implementan eventualmente si te molestas en explicar cuidadosamente lo que quieres y por qué eso es algo bueno. Puede llevar algo de tiempo, al menos hasta la próxima versión, pero si está bien esperando un poco o utilizando la versión de desarrollo, podría obtener exactamente lo que desea, con mucho menos esfuerzo.
fuente