OVH Cloud OVH Cloud

pb de stty et echok

8 réponses
Avatar
Vincent Lefevre
Bonjour,

J'aimerais savoir le fonctionnement des terminaux concernant echok.
Sous Mac OS X avec le terminal iTerm, "stty -a" me dit -echok. Un
Ctrl-U en mode cooked (e.g. taper "cat" dans un shell) efface bien
la ligne courante.

Quand je me connecte sur mon Zaurus (PDA sous Linux) avec ssh, un
"stty -a" me dit maintenant echok (ça a changé!). Et un Ctrl-U
provoque toujours l'effacement de la ligne.

Maintenant quand je me connecte sur une machine sous Debian par ssh,
"stty -a" me dit -echok me dit -echok et cette fois, un Ctrl-U ne
provoque plus l'effacement de la ligne dans le terminal! (Elle est
bien effacée de l'entrée standard, comme prévu, car kill = ^U.)

Qui a raison concernant l'effacement de la ligne dans le terminal
(i.e. ce qui est affiché)?

Note: je peux toujours faire un "stty echok" pour régler le problème,
mais est-ce qu'il n'aurait pas dû être réglé automatiquement?
Comment?

Merci d'avance pour tout information.

--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

8 réponses

Avatar
Nicolas George
Vincent Lefevre wrote in message
<20060312105617$:
J'aimerais savoir le fonctionnement des terminaux concernant echok.
Sous Mac OS X avec le terminal iTerm, "stty -a" me dit -echok. Un
Ctrl-U en mode cooked (e.g. taper "cat" dans un shell) efface bien
la ligne courante.

Quand je me connecte sur mon Zaurus (PDA sous Linux) avec ssh, un
"stty -a" me dit maintenant echok (ça a changé!). Et un Ctrl-U
provoque toujours l'effacement de la ligne.

Maintenant quand je me connecte sur une machine sous Debian par ssh,
"stty -a" me dit -echok me dit -echok et cette fois, un Ctrl-U ne
provoque plus l'effacement de la ligne dans le terminal! (Elle est
bien effacée de l'entrée standard, comme prévu, car kill = ^U.)

Qui a raison concernant l'effacement de la ligne dans le terminal
(i.e. ce qui est affiché)?


Ça dépend des autres modes, en particulier tous ceux qui s'appellent
echoquelquechose. Que sont-ils sur les différentes machines ?

Avatar
Vincent Lefevre
Dans l'article <dv13bb$1eml$,
Nicolas George <nicolas$ écrit:

Ça dépend des autres modes, en particulier tous ceux qui s'appellent
echoquelquechose. Que sont-ils sur les différentes machines ?


Sous Mac OS X:

prunille:~> stty -a | grep echo
isig icanon iexten echo echoe -echok -echonl -noflsh -tostop -echoprt echoctl
echoke

Sur Zaurus (Linux 2.4.18), même terminal via connexion ssh:

zaurus:~> stty -a | grep echo
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

Sur ces deux machines, le Ctrl-U en mode cooked fonctionne bien.
Mais pas sous divers GNU/Linux 2.4.x et 2.6.x, même terminal via
connexion ssh:

ay:~> stty -a | grep echo
isig icanon iexten echo echoe -echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
ay:~> cat
abc^Udef
def
ay:~>

(Après le cat: abc[Ctrl-U]def[Return][Ctrl-D])

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

Avatar
Nicolas George
Vincent Lefevre wrote in message
<20060312130015$:
prunille:~> stty -a | grep echo
isig icanon iexten echo echoe -echok -echonl -noflsh -tostop -echoprt echoctl
echoke

ay:~> stty -a | grep echo
isig icanon iexten echo echoe -echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke


Je vois, ces deux là ont vraiment des modes similaires. Comment le macos se
comporte-t-il avec stty echok ?

Avatar
Vincent Lefevre
Dans l'article <dv18tt$1ghp$,
Nicolas George <nicolas$ écrit:

Je vois, ces deux là ont vraiment des modes similaires. Comment le
macos se comporte-t-il avec stty echok ?


Normalement. Une idée du pourquoi je n'ai pas du echok par défaut?

Avec xterm sous Mac OS X, j'ai bien du echok. Mais avec Terminal
(terminal fourni avec Mac OS X) et iTerm, j'ai du -echok. Et j'ai
exactement le même problème avec Terminal qu'avec iTerm après une
connexion ssh vers une machine Linux.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

Avatar
Jean-Louis Liagre
Nicolas George wrote:
Vincent Lefevre wrote in message
<20060312130015$:
prunille:~> stty -a | grep echo
isig icanon iexten echo echoe -echok -echonl -noflsh -tostop -echoprt echoctl
echoke

ay:~> stty -a | grep echo
isig icanon iexten echo echoe -echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke


Je vois, ces deux là ont vraiment des modes similaires. Comment le macos se
comporte-t-il avec stty echok ?


Il me semble que c'est echoke qui provoque l'effacement de la ligne, pas echok
qui lui entraine un saut de ligne, cela dit les deux config sont là aussi
identiques ...


Avatar
Vincent Lefevre
Dans l'article <441435d0$0$8491$,
Jean-Louis Liagre écrit:

Nicolas George wrote:
Je vois, ces deux là ont vraiment des modes similaires. Comment le
macos se comporte-t-il avec stty echok ?


Il me semble que c'est echoke qui provoque l'effacement de la ligne,
pas echok qui lui entraine un saut de ligne, cela dit les deux
config sont là aussi identiques ...


Oui, ceci dit, un man stty indique:

[-]echok
echo a newline after a kill character

* [-]echoke
same as [-]crtkill

et

* crtkill
kill all line by obeying the echoprt and echoe settings

* -crtkill
kill all line by obeying the echoctl and echok settings

Mais comme j'ai echoke (et non -echoke), c'est la config d'echoe qui
intervient et pas celle d'echok. Il est donc bizarre que modifier la
config d'echok (sous Linux) modifie le comportement du Ctrl-U.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA


Avatar
Jean-Louis Liagre
Vincent Lefevre wrote:
Dans l'article <441435d0$0$8491$,
Jean-Louis Liagre écrit:

Nicolas George wrote:
Je vois, ces deux là ont vraiment des modes similaires. Comment le
macos se comporte-t-il avec stty echok ?


Il me semble que c'est echoke qui provoque l'effacement de la ligne,
pas echok qui lui entraine un saut de ligne, cela dit les deux
config sont là aussi identiques ...


Oui, ceci dit, un man stty indique:

[-]echok
echo a newline after a kill character

* [-]echoke
same as [-]crtkill

et

* crtkill
kill all line by obeying the echoprt and echoe settings

* -crtkill
kill all line by obeying the echoctl and echok settings

Mais comme j'ai echoke (et non -echoke), c'est la config d'echoe qui
intervient et pas celle d'echok. Il est donc bizarre que modifier la
config d'echok (sous Linux) modifie le comportement du Ctrl-U.


Il faudrait comparer le "man termios" sous Linux et MacOS X pour voir si
ces options sont supportées de la même façon.

echoke, echoprt et crtkill ne sont pas POSIX.



Avatar
Vincent Lefevre
Dans l'article <44145276$0$8469$,
Jean-Louis Liagre écrit:

Il faudrait comparer le "man termios" sous Linux et MacOS X pour
voir si ces options sont supportées de la même façon.

echoke, echoprt et crtkill ne sont pas POSIX.


Sous Linux:

ECHO Echo input characters.

ECHOE If ICANON is also set, the ERASE character erases the preceding
input character, and WERASE erases the preceding word.

ECHOK If ICANON is also set, the KILL character erases the current
line.

ECHONL If ICANON is also set, echo the NL character even if ECHO is
not set.

ECHOCTL
(not in POSIX) If ECHO is also set, ASCII control signals other
than TAB, NL, START, and STOP are echoed as ^X, where X is the
character with ASCII code 0x40 greater than the control signal.
For example, character 0x08 (BS) is echoed as ^H.

ECHOPRT
(not in POSIX) If ICANON and IECHO are also set, characters are
printed as they are being erased.

ECHOKE (not in POSIX) If ICANON is also set, KILL is echoed by erasing
each character on the line, as specified by ECHOE and ECHOPRT.

Sous Mac OS X:

ECHOKE /* visual erase for line kill */
ECHOE /* visually erase chars */
ECHO /* enable echoing */
ECHONL /* echo NL even if ECHO is off */
ECHOPRT /* visual erase mode for hardcopy */
ECHOCTL /* echo control chars as ^(Char) */

If ECHO is set, input characters are echoed back to the terminal. If
ECHO is not set, input characters are not echoed.

If ECHOE and ICANON are set, the ERASE character causes the terminal
to erase the last character in the current line from the display, if
possible. If there is no character to erase, an implementation may
echo an indication that this was the case or do nothing.

If ECHOK and ICANON are set, the KILL character causes the current
line to be discarded and the system echoes the 'n' character after
the KILL character.

If ECHOKE and ICANON are set, the KILL character causes the current
line to be discarded and the system causes the terminal to erase the
line from the display.

If ECHOPRT and ICANON are set, the system assumes that the display
is a printing device and prints a backslash and the erased
characters when processing ERASE characters, followed by a forward
slash.

If ECHOCTL is set, the system echoes control characters in a visible
fashion using a caret followed by the control character.

If ECHONL and ICANON are set, the 'n' character echoes even if ECHO
is not set.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA