¿Cómo soluciono mi solicitud en el modo shell de emacs?

13

Estoy haciendo algo de programación en la máquina de un colega. Tiene una versión de emacs (23.1.1) que no he usado antes. Mi problema es que cuando voy al modo shell, mi indicador de bash se ve así:

^[]0;jay@socrates:~^G[jay@socrates]$ 

Me he PS1puesto a '[\u@\h]\$ 'mi .bashrc. Se supone que debe verse así:

[jay@socrates]$

Así es como se ve en un shell normal. También he comprobado que PS1 está configurado con el valor correcto en el shell de emacs, así que ahora no tengo ideas. ¿Cómo puedo hacer que mi mensaje se vea como quiero?

He visto algunas sugerencias para usar termo en eshelllugar de shell. termtiene el mismo problema rápido que el anterior, e eshellignora por completo mi, PS1así que eso realmente no ayuda.

Jay Conrod
fuente

Respuestas:

13

Su shell está tratando de configurar el título / encabezado de XTerm (u otra consola). Hay varias formas de hacer esto.

Primero asegúrate de que la PS1 sea realmente lo que crees que es

echo $PS1 | less -E

Eso le dirá si hay caracteres de control en la solicitud, menos los hará parecer divertidos. Suponiendo que su solicitud sea exactamente como usted dice, entonces probablemente sea la variable de entorno PROMPT_COMMAND. Puedes ver eso de la misma manera ...

echo $PROMPT_COMMAND | less -E

Si el comando de solicitud es el problema, simplemente puede desarmarlo. En cualquier caso, estas variables se están configurando en algún lugar, y no se deben configurar para actualizar el encabezado XTerm, si no está en un XTerm.

Puede buscar en el bashrc "estándar" (/ etc / bashrc). Debería ver un código que verifica si hay un shell iterativo (está configurado para PS1), y luego busca xterm (mirando la variable $ TERM), y hace algo diferente allí que para otros tipos de terminales.

Sospecho que en algún lugar de la inicialización de bash hay una configuración codificada, que solo debe hacerse en programas de consola compatibles con xterm. Lea man bash para encontrar una lista total de archivos que puede buscar y revisar.

Si todo lo anterior falla, intente

printenv | less

Y vea si puede encontrar algo sospechoso allí, y luego rastree dónde se está configurando. Publíquelo aquí si no puede resolverlo.

Peter
fuente
1
PROMPT_COMMAND fue el problema. No estoy seguro de dónde se está configurando, pero agregué una línea a mi ~ / .bashrc para desarmarlo, y eso funciona. ¡Gracias!
Jay Conrod
PROMPT_COMMAND también me estaba matando. Estoy usando MobaXTerm y tiene un indicador de bash particularmente complicado que fue una combinación de PS1 y PROMPT_COMMAND.
Steve Broberg
5

Encontré exactamente el mismo problema y se debe a PROMPT_COMMAND. Me gusta el título de xterm. Entonces agregué la siguiente línea en ~ / .emacs_bash

export PROMPT_COMMAND=""
SG1
fuente
2

Puede tener algo que ver con el tipo de terminal del shell emacs frente a su shell normal. Compruebe en qué se establece la TERMvariable de entorno en ambos shells. Si son diferentes, entonces debería poder cambiar el tipo de terminal de shell emacs o usar una definición PS1 diferente para el tipo de terminal emacs .bashrc.

También puede intentarlo M-x ansi-term(y ansi-color-for-comint-mode-onsi tiene indicaciones de color).

luapyad
fuente
1
¡ansi-color-for-comint-mode-on me ayudó!
Usuario1
1

Esto fue respondido muy bien en el sitio stackoverflow. por Daniel Poe.

Aquí está su respuesta.

Puede usar AnsiTerm que admite colores o puede habilitar AnsiColor para el shell normal:

(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
Comunidad
fuente