2 votes

Le terminal s'enroule à 80 caractères même si la fenêtre est plus large

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 le less 458 installations de MacPorts. C'est même le cas si less est invoqué à distance sur un autre hôte à partir d'une session ssh interactive.
  • resize imprime la taille correcte, et eval `resize` n'aide pas. Ce qui n'est pas surprenant, puisque less 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'.

1voto

Chris Page Points 7394

xterm-color représente une ancienne branche de Xterm qui ne reflète pas fidèlement un certain nombre de fonctionnalités importantes prises en charge par Terminal (et Xterm).

Dans les anciennes versions du terminal, la valeur par défaut de l'option TERM variable d'environnement était xterm-color parce qu'il était plus compatible avec Terminal, mais ce n'est plus le cas depuis plusieurs versions d'OS X. La valeur par défaut actuelle est xterm-256color .

Si vous vous connectez à un hôte distant qui n'inclut pas l'option xterm-256color premier essai xterm-16color et ensuite xterm et voir si elles sont disponibles. Ils sont essentiellement les mêmes sauf qu'ils déclarent un nombre différent de couleurs supportées. Ils représentent l'actuel Xterm, et sont beaucoup plus compatibles avec Terminal que xterm-color .

Voir ma réponse https://apple.stackexchange.com/a/79016/6883 pour plus de détails.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X