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


13

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

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

Ich habe mich PS1auf '[\u@\h]\$ 'meine eingestellt .bashrc. Es soll so aussehen:

[jay@socrates]$

So sieht es in einer regulären Shell aus. Ich habe auch überprüft, ob die PS1 in der Emacs-Shell auf den richtigen Wert eingestellt ist. Wie kann ich meine Eingabeaufforderung so anzeigen lassen, wie ich es möchte?

Ich habe einige Vorschläge zur Verwendung termoder eshellanstelle von gesehen shell. termhat das gleiche prompte Problem wie oben und eshellignoriert mein vollständig, PS1so dass nicht wirklich hilft.

Antworten:


13

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

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

echo $PS1 | less -E

Das wird Ihnen sagen, ob es Steuerzeichen in der Eingabeaufforderung gibt, weniger wird sie lustig aussehen lassen. Angenommen, Ihre Eingabeaufforderung ist genau so, wie Sie sagen, dann ist es wahrscheinlich die Umgebungsvariable PROMPT_COMMAND. Sie können das genauso sehen ...

echo $PROMPT_COMMAND | less -E

Wenn der Eingabeaufforderungsbefehl das Problem ist, können Sie ihn einfach deaktivieren. 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) suchen. Es sollte Code angezeigt werden, der nach einer iteraktiven Shell sucht (PS1-Set) und dann nach xterm sucht (siehe $ TERM-Variable) und dort etwas anderes ausführt als bei anderen Terminaltypen.

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

Wenn alle oben genannten Probleme auftreten, versuchen Sie es

printenv | less

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


1
PROMPT_COMMAND war das Problem. Ich bin nicht sicher, wo es gesetzt wird, aber ich habe eine Zeile zu meinem ~ / .bashrc hinzugefügt, um es zu entfernen, und das funktioniert. Vielen Dank!
Jay Conrod

PROMPT_COMMAND hat mich auch umgebracht. Ich verwende MobaXTerm und es hat eine besonders komplizierte Bash-Eingabeaufforderung, die eine Kombination aus PS1 und PROMPT_COMMAND war.
Steve Broberg

5

Ich bin auf genau dasselbe Problem gestoßen und es liegt an PROMPT_COMMAND. Ich mag den xterm Titel. Also habe ich folgende Zeile in ~ / .emacs_bash hinzugefügt

export PROMPT_COMMAND=""

2

Dies hängt möglicherweise mit dem Terminaltyp der Emacs-Shell und Ihrer regulären Shell zusammen. Überprüfen Sie, auf was die TERMUmgebungsvariable in beiden Shells festgelegt ist. Wenn sie unterschiedlich sind, sollten Sie in der Lage sein, den Emacs-Shell-Terminaltyp zu ändern oder eine andere PS1-Definition für den Emacs-Terminaltyp zu verwenden .bashrc.

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


1
ansi-color-for-comint-mode-on hat mir geholfen!
User1

1

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

Hier ist seine Antwort.

Sie können AnsiTerm verwenden, das Farben unterstützt, oder 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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.