Ocultar el área de eco de Emacs durante la inactividad
elisp emacs23 (5)
El área de eco es la línea en la parte inferior de Emacs debajo de la línea de modo:
~ ~
| |
+-----------------------+
|-U:--- mode-line |
+-----------------------+
| M-x echo-area |
+-----------------------+
Ahora, la línea de modo es altamente personalizable, mientras que el área de eco es más rígida (y no se usa muchas veces). La pregunta es bastante simple: es posible ocultar el área de eco durante la inactividad y volver a mostrarla una vez que necesite su atención:
~ ~ ~ ~
| | | |
| | +-----------------------+
| | |-U:--- mode-line |
+-----------------------+ +-----------------------+
|-U:--- mode-line | | M-x echo-area |
+-----------------------+ +-----------------------+
Inactive Active
Esto es similar a la forma en que Google Chrome muestra las URL cuando pasa el mouse sobre un enlace y el complemento de Firefox Pentadactyl, donde la línea de comandos está oculta de forma predeterminada.
Esta NO es la respuesta a lo que está preguntando, no le dará el mini-búfer, sino que reclamará un poco de bienes raíces de pantalla
(defun toggle-mode-line () "toggles the modeline on and off"
(interactive)
(setq mode-line-format
(if (equal mode-line-format nil)
(default-value ''mode-line-format)) )
(redraw-display))
(global-set-key [M-f12] ''toggle-mode-line)
Y para completar, el sello del luddite-mode
(global-set-key [f12] ''(lambda () (interactive) (menu-bar-mode nil) (scroll-bar-mode nil)))
Por supuesto, es conveniente comenzar con esto:
(cond ((> emacs-major-version 20)
(tool-bar-mode -1) ; introduced in emacs 21
(menu-bar-mode -1)
(scroll-bar-mode -1)
(menu-bar-showhide-fringe-menu-customize-disable)
(blink-cursor-mode -1)
(windmove-default-keybindings ''meta)))
Esperaré ansiosamente la respuesta a esta pregunta y la incorporaré en luddite-mode
Por lo que sé, no es posible ocultar el área de eco , y no estaría de acuerdo con usted en que no se haya utilizado durante mucho tiempo. Desde la conmutación del búfer a través de comandos Mx a la salida del minibúfer, muchas cosas diferentes pasan en el área de eco.
Puedo entender que en pantallas pequeñas, por ejemplo, en netbooks, etc. es deseable guardar el estado de la pantalla. Pero yo diría que el área de eco se usa mucho más cuando edita un archivo que la barra de direcciones de un navegador web cuando se mira una página web. Es una parte integral de Emacs.
Puede obtener un marco sin minibuffer usando este código
(setq default-minibuffer-frame
(make-frame
''((name . "minibuffer")
(width . 0)
(height . 0)
(minibuffer . only)
(top . 0)
(left . 0)
)))
(setq new-frame
(make-frame
''((name . "editor")
(width . 80)
(height . 30)
(minibuffer . nil)
(top . 50)
(left . 0)
)))
que tomé y modifiqué de here adelante.
Aunque puede crear marcos sin minibuffer, parece imposible deshacerse de minibuffer y hacerlo aparecer solo cuando sea necesario, como lo describe el ejemplo de la barra de estado de Google Chrome.
Técnicamente, no es posible ocultar el área de eco. Sin embargo, tengo una idea que podría dar la misma apariencia, bajo el supuesto de que trabajas con Emacs en un entorno de pantalla completa. En ese caso, una herramienta podría cambiar el tamaño de la ventana de emacs (el "marco" en emacs-speak) para que llene la pantalla o se extienda más allá de la parte inferior de la pantalla, dependiendo de si el área de eco debe ser visible o no.
Desafortunadamente, no tengo tiempo para implementar esto, así que le dejo a otra persona que haga esto y reclame la recompensa.
El primer desafío es encontrar un buen lugar para hacer el cambio de tamaño, uno de esos lugares podría ser el post-command-hook
. Otros lugares pueden ser minibuffer-setup-hook
y minibuffer-setup-hook
El segundo desafío es decidir si el área de eco debe ser visible o no, creo que puede usar current-message
para verificar si se está mostrando un mensaje.
Una cosa que puedes hacer es dividir el minibúfer en su propio marco, luego esconderlo y mostrarlo según sea necesario.
(setq minibuffer-frame-alist (append ''((auto-raise . t) (auto-lower . t)) minibuffer-frame-alist))
(setq initial-frame-alist (append ''((minibuffer . nil)) initial-frame-alist))
Perderás los mensajes del área de eco, pero creo que ya no te importa eso.
EDITAR: lo anterior no fue probado, e incompleto. Esto parece funcionar aquí:
(setq initial-frame-alist (append ''((minibuffer . nil)) initial-frame-alist))
(setq default-frame-alist (append ''((minibuffer . nil)) default-frame-alist))
(setq minibuffer-auto-raise t)
(setq minibuffer-exit-hook ''(lambda () (lower-frame)))