Wie behebe ich meine Eingabeaufforderung im Emacs-Shell-Modus?

Wie behebe ich meine Eingabeaufforderung im Emacs-Shell-Modus?

Ich programmiere gerade auf dem Rechner eines Kollegen. Er hat eine Version von Emacs (23.1.1), die ich noch nie benutzt habe. Mein Problem ist, dass meine Bash-Eingabeaufforderung folgendermaßen aussieht, wenn ich in den Shell-Modus wechsle:

^[]0;jay@socrates:~^G[jay@socrates]$ 

Ich habe in meinem PS1auf gesetzt . Es soll so aussehen:'[\u@\h]\$ '.bashrc

[jay@socrates]$

So sieht es in einer normalen Shell aus. Ich habe auch überprüft, ob PS1 in der Emacs-Shell auf den richtigen Wert eingestellt ist, aber jetzt habe ich keine Ideen mehr. Wie kann ich meine Eingabeaufforderung so gestalten, wie ich es möchte?

Ich habe einige Vorschläge gesehen, anstelle von termoder zu verwenden . weist das gleiche Eingabeaufforderungsproblem wie oben auf und ignoriert mein vollständig , sodass das nicht wirklich hilft.eshellshelltermeshellPS1

Antwort1

Ihre Shell versucht, den Titel/Header von XTerm (oder einer anderen Konsole) festzulegen. Dies kann auf verschiedene Weise geschehen.

Stellen Sie zunächst sicher, dass die PS1 wirklich das ist, was Sie denken

echo $PS1 | less -E

Dadurch erfahren Sie, ob die Eingabeaufforderung Steuerzeichen enthält. Less lässt sie komisch aussehen. Vorausgesetzt, Ihre Eingabeaufforderung ist genau so, wie Sie es sagen, dann liegt es wahrscheinlich an der Umgebungsvariable PROMPT_COMMAND. Sie können das auf die gleiche Weise betrachten ...

echo $PROMPT_COMMAND | less -E

Wenn der Eingabeaufforderungsbefehl das Problem ist, können Sie ihn einfach löschen. In beiden Fällen werden diese Variablen irgendwo eingerichtet und sollten nicht so eingestellt werden, dass der XTerm-Header aktualisiert wird, wenn Sie sich nicht in einem XTerm befinden!

Sie können in der „Standard“-Bashrc (/etc/bashrc) nachsehen. Sie sollten Code sehen, der nach einer iterativen Shell sucht (ist PS1 eingestellt) und dann nach xterm sucht (unter Berücksichtigung der Variable $TERM) und dort etwas anderes macht als bei anderen Terminaltypen.

Ich vermute, dass irgendwo in der Bash-Initialisierung ein fest codiertes Setup vorhanden ist, das nur mit xterm-kompatiblen Konsolenprogrammen durchgeführt werden sollte. Lesen Sie weiter, man bashum eine vollständige Liste der Dateien zu finden, nach denen Sie suchen und die Sie durchsuchen können.

Wenn alle oben genannten Schritte fehlschlagen, versuchen Sie

printenv | less

Und sehen Sie nach, ob Sie dort etwas Verdächtiges finden, und finden Sie dann heraus, wo es eingestellt wird. Posten Sie es hier, wenn Sie es nicht herausfinden können.

Antwort2

Ich bin auf genau dasselbe Problem gestoßen und es liegt an PROMPT_COMMAND. Mir gefällt der xterm-Titel. Also habe ich folgende Zeile in ~/.emacs_bash hinzugefügt

export PROMPT_COMMAND=""

Antwort3

Es kann etwas mit dem Terminaltyp der Emacs-Shell im Vergleich zu Ihrer normalen Shell zu tun haben. Überprüfen Sie, auf welchen Wert die TERMUmgebungsvariable in beiden Shells eingestellt ist. Wenn sie unterschiedlich sind, sollten Sie in der Lage sein, den Terminaltyp der Emacs-Shell zu ändern oder eine andere PS1-Definition für den Emacs-Terminaltyp in zu verwenden .bashrc.

Sie können es auch versuchen M-x ansi-term(und ansi-color-for-comint-mode-onwenn Sie Farbaufforderungen haben).

Antwort4

Dies wurde auf der Stackoverflow-Site von Daniel Poe sehr gut beantwortet.

Hier ist seine Antwort.

Sie können AnsiTerm verwenden, das Farben unterstützt, oder Sie können AnsiColor für die normale Shell aktivieren:

(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

verwandte Informationen