Quando você usa as opções -d -m
, screen
inicia no modo desanexado e, nesse caso, não tenta melhorar sua descrição do terminal com base na sua variável TERM
atual. Ele procura apenas a variável TERM
quando ela é iniciada normalmente (não desanexada). Quando você anexa à sessão que foi iniciada desanexada, é tarde demais para fazer essa inicialização com base em TERM
.
A seção 16.1 Escolhendo a entrada termcap para uma janela no manual descreve algumas das correções que faz.
O que você viu para o caso que não funciona é assim:
TERMCAP=SC|screen|VT 100/ANSI X3.64 virtual terminal:\ :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:bs:bt=\E[Z:\ :cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:ct=\E[3g:\ :do=^J:nd=\E[C:pt:rc=\E8:rs=\Ec:sc=\E7:st=\EH:up=\EM:\ :le=^H:bl=^G:cr=^M:it#8:ho=\E[H:nw=\EE:ta=^I:is=\E)0:\ :li#24:co#80:am:xn:xv:LP:sr=\EM:al=\E[L:AL=\E[%dL:\ :cs=\E[%i%d;%dr:dl=\E[M:DL=\E[%dM:dc=\E[P:DC=\E[%dP:\ :im=\E[4h:ei=\E[4l:mi:IC=\E[%d@:ks=\E[?1h\E=:\ :ke=\E[?1l\E>:vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l:\ :ti=\E[?1049h:te=\E[?1049l:k0=\E[10~:k1=\EOP:k2=\EOQ:\ :k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:\ :k8=\E[19~:k9=\E[20~:k;=\E[21~:F1=\E[23~:F2=\E[24~:\ :kh=\E[1~:@1=\E[1~:kH=\E[4~:@7=\E[4~:kN=\E[6~:kP=\E[5~:\ :kI=\E[2~:kD=\E[3~:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:
enquanto o bom se parece com isso:
TERMCAP=SC|screen|VT 100/ANSI X3.64 virtual terminal:\ :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:bs:bt=\E[Z:\ :cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:ct=\E[3g:\ :do=^J:nd=\E[C:pt:rc=\E8:rs=\Ec:sc=\E7:st=\EH:up=\EM:\ :le=^H:bl=^G:cr=^M:it#8:ho=\E[H:nw=\EE:ta=^I:is=\E)0:\ :li#25:co#80:am:xn:xv:LP:sr=\EM:al=\E[L:AL=\E[%dL:\ :cs=\E[%i%d;%dr:dl=\E[M:DL=\E[%dM:dc=\E[P:DC=\E[%dP:\ :im=\E[4h:ei=\E[4l:mi:IC=\E[%d@:ks=\E[?1h\E=:\ :ke=\E[?1l\E>:vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l:\ :ti=\E[?1049h:te=\E[?1049l:us=\E[4m:ue=\E[24m:so=\E[3m:\ :se=\E[23m:md=\E[1m:mr=\E[7m:me=\E[m:ms:\ :Co#8:pa#64:AF=\E[3%dm:AB=\E[4%dm:op=\E[39;49m:AX:G0:\ :as=\E(0:ae=\E(B:\ :ac=00aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++,,hhII00:\ :k0=\E[10~:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:\ :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:\ :F1=\E[23~:F2=\E[24~:kb=^H:K2=\EOE:kB=\E[Z:kh=\E[1~:\ :@1=\E[1~:kH=\E[4~:@7=\E[4~:kN=\E[6~:kP=\E[5~:kI=\E[2~:\ :kD=\E[3~:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:km:
No caso positivo, screen
notou que TERM
foi definido como xterm
e adicionou recursos a partir dessa descrição.
Você notará este problema com o FreeBSD porque o termcap distribuído com screen
não tem cor, quando você limita a descrição ao limite de 1023 bytes assumido pelos aplicativos termcap (as configurações extras são descartadas). Em outras plataformas, você provavelmente estaria usando a descrição fornecida por ncurses, que faz dizer como usar cores. A diferença não é devida à biblioteca usada; Embora screen
seja um aplicativo termcap , ele usa ncurses no FreeBSD:
$ ldd 'which screen'
/usr/local/bin/screen:
libncurses.so.8 => /lib/libncurses.so.8 (0x80086a000)
libelf.so.1 => /usr/lib/libelf.so.1 (0x800ab6000)
libutil.so.9 => /lib/libutil.so.9 (0x800ccb000)
libulog.so.0 => /lib/libulog.so.0 (0x800edd000)
libcrypt.so.5 => /lib/libcrypt.so.5 (0x8010df000)
libc.so.7 => /lib/libc.so.7 (0x8012ff000)
libmd.so.6 => /lib/libmd.so.6 (0x801698000)
Em vez disso, a diferença é devida a
- O FreeBSD constrói ncurses usando o banco de dados termcap em vez de terminfo (você pode obter o banco de dados terminfo usando uma porta) e
- O FreeBSD tem um arquivo termcap, que não corresponde a outros bancos de dados do terminal. Enquanto algumas correções foram feitas, ainda tem peculiaridades como VT100s com cor , e modificações para fazer as diferenças entre seu console com
TERM=xterm
e um xterm real menos aparente (exceto para pessoas que usam o xterm, é claro).
Um pouco irônico, pode-se notar que screen
define TERMCAP
para um formato de várias linhas. Isso foi usado em 4.2BSD e 4.3BSD, mas tornou obsoleto em 4.4BSD (cerca de 25 anos atrás), com a mudança para o uso de bancos de dados com hash e ao mesmo tempo descartando o espaço em branco (que contava com o limite de 1023 bytes no tamanho do termcap) . Desde que o FreeBSD mudou para o ncurses nos anos 90 , esse formato está mais desatualizado, com poucos aplicativos contando na variável TERMCAP
. Mas ls
é um desses.
screen
tem uma opção -T
que deve ajudar com isso especificando uma entrada termcap específica (que tem cor), mas ao testá-la, aparece que não pode resolver o problema. / p>
Leitura adicional: