Jak naprawić mój monit w trybie powłoki Emacsa?

13

Zajmuję się programowaniem na komputerze kolegi. Ma wersję emacsa (23.1.1), z której wcześniej nie korzystałem. Mój problem polega na tym, że kiedy przechodzę do trybu powłoki, mój monit bash wygląda następująco:

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

Mam PS1ustawione '[\u@\h]\$ 'w moim .bashrc. Powinno to wyglądać tak:

[jay@socrates]$

Tak to wygląda w zwykłej powłoce. Sprawdziłem również, czy PS1 ma poprawną wartość w powłoce emacsa, więc teraz nie mam pomysłów. Jak mogę uzyskać monit, aby wyglądał tak, jak chcę?

Widziałem kilka sugestii do użycia termlub eshellzamiast shell. termma taki sam problem jak powyżej i eshellcałkowicie ignoruje mój, PS1więc to naprawdę nie pomaga.

Jay Conrod
źródło

Odpowiedzi:

13

Twoja powłoka próbuje ustawić tytuł / nagłówek XTerm (lub innej konsoli). Można to zrobić na wiele sposobów.

Najpierw upewnij się, że PS1 jest naprawdę taki, jak myślisz

echo $PS1 | less -E

Dzięki temu dowiesz się, czy w pytaniu są znaki kontrolne, mniej sprawi, że będą wyglądać śmiesznie. Zakładając, że twój monit jest dokładnie taki, jak mówisz, prawdopodobnie jest to zmienna środowiskowa PROMPT_COMMAND. Możesz na to spojrzeć w ten sam sposób ...

echo $PROMPT_COMMAND | less -E

Jeśli problemem jest polecenie zachęty, możesz je po prostu usunąć. W obu przypadkach zmienne te są gdzieś konfigurowane i nie należy ich ustawiać w celu aktualizacji nagłówka XTerm, jeśli nie jesteś w XTerm!

Możesz zajrzeć do „standardowego” bashrc (/ etc / bashrc). Powinieneś zobaczyć kod, który sprawdza iteraktywną powłokę (jest ustawiony na PS1), a następnie sprawdza xterm (patrząc na zmienną $ TERM) i robi tam coś innego niż w przypadku innych typów terminali.

Podejrzewam, że gdzieś w inicjalizacji bash jest zakodowana konfiguracja, którą należy wykonać tylko w programach konsolowych kompatybilnych z Xterm. Przeczytaj man bash, aby znaleźć całkowitą listę plików, które możesz przeszukać.

Jeśli powyższe nie powiedzie się, spróbuj

printenv | less

I sprawdź, czy znajdziesz tam coś podejrzanego, a następnie sprawdź, gdzie jest to ustawione. Opublikuj tutaj, jeśli nie możesz tego wypracować.

Piotr
źródło
1
Problemem był PROMPT_COMMAND. Nie jestem pewien, gdzie się to ustawia, ale dodałem wiersz do mojego ~ / .bashrc, aby go rozbroić, i to działa. Dzięki!
Jay Conrod,
PROMPT_COMMAND też mnie zabijał. Używam MobaXTerm i ma on szczególnie skomplikowany monit bash, który był kombinacją PS1 i PROMPT_COMMAND.
Steve Broberg,
5

Natknąłem się na dokładnie ten sam problem i wynika to z PROMPT_COMMAND. Podoba mi się tytuł xterm. Więc dodałem następujący wiersz w ~ / .emacs_bash

export PROMPT_COMMAND=""
SG1
źródło
2

Może to mieć coś wspólnego z typem terminalu powłoki emacs vs. Sprawdź, jaka TERMzmienna środowiskowa jest ustawiona w obu powłokach. Jeśli są różne, powinieneś być w stanie zmienić typ terminala powłoki emacs lub użyć innej definicji PS1 dla typu terminala emacs w .bashrc.

Możesz także spróbować M-x ansi-term(i ansi-color-for-comint-mode-onjeśli masz kolorowe monity).

luapyad
źródło
1
ansi-color-for-comint-mode-on pomógł mi!
Użytkownik1
1

Odpowiedzi na to bardzo dobrze udzielono na stronie Stackoverflow. autor: Daniel Poe.

Oto jego odpowiedź.

Możesz użyć AnsiTerm, który obsługuje kolory lub możesz włączyć AnsiColor dla normalnej powłoki:

(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
Społeczność
źródło