Actualmente estoy configurando $TERM
en xterm-256color
:
if [[ -n "$EMACS" ]]; then
export TERM=xterm-256color
alias emacs="emacsclient --no-wait"
export EDITOR="emacsclient --no-wait"
export VISUAL="emacsclient"
fi
Solía tenerlo configurado en eterm-color
, pero el problema es que este tipo de terminal no está disponible en la mayoría de las máquinas en las que inicio sesión a través de SSH.
El valor predeterminado .bashrc
en Ubuntu comprueba si la TERM
variable comienza con xterm-
, en cuyo caso intenta establecer el título de la ventana:
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
El problema es el \[\e]0;
bit. Debería ser analizado por emuladores de terminal compatibles con xterm, pero emacs (ansi-term) no hace eso. El resultado de lo cual es una terminal como esta:
0;user@host: ~user@host:~$
También rompe algunas aplicaciones que usan readline
, cuando el texto escrito es más grande que el ancho del terminal.
Debido a que eterm-color
no está disponible en algunos hosts remotos (y tampoco puedo instalarlo), configurarlo en ese valor estropea cosas como less
.
¿Hay algún truco que pueda usar, como otro tipo de terminal que se envíe con la mayoría de las distribuciones o un truco que haga que ansi-term reconozca?los códigos de escape relevantesy establecer el título, o simplemente descartarlos?
Respuesta1
Desarrollé un enfoque que le permite averiguar específicamente qué terminales están disponibles en el host remoto y luego configurarlo. Normalmente hay al menos un terminal compatible con ansi, por lo que un 'hack' para falsificarlo debería ser innecesario.
Hecho con un comando ssh largo, se verá así:
ssh -i ~/.ssh/some_key.pub -tty some_remote_server "export TERM=`ls -1R /usr/share/terminfo | grep ^eterm-color$ || ls -1R /usr/share/terminfo | grep ^aterm $ || ls -1R /usr/share/terminfo | grep ^ansi$ || ls -1R /usr/share/terminfo | grep ^xterm-256color$ || exportar TERM=xterm && emacs -nw"
Esto busca diferentes tipos de terminales compatibles con ANSI (y no compatibles) en orden de preferencia en el host remoto y configura el primero encontrado antes de iniciar EMACS. Configura TERM para que utilice el tipo 'xterm' si no se encuentra ninguno de nuestros tipos preferidos, lo que garantiza que EMACS realmente se inicie.
En este ejemplo, busco eterm-color, aterm, ansi y xterm-256color en ese orden. No soy un gran usuario de EMACS, así que no estoy seguro de que sean realmente los mejores. Probé este lanzamiento en CentOS y funcionó bien (encontré eterm-color en mis pruebas).
Creo que terminfo está en el mismo lugar en la mayoría/todas las variantes de Linux, pero puedes agregar más rutas para buscar de la misma manera que agregarías más terminales, agregando más
|| ls -1R /a/diferente/ruta | grep ^algún otro terminal$prueba condicional y tuberías.
Respuesta2
Dado su problema, recomendaría configurar TERM
vt100. Se instala en todas partes, incluso en ncurses-base
el paquete de Debian. Las alternativas mencionadas en la respuesta sugerida (ansi, aterm, xterm-256color) tienen diferencias que ejercitarán características ausentes en eterm-color
.
Además, la función de cadena de título no forma parte de la descripción del terminal. Sus aplicaciones remotas lo utilizan según la configuración de TERM
, por ejemplo, cualquier cosa que utilice "xterm".
Técnicamente perderías color (después de todo,Los vt100 nunca hicieron color.). Algunas aplicaciones hacen esto de todos modos.