Ich stelle derzeit ein $TERM
auf xterm-256color
:
if [[ -n "$EMACS" ]]; then
export TERM=xterm-256color
alias emacs="emacsclient --no-wait"
export EDITOR="emacsclient --no-wait"
export VISUAL="emacsclient"
fi
Früher hatte ich es auf eingestellt eterm-color
, aber das Problem ist, dass dieser Terminaltyp auf den meisten Maschinen, bei denen ich mich über SSH anmelde, nicht verfügbar ist.
Standardmäßig .bashrc
prüft Ubuntu, ob die TERM
Variable mit beginnt xterm-
. In diesem Fall versucht es, den Fenstertitel festzulegen:
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
Das Problem ist das \[\e]0;
Bit. Es sollte von xterm-kompatiblen Terminalemulatoren analysiert werden, aber Emacs (Ansi-Term) tut das nicht. Das Ergebnis ist ein Terminal wie dieses:
0;user@host: ~user@host:~$
Es bricht auch einige Anwendungen ab readline
, wenn der eingegebene Text größer als die Breite des Terminals ist.
Weil eterm-color
es auf manchen Remote-Hosts nicht verfügbar ist (und ich es auch nicht installieren kann), bringt das Festlegen dieses Werts Dinge wie durcheinander less
.
Gibt es einen Trick, den ich verwenden kann, z. B. einen anderen Terminaltyp, der mit den meisten Distributionen geliefert wird, oder einen Hack, der ansi-term erkenntdie entsprechenden Escape-Codesund den Titel festlegen oder einfach verwerfen?
Antwort1
Ich habe einen Ansatz ausgearbeitet, mit dem Sie gezielt herausfinden können, welche Terminals auf dem Remote-Host verfügbar sind, und diese dann einrichten können. Normalerweise gibt es mindestens ein ANSI-kompatibles Terminal, sodass ein „Hack“, um es vorzutäuschen, unnötig sein sollte.
Mit einem einzigen längeren SSH-Befehl erledigt, sieht es ungefähr so aus:
ssh -i ~/.ssh/ein_Schlüssel.pub -tty ein_entfernter_Server "export TERM=`ls -1R /usr/share/terminfo | grep ^eterm-color$ || ls -1R /usr/share/terminfo | grep ^aterm$ || ls -1R /usr/share/terminfo | grep ^ansi$ || ls -1R /usr/share/terminfo | grep ^xterm-256color$ || export TERM=xterm && emacs -nw"
Dies findet verschiedene ANSI-kompatible (und nicht kompatible) Terminaltypen in einer bevorzugten Reihenfolge auf dem Remote-Host und legt den ersten gefundenen fest, bevor EMACS gestartet wird. Es legt TERM so fest, dass der Typ „xterm“ verwendet wird, wenn keiner unserer bevorzugten Typen gefunden wird, wodurch sichergestellt wird, dass EMACS tatsächlich gestartet wird.
In diesem Beispiel suche ich in dieser Reihenfolge nach eterm-color, aterm, ansi und xterm-256color. Ich bin kein intensiver EMACS-Benutzer und bin mir daher nicht sicher, ob dies wirklich die besten sind. Ich habe diesen Start unter CentOS getestet und er hat gut funktioniert (bei meinen Tests wurde eterm-color gefunden).
Ich glaube, dass die Terminfo bei den meisten/allen Linux-Varianten an der gleichen Stelle ist, aber Sie können weitere Suchpfade auf die gleiche Weise hinzufügen, wie Sie weitere Terminals hinzufügen würden, indem Sie weitere
|| ls -1R /a/anderer/Pfad | grep ^irgendeinanderesTerminal$bedingter Test und Pipes.
Antwort2
Angesichts Ihres Problems würde ich empfehlen, auf TERM
vt100 zu setzen. Es ist überall installiert, sogar im Debian- ncurses-base
Paket. Die in der vorgeschlagenen Antwort genannten Alternativen (ansi, aterm, xterm-256color) weisen Unterschiede auf, die Funktionen nutzen, die in fehlen eterm-color
.
Außerdem ist die Titelzeichenfolgenfunktion nicht Teil der Terminalbeschreibung. Ihre Remoteanwendungen verwenden sie basierend auf der Einstellung von TERM
, z. B. alles, was „xterm“ verwendet.
Technisch gesehen würde man Farbe verlieren (schließlichVT100 hat nie Farbe gemacht). Einige Anwendungen tun dies trotzdem.