emacs - source - versiones de lisp
¿Cerrar automáticamente el búfer de finalización de pestañas del modo shell de emacs? (3)
Creo que esto es exactamente lo que quieres.
La función de eliminación-finalización-ventana-búfer se ejecutará cada vez que ingrese un comando. Encuentra todas las ventanas actuales y obtiene el búfer fuera de él. Luego verificará si el nombre del búfer es "* Completions *", el búfer que te vuelve loco, y si es así, elimina el búfer y elimina la ventana correspondiente.
Por último, pasa la cadena de salida a su próximo enganche comint-preoutput-filter-functions.
¿Por qué hay un argumento de salida? Ver el documento de comint-preoutput-filter-functions; mejor explicado ahi
(defun delete-completion-window-buffer (&optional output)
(interactive)
(dolist (win (window-list))
(when (string= (buffer-name (window-buffer win)) "*Completions*")
(delete-window win)
(kill-buffer "*Completions*")))
output)
(add-hook ''comint-preoutput-filter-functions ''delete-completion-window-buffer)
Pero en realidad, el búfer de finalización no me molesta mucho. Lo que molesta es que el comando "borrar" no funciona bien. Para resolver tu problema, busco el modo shell de Google, no hay nada allí.
Pero tengo una solución a mi problema EmacsWiki .
(defun clear-shell ()
(interactive)
(let ((comint-buffer-maximum-size 0))
(comint-truncate-buffer)))
(define-key shell-mode-map (kbd "C-l") ''clear-shell)
Lo vinculo a Ctrl-L, el enlace de terminal normal.
Buen código. ¡Espero que te guste!
Esto me ha vuelto loco por mucho tiempo; Me pregunto si hay alguna forma de arreglarlo. Espero poder describir bien la situación.
Para simplificar, digamos que tengo la siguiente estructura de directorios: ~ jer / dirA y ~ jer / dirB
Dentro de una shell dentro de emacs, comienzo en mi directorio de nivel superior (~ jer), escribo ''cd dir'' y presiono la pestaña.
Mi ventana se divide en 2, y tengo un búfer * Completions *. Esto es genial; Veo que mis opciones son ''dirA'' y ''dirB'', escribo una ''A'' (por lo que mi comando completo es ''cd dirA'') y presiono Intro, pero el búfer * Completions * permanece abierto y tengo que cerrarlo manualmente (Generalmente con ''Cx 1'' porque estoy en el búfer de shell que quiero guardar, pero si ya tengo una ventana dividida, esto es aún más molesto, porque el búfer * Completions * toma el lugar de la otra que estaba ya estoy allí, y tengo que cambiar a esa y presionar Cx k para matarla manualmente).
Entonces, mi pregunta: ¿hay una manera de hacer que los * Terminaciones * mueran automáticamente una vez que termine mi comando? En el ejemplo anterior, tan pronto como presiono Intro después de escribir ''cd DirA'' me gustaría que se eliminara el búfer.
Gracias, y espero que esto tenga sentido. Tenga en cuenta que no creo que este sea un duplicado de ¿Hay alguna forma de cerrar automáticamente los buffers de terminación de nombre de archivo en Emacs? , porque se trata de usar el archivo de búsqueda (y en ese caso el búfer * Completions * se cierra).
eshell-modo. El búfer de completamientos se cerrará cuando golpee el espacio o el comando finalice