Wie korrigiere ich meine Eingabeaufforderung im Shell-Modus von Emacs?

12832
Jay Conrod

Ich programmiere auf dem Computer eines Kollegen. Er hat eine Version von Emacs (23.1.1), die ich noch nicht verwendet habe. Mein Problem ist, dass mein Bash-Prompt im Shell-Modus folgendermaßen aussieht:

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

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

[jay@socrates]$ 

So sieht es in einer normalen Shell aus. Ich habe auch überprüft, dass PS1 in der Emacs-Shell auf den korrekten Wert eingestellt ist. Jetzt habe ich keine Ideen mehr. Wie kann ich meine Aufforderung erhalten, so zu aussehen, wie ich es möchte?

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

12

4 Antworten auf die Frage

12
Peter

Ihre Shell versucht, den Titel / Header des XTerm (oder einer anderen Konsole) festzulegen. Es gibt eine Reihe von Möglichkeiten, dies zu tun.

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

echo $PS1 | less -E 

Wenn Sie also Steuerzeichen in der Eingabeaufforderung finden, werden sie weniger lustig aussehen. Angenommen, Ihre Aufforderung ist genau wie Sie sagen, dann ist es wahrscheinlich die Umgebungsvariable PROMPT_COMMAND. Sie können das genauso betrachten ...

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) nachsehen. Sie sollten Code sehen, der nach einer iteraktiven Shell sucht (wird PS1 gesetzt), und dann nach Xterm (mit der $ TERM-Variablen) suchen und dort etwas anderes machen als für andere Terminaltypen.

Ich vermute, irgendwo in der Bash-Initialisierung ist ein hartcodiertes Setup, das nur mit xterm-kompatiblen Konsolenprogrammen durchgeführt werden sollte. Lesen Sie man bash, um eine Gesamtliste der Dateien zu finden, nach denen Sie suchen können.

Wenn alle oben genannten Punkte fehlschlagen, versuchen Sie es

printenv | less 

Und sehen Sie, ob Sie dort etwas Verdächtiges finden können und suchen Sie dann nach, wo es eingestellt wird. Post es hier, wenn du es nicht klären kannst.

PROMPT_COMMAND war das Problem. Ich bin nicht sicher, wo es eingestellt wird, aber ich habe meinem ~ / .bashrc eine Zeile hinzugefügt, um es zu deaktivieren, und das funktioniert. Vielen Dank! Jay Conrod vor 15 Jahren 1
PROMPT_COMMAND brachte mich auch um. Ich verwende MobaXTerm und hat eine besonders komplizierte Bash-Eingabeaufforderung, die aus einer Kombination von PS1 und PROMPT_COMMAND bestand. Steve Broberg vor 8 Jahren 0
4
SG1

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
luapyad

Es kann etwas mit dem Terminaltyp der emacs-Shell gegenüber Ihrer regulären Shell zu tun haben. Prüfen Sie, worauf die TERMUmgebungsvariable in beiden Shells eingestellt ist. Wenn sie sich unterscheiden, sollten Sie den Emacs-Shell-Terminaltyp ändern oder eine andere PS1-Definition für den Emacs-Terminaltyp verwenden können .bashrc.

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

ansi-color-for-comint-mode-on hat mir geholfen! User1 vor 15 Jahren 1
1
Community

Dies wurde auf der stackoverflow-Seite sehr gut beantwortet. von Daniel Poe.

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)