Passando seqüências de escape para shells dentro de ansi-termo no Emacs

2

Em um terminal comum (por exemplo, iTerm2 no OS X), posso conectar-me a um banco de dados, por exemplo

> psql ....

e depois, enquanto digito meu comando em psql , por exemplo

$ select foo from bar

Eu posso me mover (conforme digito comandos do psql) usando o padrão Alt+b e Alt+f .

No entanto, se eu tentar fazer isso em um shell dentro do Emacs ( ansi-term ), ele não funciona.

Mais especificamente, se eu iniciar um shell (por exemplo, Bash) dentro de ansi-term , as combinações de teclas Alt+b e Alt+f funcionarão bem no shell Unix (nesse caso, Bash), MAS se eu cair em psql de dentro do shell, as combinações de teclas Alt+b nor Alt+f param de funcionar (as teclas não movem o cursor, e eu não consigo mais continuar digitando os comandos corretamente)

Por que isso? E como pode consertar esse comportamento?

Atualização 1:

Eu limitei o problema e a linha no meu .zshrc que causa esse comportamento é a seguinte:

TERM=xterm-256color

Eu tenho essa linha porque é a melhor solução que encontrei para corrigir o problema que reporto neste segmento: O multi-termo do Emacs não exibe caracteres especiais corretamente

Atualização 2 (solução, mas por quê?):

Encontrei a solução neste tópico: Caractere estranho zsh no terminal emacs . Como a resposta principal diz, eu tive que criar eterm-color terminfo usando o seguinte comando: (note que o caminho terminfo pode ser diferente do seu sistema)

# If you use Cocoa Emacs or Carbon Emacs
tic -o ~/.terminfo /Applications/Emacs.app/Contents/Resources/etc/e/eterm-color.ti
    
por Amelio Vazquez-Reina 29.01.2014 / 22:40

1 resposta

1

De acordo com o wiki do Emacs, a configuração recomendada de TERM para ansi-term é "eterm-color" . Essa descrição do terminal é fornecida por ncurses; você provavelmente teria que usar o pacote com o banco de dados terminfo completo para plataformas que fazem distinção, por exemplo, Debian com ncurses-base e ncurses-term .

A descrição eterm-color fornece 16 cores, que ainda parecem ser o estado atual do código Emacs. Além disso, a descrição de xterm-256color inclui as seqüências de escape que o Emacs não deve manipular corretamente. Usando infocmp , existem vários recursos que diferem e podem produzir um problema no (a) movimento do cursor e (b) na rolagem. Aqui estão as linhas interessantes:

    ech: NULL, '\E[%p1%dX'.
    flash: NULL, '\E[?5h$<100/>\E[?5l'.
    hpa: NULL, '\E[%i%p1%dG'.
    hts: NULL, '\EH'.
    indn: NULL, '\E[%p1%dS'
    rin: NULL, '\E[%p1%dT'.
    rmam: NULL, '\E[?7l'.
    rmcup: NULL, '\E[?1049l'.
    rmkx: NULL, '\E[?1l\E>'.
    rmm: NULL, '\E[?1034l'
    sitm: NULL, '\E[3m'.
    smacs: NULL, '\E(0'.
    smam: NULL, '\E[?7h'.
    smcup: NULL, '\E[?1049h'.
    smkx: NULL, '\E[?1h\E='.
    smm: NULL, '\E[?1034h'.
    tbc: NULL, '\E[3g'.
    vpa: NULL, '\E[%i%p1%dd'.

Por exemplo:

  • hpa , por exemplo, funciona no xterm para mover o cursor horizontalmente.
  • smm e rmm meta de controle (que é relevante para a menção de chaves "alt": veja a descrição de meta em terminfo (5) ).
  • indn e rin são usados para rolagem vertical

Quando os recursos do terminal e a descrição do terminal não estão de acordo, você pode ver coisas estranhas acontecendo. Em um teste rápido do Emacs 24.5, o ansi-term implementa nenhum desses recursos; todos provavelmente serão usados por programas em tela cheia, e alguns (como hpa ) seriam usados por programas de linha de comando.

Leitura adicional:

por 21.04.2016 / 22:56