¿Alguna forma de hacer que las solicitudes y la salida anterior no se puedan editar en el modo shell / term?


9

Esta es ciertamente una pregunta superficial.

Aunque ansi-termcomienza a comportarse correctamente cuando lo abro por primera vez, parece degradarse a un modo 'editable' después de algunos comandos, por ejemplo, cuando lo hago C-a(inicio de línea) seguido de C-k(línea de cierre), borra todo el mensaje.

Para mi cordura estética, ¿hay alguna manera de hacer que las indicaciones y la salida anterior no sean editables (para shell)? (Actualizado para excluir el término ansi dadas las diferencias significativas).

Estoy usando zsh en Emacs 24.4; El sistema operativo es LXDE (Ubuntu 14.04) a través de Virtual Box.

(Lo ideal sería poder mover el cursor ...)


1
¿Está usted en un sistema operativo "extraño" por casualidad? Por lo general, en modo shell, Ca salta al inicio de la línea de comandos, después de la solicitud, y se requiere una segunda Ca para saltar al inicio. En Windows y Solaris (en una vida anterior), generalmente descubrí que Ca saltó al principio, mientras que en MacOS, Linux, etc. funciona como se esperaba para mí.
Mark Aufflick

@ Mark A: He actualizado la publicación original para incluir algunos detalles más, incluida mi configuración actual.
Iceman

El comportamiento descrito de ansi-term suena como si hubiera cambiado al modo de línea por defecto o por defecto C-c C-j. Intente descubrir ese valor predeterminado o cambie al modo char con C-c C-k.
wasamasa

1
Dado que shell-mode/ term-moderespectivamente no se deriva / no comint-mode, aquí hace dos preguntas muy diferentes al mismo tiempo. ¿Te importaría dividir esto en dos preguntas separadas?
purple_arrows

Respuestas:


16

los modos derivados de comint (como shell, ielm...) admiten funciones de filtro, el siguiente fragmento hace que la salida y el mensaje sean de solo lectura:

(setq comint-prompt-read-only t)

(defun my-comint-preoutput-turn-buffer-read-only (text)
  (propertize text 'read-only t))

(add-hook 'comint-preoutput-filter-functions 'my-comint-preoutput-turn-buffer-read-only)

En cuanto a ansi-term(que no se deriva de comint ), presenta dos modos de operación, char modeque se mantienen lo más veraz posible para los enlaces del shell y el software que se ejecuta en él, y line modeque le permite editar el búfer como lo desee. Por lo general, debe permanecer en char mode(vinculado a C-c C-k) y ocasionalmente cambiar a line mode(vinculado a C-c C-j) para editar la salida del comando.


Esto fue realmente bonito, pero dejó de funcionar ... :( Tengo una solución de trabajo que requiere mucho más código → github.com/michalrus/dotfiles/commit/…
Michal Rus

No sé, todavía funciona para mí en 25.2.
wasamasa

En cierto sentido, no puede eliminar este texto, pero puede insertar un nuevo intercalado con ese inmutable.
Michal Rus

1
Ya veo, no probé eso específicamente.
wasamasa

Vaya, un cambio más para cualquiera que esté buscando. Me perdí algunas lagunas antes. Este funciona perfectamente para mí. github.com/michalrus/dotfiles/blob/…
Michal Rus

2

Cuando se mezcla termcon shell-mode, la variable comint-use-prompt-regexpparece establecerse ocasionalmente. Esto provoca un comportamiento un poco como el que ha descrito: en el modo shell C-a irá al principio de la línea, C-kmatará toda la línea, incluida la solicitud.

Una solución simple es restablecer comint-use-prompt-regexpcon C-: (setq comint-use-prompt-regexp nil), obligando al modo shell a usar propiedades de texto que las teclas de movimiento del cursor conocen.

Hay una descripción de cómo funciona esto en el manual de GNU Emacs aquí: https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Prompts.html


1

Intenta personalizar la variable comint-prompt-read-onlya t.

Esto afectará shell-modey otros derivados de comint-mode, pero no term-mode.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.