Quando você executa um programa em screen
, o programa screen
pode (e vai) fazer isso:
-
screen
tem sua própria descrição de terminal. Ele tenta mapear (converter) as seqüências-chave do terminal subjacente para isso. - A conversão não está completa. Como solução alternativa,
screen
procura descrições de terminal personalizadas iniciando comscreen.$TERM
. ncurses fornece alguns úteis. -
screen
filtra (ignora) algumas sequências chave que não se encaixam em sua noção de como a entrada deve ser feita.
Provavelmente, o seu problema está no primeiro caso. Se você fizer
infocmp xterm screen
(presumindo que você esteja usando o valor mais frequentemente sugerido para TERM
, se você está usando xterm
), você pode notar algumas linhas como esta:
kend: '\E[4~', '\EOF'.
khome: '\E[1~', '\EOH'.
A última coluna é a sequência ( \E
é o caractere escape ) que screen
enviará ao seu programa quando receber a coluna do meio de xterm
, etc.
O problema com o .screenrc
é que substitui o $TERM
valor para xterm
, confundindo screen
:
term xterm
Você poderia supor que a conversão seria completa, mas o teste mostra que não é. Esse tipo de problema é porque ncurses fornece entradas customizadas. Por exemplo, esta entrada do banco de dados ncurses é a que entra em vigor no meu máquina, dado que .screenrc
configuração (porque "xterm" é aliased para "xterm-new"):
screen.xterm-xfree86|screen.xterm-new|screen customized for modern xterm,
bce@, bw,
invis@, kIC@, kNXT@, kPRV@, meml@, memu@,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;m,
E3@, use=screen+italics, use=screen+fkeys, use=xterm-new,
você pode notar o use=screen+fkeys
. Isso significa: vá em frente e use as chaves que screen
usará, pois é a solução mais simples. Agora há um problema sutil: screen+fkeys
se parece com isso:
screen+fkeys|function-keys according to screen,
kend=\E[4~, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kfnd@,
khome=\E[1~, kslt@,
porque (na tela de teste), ele enviou essas chaves em vez do que estava na descrição externa do terminal $TERM
. O $TERM
interno está definido como xterm
, mas screen
usa essa entrada intermediária quando transmite chaves especiais como home / end para sua sessão.