OVH Cloud OVH Cloud

terminaux et lignes trop longues

11 réponses
Avatar
cedric
Bonjour.

Bon, j'ai depuis toujours un problème énervant que j'aimerais
résoudre. Je ne suis d'ailleurs pas le seul à être gené.

Le problème, c'est que lorsqu'on manipule des lignes de commandes
longues en shell (par manipuler, entendre, par exemple, revenir en
arrière et effacer un caractère), en particulier si on se trouve sur la
dernière ligne visible, il arrive souvent que le terminal affiche la
ligne de commande n'importe comment, avec l'une ou plusieurs des erreurs
suivantes :

- affiche une ligne qu'avec des epsaces
- affiche plusieurs lignes l'une sur l'autre
- décale le début de la ligne d'une dizaine de caractères vers la droite
- affiche le curseur à la mauvaise position du texte

Bref, tout ceux qui souffrent ca auront devinés de quoi je parle.

Insistons sur le fait que ca le fait pas en mode console sous freeBSD
(TERM=cons25). Mais dès que je lance screen par dessus, ca le fait
(indépendament du mode line-wrap de screen).

Je me doute que ca doit d'avantage être un pénible héritage de nos
ancêtres les gaulois et leur VT100, plutôt qu'un bête bug, mais
j'aimerai savoir, docteur, qu'est-ce que je peut faire ?

10 réponses

1 2
Avatar
Stephane Chazelas
2004-09-14, 09:48(+02), cedric:
[...]
Insistons sur le fait que ca le fait pas en mode console sous freeBSD
(TERM=cons25). Mais dès que je lance screen par dessus, ca le fait
(indépendament du mode line-wrap de screen).

Je me doute que ca doit d'avantage être un pénible héritage de nos
ancêtres les gaulois et leur VT100, plutôt qu'un bête bug, mais
j'aimerai savoir, docteur, qu'est-ce que je peut faire ?


Il ne devrait pas y avoir de probleme avec screen et des shells
corrects.

Est-ce que la variable TERM est bien positionnee (devrait etre
"screen" ou "screen-quelquechose") ? Est-ce que les entrees
termcap ou terminfo existent pour $TERM et sont assez recentes ?
Est-ce que les applications sont conscientes de la vrai taille
du terminal (que contiennent $COLUMNS, que dit "stty -a") ?

Quel est le symptome exactement ?

--
Stephane

Avatar
Laurent Wacrenier
cedric écrit:
Le problème, c'est que lorsqu'on manipule des lignes de commandes
longues en shell (par manipuler, entendre, par exemple, revenir en
arrière et effacer un caractère), en particulier si on se trouve sur la
dernière ligne visible, il arrive souvent que le terminal affiche la
ligne de commande n'importe comment, avec l'une ou plusieurs des erreurs
suivantes :

- affiche une ligne qu'avec des epsaces
- affiche plusieurs lignes l'une sur l'autre
- décale le début de la ligne d'une dizaine de caractères vers la droite
- affiche le curseur à la mauvaise position du texte

Bref, tout ceux qui souffrent ca auront devinés de quoi je parle.


Je pense que ça vient du shell ou de son prompt.

Avatar
[Sauron De Mordor]
cedric wrote:
Bonjour.

Bon, j'ai depuis toujours un problème énervant que j'aimerais
résoudre. Je ne suis d'ailleurs pas le seul à être gené.

Le problème, c'est que lorsqu'on manipule des lignes de commandes
longues en shell (par manipuler, entendre, par exemple, revenir en
arrière et effacer un caractère), en particulier si on se trouve sur la
dernière ligne visible, il arrive souvent que le terminal affiche la
ligne de commande n'importe comment, avec l'une ou plusieurs des erreurs
suivantes :

- affiche une ligne qu'avec des epsaces
- affiche plusieurs lignes l'une sur l'autre
- décale le début de la ligne d'une dizaine de caractères vers la droite
- affiche le curseur à la mauvaise position du texte

Bref, tout ceux qui souffrent ca auront devinés de quoi je parle.

Insistons sur le fait que ca le fait pas en mode console sous freeBSD
(TERM=cons25). Mais dès que je lance screen par dessus, ca le fait
(indépendament du mode line-wrap de screen).

Je me doute que ca doit d'avantage être un pénible héritage de nos
ancêtres les gaulois et leur VT100, plutôt qu'un bête bug, mais
j'aimerai savoir, docteur, qu'est-ce que je peut faire ?



je sais pas pourquoi, mais on dirait que tu parle de bash la ? non?

j utilise ksh et il n y a pas ce genre de pb.

et je pense que c est effectivement un bug.

Avatar
cedric
Stephane Chazelas wrote:
Est-ce que la variable TERM est bien positionnee (devrait etre
"screen" ou "screen-quelquechose") ?


Elle vaut "screen".

Est-ce que les entrees
termcap ou terminfo existent pour $TERM et sont assez recentes ?


Elle existe, et date du 22 mars (debian sarge).

Est-ce que les applications sont conscientes de la vrai taille
du terminal (que contiennent $COLUMNS, que dit "stty -a") ?


Oui bien sur :

speed 38400 baud; rows 60; columns 165; line = 0;
intr = ^C; quit = ^; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase =
^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon
-ixoff -iuclc -ixany -imaxbel
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0
vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop
-echoprt echoctl echoke


Ce qui correspond à la réalité (sauf pour speed baud :-))


Quel est le symptome exactement ?


Je vais à la derniere ligne de la fenetre, je tappe une ligne de
commande super longue, et je reviens en arrière avec le curseur sur une
15aine de caractères, et je fait "delete" -> dans 99% des cas, il va
afficher n'importe nawak (comme je le disais, soit rien, soit tout sur
une ligne, etc...)

Avatar
cedric
Laurent Wacrenier wrote:
Je pense que ça vient du shell ou de son prompt.


J'ai longtemps cru ca, d'autant que j'utilise un peut de séquences ansi
dans le prompt, mais en fait ca me le fait meme sans ansi dans le
prompt, sous zsh comme sous bash...

Avatar
cedric
[Sauron De Mordor] wrote:
je sais pas pourquoi, mais on dirait que tu parle de bash la ? non?


zsh actuellement, mais bash faisait pareil.

j utilise ksh et il n y a pas ce genre de pb.


tiens je vais essayer de suite :

Oui bien sur ca marche, mais aussi il affiche tout sur une ligne
(scrolling horizontal), donc évidement...

y'a pas un mode similaire avec zsh ?

Avatar
cedric
Laurent Wacrenier wrote:
Je pense que ça vient du shell ou de son prompt.


Bonne pioche !

Correction de ma réponse de tout à l'heure : en fait, avec zsh, si je
vire les codes ANSI du prompt alors ca marche !

Bon, comment faire alors, avec zsh, pour que le prompt contiennent des
séquences ansi ? Un shell capable de tant de prouesses doit bien pouvoir
comprendre la taille correcte en caractère d'une séquence ansi, non ?

Avatar
Laurent Wacrenier
cedric écrit:
Bon, comment faire alors, avec zsh, pour que le prompt contiennent des
séquences ansi ?


Mettre les chaînes de largeur nulle sur l'écran entre %{ et %} dans
$PS1 et consort.

Un shell capable de tant de prouesses doit bien pouvoir
comprendre la taille correcte en caractère d'une séquence ansi, non ?


Il n'y a pas de raison. Tous les terminaux ne sont pas ISO 6429 (ANSI
X3.64)

Avatar
cedric
Laurent Wacrenier wrote:
Mettre les chaînes de largeur nulle sur l'écran entre %{ et %} dans
$PS1 et consort.


C'était fait, mais en fait je me trompais dans ma séquence ANSI :

Dans la séquence

ESC[Ps;...;Psm

Je ne mettais qu'un seul Ps (la couleur, ne touchant pas aux attributs
de texte (bold, etc). Bref, apparement il ne faut pas. J'ai donc changé
mes :

ESC[31m par des ESC[0;31m

Et là ca marche.

Allez comprendre...

Avatar
Stephane Chazelas
2004-09-14, 19:29(+02), cedric:
[...]
Je ne mettais qu'un seul Ps (la couleur, ne touchant pas aux attributs
de texte (bold, etc). Bref, apparement il ne faut pas. J'ai donc changé
mes :

ESC[31m par des ESC[0;31m

Et là ca marche.
[...]


Avec zsh, tu n'as pas besoin de hard coder les sequences
d'echappement.

Voir

info -f zsh --index-search=colors

Voir aussi:

info -f zsh -n 'Prompt Themes'

--
Stephane

1 2