Qual é o valor correto de $TERM para o termo ansi do emacs, especialmente se 'eterm-color' não estiver disponível após o SSH?

Qual é o valor correto de $TERM para o termo ansi do emacs, especialmente se 'eterm-color' não estiver disponível após o SSH?

Atualmente estou configurando $TERMpara xterm-256color:

if [[ -n "$EMACS" ]]; then
    export TERM=xterm-256color
    alias emacs="emacsclient --no-wait"
    export EDITOR="emacsclient --no-wait"
    export VISUAL="emacsclient"
fi

Eu costumava defini-lo como eterm-color, mas o problema é que esse tipo de terminal não está disponível na maioria das máquinas nas quais faço login via SSH.

O padrão .bashrcno Ubuntu verifica se a TERMvariável começa com xterm-, nesse caso tenta definir o título da janela:

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

O problema é o \[\e]0;pouco. Deve ser analisado por emuladores de terminal compatíveis com xterm, mas o emacs (ansi-term) não faz isso. O resultado disso é um terminal como este:

0;user@host: ~user@host:~$ 

Também quebra alguns aplicativos usando readline, quando o texto digitado é maior que a largura do terminal.

Como eterm-colornão está disponível em alguns hosts remotos (e também não consigo instalá-lo), defini-lo com esse valor atrapalha coisas como less.

Existe algum truque que eu possa usar, como outro tipo de terminal que acompanha a maioria das distribuições ou um hack que faz com que o ansi-term reconheçaos códigos de escape relevantese definir o título ou simplesmente descartá-los?

Responder1

Elaborei uma abordagem que permite descobrir especificamente quais terminais estão disponíveis no host remoto e depois configurá-los. Normalmente, existe pelo menos um terminal compatível com Ansi, portanto, um 'hack' para falsificá-lo deve ser desnecessário.

Feito em um comando ssh longo, será parecido com isto:

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$ || export TERM=xterm && emacs -nw"

Isto encontra diferentes tipos de terminais compatíveis com ansi (e não compatíveis) em uma ordem de preferência no host remoto e define o primeiro encontrado antes de iniciar o EMACS. Ele define TERM para usar o tipo 'xterm' se nenhum dos nossos tipos preferidos for encontrado, garantindo que o EMACS seja realmente iniciado.

Neste exemplo, estou procurando eterm-color, aterm, ansi e xterm-256color nessa ordem. Não sou um usuário frequente do EMACS, então não tenho certeza se esses são realmente os melhores. Testei este lançamento no CentOS e funcionou bem (encontrou eterm-color em meus testes).

Acredito que o terminfo está no mesmo lugar na maioria/todas as variantes do Linux, mas você pode adicionar mais caminhos para pesquisar da mesma forma que adicionaria mais terminais, adicionando mais

|| ls -1R /a/diferente/caminho | grep ^ algum outro terminal $
teste condicional e tubos.

Responder2

Dado o seu problema, eu recomendaria definir TERMcomo vt100. Ele está instalado em qualquer lugar, até mesmo no pacote Debian ncurses-base. As alternativas mencionadas na resposta sugerida (ansi, aterm, xterm-256color) possuem diferenças que exercerão recursos ausentes no eterm-color.

Além disso, o recurso de sequência de título não faz parte da descrição do terminal. Seus aplicativos remotos o utilizam com base na configuração de TERM, por exemplo, qualquer coisa que use "xterm".

Tecnicamente você perderia a cor (afinal,vt100 nunca coloriu). Alguns aplicativos fazem isso de qualquer maneira.

informação relacionada