¿Hay alguna manera fácil de vaciar toda la salida en el shell
búfer? Desde hace poco (creo que Emacs 24.4 ya tiene esto) los *shell*
buffers no son editables, se comportan de manera similar a cómo se comportaría un terminal típico, es decir, solo le permite agregar texto al final o vaciar la última salida, pero no puede agregue texto en cualquier lugar o elimine parte de él arbitrariamente. Parece que me falta algo importante sobre esta mejora (?). Realmente lo hace más molesto. Busqué en los documentos los buffers *shell*
y *Messages*
, pero no pude encontrar una mención de la pregunta.
Además de la pregunta original: ¿cuál es el punto de este cambio? Para mí, esto no parece una mejora en absoluto, por lo tanto, a menos que haya "una trampa", me gustaría configurarlo como lectura-escritura como predeterminado.
Estoy hablando de Emacs 24.4 , 25.0.50.1, por supuesto.
fuente
Messages
ser de solo lectura ahora, pero no veo cómo eso se relaciona con los buffers de shell.shell
búfer @Malabarba también solía ser completamente editable. Es decir, puede eliminar o agregar texto en cualquier momento que desee, mientras que ahora solo puede agregar texto al final, y no puede eliminarlo en ningún otro lugar también.*Messages*
se comporta de la misma manera.Respuestas:
(erase-buffer)
no funcionará en las memorias intermedias de impresión y shell si son de solo lectura.Aquí está el defun que uso con bastante frecuencia para eliminar los búferes cascarones:
Quizás pueda vincular esto
s-k
en sus modos relevantes para imitar el comportamiento de borrado de Terminal.app de OSX.Actualización 11/2016
En algún lugar del desarrollo de Emacs 25 (y también en mi última compilación que es "26.0.50.1"),
(comint-clear-buffer)
se agregó acomint-mode
, que es una versión más concisa de mi defun personalizado. Aquí está la fuente de referencia:Esta solución integrada también funciona si tiene
(setq comint-prompt-read-only t)
.fuente
M-x shell
entonces: SM-x erase-buffer
funciona perfectamente en un búfer de modo Shell en el tronco de Emacs, y no veo ninguna razón por la que no debería funcionar también en 24.4.(erase-buffer)
no me funciona personalmente. Tengo(setq comint-prompt-read-only t)
en mi configuración, que me parece útil para no golpear el mensaje y, por lo tanto,(erase-buffer)
me ladra.Puede limpiar el
*Messages*
búfer de la misma manera que siempre, con elkill-buffer
comando. La próxima vez que se señale un mensaje, el búfer se volverá a crear.La razón por la que este búfer es de solo lectura ahora, es porque se le ha otorgado su propio modo mayor , que hereda de
special-mode
, que es de solo lectura. Las ventajas detrás de eso son varias.special-mode
está diseñado para leer, por lo que tiene varias combinaciones de teclas que son muy convenientes para los buffers que no están destinados a ser editados.No estoy seguro de qué
*shell*
tiene que ver con nada. Pero si quieres borrarlo,M-x
erase-buffer
deberías hacerlo.fuente