Was ist der richtige Wert von $ TERM für den Ansi-Term von Emacs, insbesondere wenn 'eterm-color' nach SSH nicht verfügbar ist?

7

Ich gründe derzeit $TERMan 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 eingestellt eterm-color, aber das Problem ist, dass dieser Terminaltyp auf den meisten Computern, bei denen ich mich über SSH anmelde, nicht verfügbar ist.

Die Standardeinstellung .bashrcin Ubuntu überprüft, ob die TERMVariable mit beginnt xterm-. In diesem Fall wird versucht, 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) macht das nicht. Das Ergebnis ist ein Terminal wie dieses:

0;user@host: ~user@host:~$ 

Einige Anwendungen werden auch unterbrochen readline, wenn der eingegebene Text größer als die Breite des Terminals ist.

Da eterm-colores auf einigen Remote-Hosts nicht verfügbar ist (und ich es auch nicht installieren kann), bringt das Setzen auf diesen Wert 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, mit dem ansi-term die relevanten Escape-Codes erkennt und den Titel festlegt oder sie einfach verwirft?

Stefano Palazzo
quelle

Antworten:

3

Ich habe einen Ansatz ausgearbeitet, mit dem Sie genau herausfinden können, welche Terminals auf dem Remote-Host verfügbar sind, und ihn dann einstellen können. Normalerweise gibt es mindestens ein ansi-kompatibles Terminal, daher sollte ein "Hack" zum Fälschen unnötig sein.

In einem langen ssh-Befehl sieht es ungefähr so ​​aus:

ssh -i ~ / .ssh / some_key.pub -tty some_remote_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 "

Dadurch werden verschiedene ansi-kompatible (und nicht kompatible) Terminaltypen in einer bevorzugten Reihenfolge auf dem Remote-Host gefunden und der erste gefunden, der vor dem Start von EMACS gefunden wurde. Es setzt TERM so, dass der Typ 'xterm' verwendet wird, wenn keiner unserer bevorzugten Typen gefunden wird, um sicherzustellen, dass EMACS tatsächlich gestartet wird.

In diesem Beispiel suche ich nach eterm-color, aterm, ansi und xterm-256color in dieser Reihenfolge. Ich bin kein schwerer EMACS-Benutzer, daher bin ich mir nicht sicher, ob dies tatsächlich die besten sind. Ich habe diesen Start unter CentOS getestet und gut funktioniert (bei meinen Tests wurde eterm-color gefunden).

Ich glaube, das Terminfo befindet sich bei den meisten / allen Linux-Varianten an derselben Stelle, aber Sie können mehr Pfade hinzufügen, um auf die gleiche Weise zu suchen, wie Sie mehr Terminals hinzufügen würden, indem Sie mehr hinzufügen

|| ls -1R / a / different / path | grep ^ someotherterminal $
Bedingte Prüfung und Rohre.

Andrew
quelle
1
Beachten Sie, dass ich nicht versuche, Emacs auf dem Remote-Host auszuführen. Ich versuche, innerhalb des "ansi-term" -Terminalemulators von emacs (und von dort in andere) hinein zu ssh.
Stefano Palazzo
: 'D es ist so schön.
Djhaskin987
3

Angesichts Ihres Problems würde ich empfehlen, die Einstellung TERMauf vt100 zu setzen. Es ist überall installiert, sogar in Debians ncurses-basePaket. Die in der vorgeschlagenen Antwort erwähnten Alternativen (ansi, aterm, xterm-256color) weisen Unterschiede auf, die Merkmale ausüben, die in fehlen eterm-color.

Außerdem ist die Titelzeichenfolgenfunktion nicht Teil der Terminalbeschreibung. Ihre Remote-Anwendungen verwenden es basierend auf der Einstellung von TERMz. B. "xterm".

Technisch gesehen würden Sie Farbe verlieren (schließlich hat vt100 nie Farbe gemacht ). Einige Anwendungen tun dies trotzdem.

Thomas Dickey
quelle