Description du problème
Si j'augmente la largeur d'une fenêtre de Terminal version 2.3 (309), puis que j'utilise la fonction less
(ou une commande invoquant less
comme man
) dans cette fenêtre, j'obtiens souvent une sortie déformée, car les lignes se terminent à 80 caractères alors que la fenêtre est plus large et que less
essaie de formater le texte pour cette fenêtre plus large.
- Il en va de même pour le système OS X 10.8.5 natif.
less
et leless
458 installations de MacPorts. C'est même le cas siless
est invoqué à distance sur un autre hôte à partir d'une session ssh interactive. -
resize
imprime la taille correcte, eteval `resize`
n'aide pas. Ce qui n'est pas surprenant, puisqueless
semble avoir la bonne idée quant à la largeur de la fenêtre, il est juste perturbé par le fait que les lignes s'interrompent trop tôt. - Sortie normale de la ligne de commande (en dehors de
less
) s'étendra sur toute la fenêtre.
Analyse
Il semble qu'il s'agisse d'un bogue dans la façon dont l'application gère la coupe (mode de positionnement du curseur). Le code suivant peut être utilisé pour reproduire le problème :
tput smcup; echo {0..200}; sleep 2; tput rmcup
L'ensemble du problème semble être lié au fait que j'ai configuré le terminal pour définir le mode d'émulation et le mode de fonctionnement de l'ordinateur. TERM
à la variable d'environnement xterm-color
au lieu de l'option par défaut xterm-256color
. Je l'ai fait car ce dernier n'est pas disponible sur plusieurs hôtes auxquels je me connecte par ssh, ce qui fait que les applications sur ces hôtes se plaignent d'une fonctionnalité manquante.
Solutions de contournement
Une façon d'éviter ce problème semble être d'exécuter la commande
tput -T xterm-256color smcup; tput -T xterm-256color rmcup
après chaque changement de taille du terminal. Mais c'est assez ennuyeux. Une autre solution serait de changer l'émulation du terminal en xterm-256color
et de copier les données terminfo sur les hôtes distants qui ne prennent pas en charge cette valeur d'emblée. Ce qui peut être ennuyeux, aussi, si vous voulez seulement jeter un coup d'oeil rapide à un hôte distant.
Question centrale
Dans l'ensemble, il me semble que l'émulation de la xterm-color
n'est pas soutenu aussi bien qu'on pourrait l'espérer. S'agit-il d'un bogue dans Terminal.app, ou ai-je mal compris quelque chose sur la façon dont tout cela est censé fonctionner ?
Quelqu'un a-t-il une solution plus appropriée pour gérer ces incompatibilités ?
Détails techniques
Pour plus d'informations, voici le résultat de infocmp xterm-color xterm-256color
légèrement tronqué en supprimant certaines définitions clés :
comparing xterm-color to xterm-256color.
comparing booleans.
bce: F:T.
ccc: F:T.
mc5i: F:T.
npc: F:T.
comparing numbers.
colors: 8, 256.
ncv: NULL, NULL.
pairs: 64, 32767.
comparing strings.
blink: NULL, '\E[5m'.
cbt: NULL, '\E[Z'.
civis: NULL, '\E[?25l'.
cnorm: NULL, '\E[?12l\E[?25h'.
cvvis: NULL, '\E[?12;25h'.
ech: NULL, '\E[%p1%dX'.
el1: NULL, '\E[1K'.
enacs: '\E)0', NULL.
flash: NULL, '\E[?5h$<100/>\E[?5l'.
hpa: NULL, '\E[%i%p1%dG'.
ich: NULL, '\E[%p1%d@'.
indn: NULL, '\E[%p1%dS'.
initc: NULL, '\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\'.
invis: NULL, '\E[8m'.
is2: '\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8', '\E[!p\E[?3;4l\E[4l\E>'.
kDC: NULL, '\E[3;2~'.
kEND: NULL, '\E[1;2F'.
kHOM: NULL, '\E[1;2H'.
[ ]
kri: NULL, '\E[1;2A'.
kslt: '\E[4~', NULL.
mc0: NULL, '\E[i'.
mc4: NULL, '\E[4i'.
mc5: NULL, '\E[5i'.
op: '\E[m', '\E[39;49m'.
rin: NULL, '\E[%p1%dT'.
rmacs: '^O', '\E(B'.
rmam: NULL, '\E[?7l'.
rmcup: '\E[2J\E[?47l\E8', '\E[?1049l'.
rmm: NULL, '\E[?1034l'.
rmso: '\E[m', '\E[27m'.
rmul: '\E[m', '\E[24m'.
rs1: NULL, '\Ec'.
rs2: '\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8', '\E[!p\E[?3;4l\E[4l\E>'.
setab: '\E[4%p1%dm', '\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m'.
setaf: '\E[3%p1%dm', '\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m'.
sgr: NULL, '%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m'.
sgr0: '\E[m', '\E(B\E[m'.
smacs: '^N', '\E(0'.
smam: NULL, '\E[?7h'.
smcup: '\E7\E[?47h', '\E[?1049h'.
smm: NULL, '\E[?1034h'.
vpa: NULL, '\E[%i%p1%dd'.