OVH Cloud OVH Cloud

terminal et OS X

25 réponses
Avatar
DINH Viêt Hoà
Bonjour,

J'ai un comportement très bizarre du terminal sur Mac OS X.

Je m'explique :

Dans un shell bash (que ce soit xterm X11 ou Terminal.app),
lorsque je tape Ctrl-V, End

j'obtiens la séquence : ^[[F

Sous linux, j'obtiens plutôt la séquence : ^[[4~

Y-a-t-il un explication à cette différence ?

De plus, lorsque je me connecte depuis un shell Mac OS X à un linux,
j'obtiens la séquence ^[[4~, soit la séquence obtenue sous Linux.

Quelqu'un a-t-il une explication logique à tout cela ?

--
DINH V. Hoa,

"Il y a anguille sous roche"

10 réponses

1 2 3
Avatar
Stephane Chazelas
2004-12-6, 09:13(+01), DINH Viêt Hoà:
[...]
Dans un shell bash (que ce soit xterm X11 ou Terminal.app),
lorsque je tape Ctrl-V, End

j'obtiens la séquence : ^[[F

Sous linux, j'obtiens plutôt la séquence : ^[[4~

Y-a-t-il un explication à cette différence ?


Oui. Tous les terminaux sont differents car ont des histoires
differentes.

xterm peut etre compilé avec des variantes differentes. Par
exemple, si tu le compiles avec --enable-sco-fkeys, tu auras
^[[F (et tu devras utiliser xterm-sco pour $TERM pour que les
applications sachent que ^[[F veut dire End).

De plus, lorsque je me connecte depuis un shell Mac OS X à un linux,
j'obtiens la séquence ^[[4~, soit la séquence obtenue sous Linux.


Ca, c'est plus surprenant. Par quel moyen te connectes-tu? Je
sais que telnet a le moyen de faire des traductions de touches
a la volee mais que dans un mode particulier et pas sur des
touches comme End.

Peut-etre que le telnet sur MacOSX fait la conversion vers un
mode plus /portable/ (ou passe le terminal dans un mode plus
portable) pour eviter les problemes d'interoperabilité.

Et quand tu fais un telnet/ssh/rlogin vers un autre OS X,
qu'est-ce que tu obtiens?

--
Stephane

Avatar
Charles Plessy
Stephane Chazelas wrote:
2004-12-6, 09:13(+01), DINH Viêt Hoà:
[...]

Dans un shell bash (que ce soit xterm X11 ou Terminal.app),
lorsque je tape Ctrl-V, End

j'obtiens la séquence : ^[[F

Sous linux, j'obtiens plutôt la séquence : ^[[4~

Y-a-t-il un explication à cette différence ?



Oui. Tous les terminaux sont differents car ont des histoires
differentes.



... et je conseille vivement http://iterm.sourceforge.net/ , qui permet
choisir la valeur que tu désires.

--
Charles


Avatar
DINH Viêt Hoà

Bonjour,

je n'osais pas m'adresser à toi directement via le newsgroup :)

Oui. Tous les terminaux sont differents car ont des histoires
differentes.

xterm peut etre compilé avec des variantes differentes. Par
exemple, si tu le compiles avec --enable-sco-fkeys, tu auras
^[[F (et tu devras utiliser xterm-sco pour $TERM pour que les
applications sachent que ^[[F veut dire End).


hum ... là, par défaut, c'est plutôt "xterm-color" par défaut et pour
xterm, c'est "xterm".

De plus, lorsque je me connecte depuis un shell Mac OS X à un linux,
j'obtiens la séquence ^[[4~, soit la séquence obtenue sous Linux.


Ca, c'est plus surprenant.


Effectivement, je racontai n'importe quoi.

Par quel moyen te connectes-tu? Je
sais que telnet a le moyen de faire des traductions de touches
a la volee mais que dans un mode particulier et pas sur des
touches comme End.


Je me connecte en utilisant ssh.
Hum ... je viens de vérifier et en fait, c'est lorsque j'utilise screen
que les problèmes surviennent.

récapitulons :

combinaison TERM séquence
xterm X11 xterm ESC [ F
xterm X11 + screen screen ESC OH (lettre O)
Terminal.app xterm-color ESC [ F
Terminal.app + screen screen ESC [ F

xterm X11 + ssh linux xterm ESC [ F
xterm X11 + ssh linux + screen(bce) screen-bce ESC [ 4~
Terminal.app + ssh linux xterm-color ESC [ F
Terminal.app + ssh linux + screen(bce) screen-bce ESC [ F

Manque-t-il un travail du côté du terminal Mac OS X ?

--
DINH V. Hoa,

"Il y a anguille sous roche"


Avatar
Stephane Chazelas
2004-12-6, 13:07(+01), DINH Viêt Hoà:
[...]
récapitulons :

combinaison TERM séquence
xterm X11 xterm ESC [ F
xterm X11 + screen screen ESC OH (lettre O)
Terminal.app xterm-color ESC [ F
Terminal.app + screen screen ESC [ F

xterm X11 + ssh linux xterm ESC [ F



xterm X11 + ssh linux + screen(bce) screen-bce ESC [ 4~
Terminal.app + ssh linux xterm-color ESC [ F
Terminal.app + ssh linux + screen(bce) screen-bce ESC [ F

Manque-t-il un travail du côté du terminal Mac OS X ?


Le probleme vient du fait que "xterm-color" correspondent a deux
choses differentes sur OSX et Linux.

Si tu fait un infocmp sur xterm, xterm-color, screen, screen-bce, tu
devrais obtenir sur Linux pour kend:

EOF E[4~ E[4~ E[4~

(EOF, c'est l'equivalent en mode keypad de E[F)

Alors que sous MacOSX, tu as peut-etre:

EOF EOF EOF EOF

Quand, sur Linux, tu lances screen en lui disant que le terminal
est "xterm-color", il va voir dans la base terminfo que kend
correspond a E[4~. Lui, il pretend envoyer un E[4~ sur frappe
de <End>, donc, il va convertir les E[4~ qu'il recoit du
terminal en E[4~ qu'il envoie a l'application. Par contre, il
va ignorer les E[F et EOF qui viennent du terminal, parce
qu'il ne sait pas a quoi ca correspond.

Donc, sous Linux, il faut adapter la valeur de TERM a quelque
chose qui ressemble plus a ce qu'est le terminal (peut-etre
xterm ou dtterm ou xterm-16color ou xterm-xfree86...)

--
Stephane

Avatar
DINH Viêt Hoà

Le probleme vient du fait que "xterm-color" correspondent a deux
choses differentes sur OSX et Linux.

Si tu fait un infocmp sur xterm, xterm-color, screen, screen-bce, tu
devrais obtenir sur Linux pour kend:

EOF E[4~ E[4~ E[4~

(EOF, c'est l'equivalent en mode keypad de E[F)

Alors que sous MacOSX, tu as peut-etre:

EOF EOF EOF EOF


sur linux :

guylux $ infocmp xterm | grep kend
kcuf1=EOC, kcuu1=EOA, kdch1=E[3~, kend=EOF, kent=EOM,
guylux $ infocmp xterm-color | grep kend
kend=E[4~, kf1=E[11~, kf10=E[21~, kf11=E[23~,
guylux $ infocmp screen | grep kend
kdch1=E[3~, kend=E[4~, kf1=EOP, kf10=E[21~,
guylux $ infocmp screen-bce | grep kend
kdch1=E[3~, kend=E[4~, kf1=EOP, kf10=E[21~,


pommecasserole $ infocmp xterm | grep kend
pommecasserole $ infocmp xterm-color | grep kend
pommecasserole $ infocmp screen | grep kend
kend=E[4~, kf1=EOP, kf10=E[21~, kf11=E[23~,
pommecasserole $ infocmp screen-bce | grep kend
infocmp: couldn't open terminfo file /usr/share/terminfo/73/screen-bce.

pas mal, non ?

à noter que j'ai l'impression qu'infocmp n'existe pas sur FreeBSD.

--
DINH V. Hoa,

"Il y a anguille sous roche"

Avatar
Stephane Chazelas
2004-12-6, 14:45(+01), DINH Viêt Hoà:
[...]
pommecasserole $ infocmp xterm | grep kend
pommecasserole $ infocmp xterm-color | grep kend
pommecasserole $ infocmp screen | grep kend
kend=E[4~, kf1=EOP, kf10=E[21~, kf11=E[23~,
pommecasserole $ infocmp screen-bce | grep kend
infocmp: couldn't open terminfo file /usr/share/terminfo/73/screen-bce.

pas mal, non ?

à noter que j'ai l'impression qu'infocmp n'existe pas sur FreeBSD.


Oui, je crois que FreeBSD en est resté a termcap, faut aller
voir dans /etc/termcap ou /usr/{share,lib}/termcap et ce sera @7
a la place de kend.

C'est peut-etre aussi le cas sur MacOSX.

--
Stephane

Avatar
Thierry Thomas
Lundi 06 décembre 2004 à 13:45 GMT, DINH Viêt Hoà a écrit :

à noter que j'ai l'impression qu'infocmp n'existe pas sur FreeBSD.


Il suffit de demander :
<http://www.freebsd.org/cgi/query-pr.cgi?prq801>.

On peut aussi l'avoir en installant la version qui est dans les ports
(devel/ncurses).
--
Th. Thomas.

Avatar
Stephane Chazelas
2004-12-6, 14:13(+00), Thierry Thomas:
Lundi 06 décembre 2004 à 13:45 GMT, DINH Viêt Hoà a écrit :

à noter que j'ai l'impression qu'infocmp n'existe pas sur FreeBSD.


Il suffit de demander :
<http://www.freebsd.org/cgi/query-pr.cgi?prq801>.

On peut aussi l'avoir en installant la version qui est dans les ports
(devel/ncurses).


Oui, mais il me semble qu'on obtient alors un ncurses mis a la
sauce BSD. OK ya un backend terminfo, mais on reste termcap en
frontend et ncurses fait la conversion comme elle peut (ce qui
peut poser quelques petits problemes et termcap reste toujours
plus limité que terminfo). Enfin, ce sont de vieux souvenirs, ca
peut avoir evolué depuis.

--
Stephane


Avatar
Thierry Thomas
Lundi 06 décembre 2004 à 14:27 GMT, Stephane Chazelas a écrit :
On peut aussi l'avoir en installant la version qui est dans les ports
(devel/ncurses).


Oui, mais il me semble qu'on obtient alors un ncurses mis a la
sauce BSD. OK ya un backend terminfo, mais on reste termcap en
frontend et ncurses fait la conversion comme elle peut (ce qui
peut poser quelques petits problemes et termcap reste toujours
plus limité que terminfo). Enfin, ce sont de vieux souvenirs, ca
peut avoir evolué depuis.


ncurses n'évolue pas beaucoup sur FreeBSD, mais la version installée par
ce port utilise bien terminfo par défaut (on peut toujours utiliser
termcap si besoin¹ via les routines tget* et tputs).

¹: je suppose pour maintenir une compatibilité avec de vielles applis ?
--
Th. Thomas.


Avatar
Nicolas George
Stephane Chazelas wrote in message
:
(EOF, c'est l'equivalent en mode keypad de E[F)


Ah, peut-être quelqu'un ici poura me renseigner sur ce point : quel est
l'_intérêt_ de changer le codage ainsi ?

1 2 3