[linux-l] unterschiedliche "xterm" wie richtig verwenden?

Steffen Dettmer steffen at dett.de
Di Sep 4 15:23:11 CEST 2012


Hi,

ich kriege Farben und UTF8 Support in verschiedenen
xterm-Terminals nicht richtig und allgemeingültig konfiguriert.

Könnte mir bitte jemand auf die Sprünge helfen?



Es gibt viele verschiedene Terminals, die TERM=xterm heißen, z.B.:

- verschiedene XFree xterms (mit 8, 16 oder 256 Farben, mit/ohne UTF-8)
- cygwin xterm (der port scheint recht ähnlich zu normalem xterm zu sein)
- putty (wohl immer 256 Farben, mit/ohne UTF8)

TERM ist immer "xterm".

Spannend wären auch noch:
- cygwin console
- MSYS oder "Git Bash" unter Win

Auch wenn die 256 Farben können (xterm-colortest), verwendet z.B.
vim die defaultmässig erstmal nicht.

Wenn ich "TERM=xterm-256color" setze, gehen scheinbar (schwer
immer alle zu testen) bei allen meinen Terminals die Farben wie
erwünscht, aber wohl ja auch nur, weil ich scheinbar kein xterm
(mehr) habe, was keine 256 Farben kann.

Wie macht man das richtig? Warum setzt xterm selbst TERM=xterm
und nicht xterm-256color?

TERM wird immerhin noch von SSH "weitergereicht", d.h., wenn ich
in der lokalen Shell "TERM=xterm-256color" setze, geht das nach
SSH immer noch.

Mein Hack "[ $TERM=xterm ] && { export TERM=xterm-256color; }"
scheint zu funktionieren, ist nur eben häßlich und falsch.



Ein ähnliches Problem hab ich mit Latin9 vs. UTF-8. Manchmal muß
ich UTF-8 nutzen, z.B. via xterm oder putty:

  Nur wenn es zufällig paßt, funktioniert es, sonst muss man vor
  dem Starten des Programms (z.B. vim) LC_CTYPE oder LC_ALL
  korrigiert haben.

Wenn ich bei Putty "translation" auf UTF-8 stelle, muss ich auf
einem Server "export LC_CTYPE=de_DE.UTF-8" oder etwas in der Art
machen, damit vim richtig funktioniert, weil sonst steht locale
auf "de_DE at euro".

Ich hab auch einen Server, da steht locale auf "en_US at UTF-8", da
ist's umgekehrt: hier muss ich umsetzen, wenn ich nicht UTF8 habe.

Für lokale xterms und Consolen könnte man sich das vielleicht
noch via /etc/profile hinbiegen, aber ich hab hier ja oft
auch ein remote xterm, was ein SSH gemacht hat und ein ganz
anderes xterm sein kann, als das lokale.

Ich hab schon viel gegoogelt, aber nicht herrausgefunden, wie das
Terminal-Encoding nun automatisch herausgefunden werden soll.
Kann ja nicht sein, dass ich immer wissen muss, was mein xterm
macht und dann per Hand LC_CTYPE setzen muss. Ich hatte mal
probiert, dass mit putty ins Environment eintragen zu lassen, hat
aber keinen sichtbaren Effekt. Wenn ich LC_CTYPE lokal richtig
setze (weil z.B. mein ~/.profile richtig errät, was ich lokal
habe), funktioniert das spätestens nach SSH nicht mehr, weil dann
LC_CTYPE UTF8 oder nicht wieder vom "System" gesetzt wird, und
zwar scheinbar unabhängig davon, ob mein Terminal nun UTF8 macht
oder nicht. Shells in "xterm +u8" und "xterm -u8" haben genau
gleiches Environment.

Wie macht man das richtig?

Die ganzen UTF-8 HOWTOs, die ich fand, gehen scheinbar von der
irrigen Annahme aus, man würde immer, überall, auf allen Systemen
und unbedingt UTF8 machen, was ja wohl kaum der Normalfall sein
dürfte.

Ich synchronisiere meine ~/.rc files mit GIT, möchte also
systemspzifische hardkodierte Defaults vermeiden (wobei das ja eh
nicht hilft, weil es ja vom Terminal abhängt).



Könnte mir bitte jemand auf die Sprünge helfen, wie ich das
richtig konfiguriere?




oki,

Steffen

ps.: Das "xterm +u8" UTF8 AUSschaltet muss man auch wissen :)

-- 
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.



Mehr Informationen über die Mailingliste linux-l