Streunende 4m vor Aufforderung mit Zsh in Mx ansi-term

10

Ich habe kürzlich Running Shells in Emacs gelesen und einige Zeit damit verbracht, meine aufwändige Zsh-Eingabeaufforderung anzupassen, um mit den eingeschränkten Funktionen von M-x shellund zu arbeiten M-x ansi-term.

Nach dieser Anstrengung kann ich Zsh nun endlich aus Emacs heraus verwenden, es gibt jedoch ein - wenn auch geringfügiges - Ärgernis mit M-x ansi-term. Ich sehe immer den streunenden Text 4mvor der Eingabeaufforderung.

Streuender Text vor der Eingabeaufforderung

Wie Sie sehen können, scheint dieses Phänomen unabhängig vom eigentlichen Eingabeaufforderungsthema zu sein. Es wird auch mit den integrierten Eingabeaufforderungen angezeigt, auch mit den einfachen, die keine ausgefallenen Steuerzeichen verwenden. Tatsächlich passiert es sogar mit der Standardaufforderung, dh wenn ich Zsh ohne meine starte .zshrc.

Nun, es ist wirklich nur ein kleines Ärgernis, und es würde mir nichts ausmachen, wenn ich es nicht loswerden könnte - ich bevorzuge es M-x shellsowieso meistens , wenn dieses Problem nicht auftritt.

Aber es ärgert mich wirklich, dass ich die Ursache für dieses Problem nicht finden konnte, obwohl ich wirklich versucht habe, es zu debuggen. Ich muss jedoch sagen, dass mein Verständnis von Terminals eher begrenzt ist, so dass ich möglicherweise das sehr Offensichtliche übersehen habe.

Ich bin auf OS X 10.10. Mein Emacs ist 25.0.50, direkt aus dem Kofferraum mit Homebrew gebaut und ohne spezielle Flaggen. Zsh ist 5.0.5, wie in Yosemite enthalten, aber das Problem tritt auch bei 5.0.7 auf, das über Homebrew installiert wird.

Kann jemand ein Licht auf dieses Thema werfen?

Mondhorn
quelle
Versuchen Sie, export TERM = xterm-256color in Ihrer .zshrc oder (setq system-used-terminfo nil) festzulegen .
kmicu
system-user-terminfohat nichts geändert. Das $TERMProblem wurde durch Ändern behoben, aber das kann nicht die Lösung sein, oder? Immerhin ist es eine Lüge, im Wesentlichen: ansi-termist kein xterm und unterstützt definitiv keine 256 Farben.
Mondhorn
4m ist ein Artefakt aus dem ANSI-Escape-Code, der zum Definieren einer Farbe verwendet wird, z. B. \x1b[37;4mgibt eine weiße Farbe mit 37 und unterstrichener Text mit 4 an. Ich kann Ihr Problem nicht reproduzieren. Mein zsh ist 5.0.7 und 'echo $ TERM' in ansi-term gibt mir eterm-color , mein emacs ist 24.4.1 . Ich habe auch die saubere Standardversion 'env HOME = ~ / tmp / emacstest emacs -Q' getestet und kann keine Probleme feststellen.
kmicu
@kmicu Unter OS X 10.10 kann ich das Problem mit emacs -Qund ohne Zsh-Konfiguration konsistent reproduzieren .
Mondhorn

Antworten:

10

Anscheinend wird dieses Problem durch fehlende terminfo für verursachteterm-color . Ich konnte das Problem beheben, indem ich den Anweisungen in dieser Antwort folgte, um einen entsprechenden Eintrag in die terminfo-Datenbank zu installieren. Speziell:

$ tic -o ~/.terminfo /usr/local/share/emacs/25.0.50/etc/e/eterm-color.ti

Ich bin mir immer noch nicht sicher, warum das überhaupt nötig ist. term.elExportiert tatsächlich die $TERMINFOVariable, die auf dieses Verzeichnis verweist, sodass die Shell die Terminfo finden kann. Zsh scheint das Verzeichnis jedoch zu ignorieren ...

Es sieht jedoch so aus ~/.terminfo, dass der obige Befehl den terminfo-Eintrag für Zsh verfügbar macht.

Ich würde mich freuen, wenn jemand eine bessere Erklärung oder eine Lösung liefern könnte, die kein manuelles Eingreifen erfordert.

Mondhorn
quelle