Come posso risolvere il mio prompt nella modalità shell di emacs?


13

Sto programmando sulla macchina di un collega. Ha una versione di emacs (23.1.1) che non ho mai usato prima. Il mio problema è che quando vado in modalità shell, il mio prompt di bash assomiglia a questo:

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

Ho PS1impostato su '[\u@\h]\$ 'nel mio .bashrc. Dovrebbe assomigliare a questo:

[jay@socrates]$

Ecco come appare in una shell normale. Ho anche verificato che PS1 sia impostato sul valore corretto nella shell emacs, quindi ora non ho più idee. Come posso ottenere il mio prompt per apparire come voglio?

Ho visto alcuni suggerimenti da usare termo al eshellposto di shell. termha lo stesso problema immediato di cui sopra e eshellignora completamente il mio in PS1modo che non sia di grande aiuto.

Risposte:


13

La tua shell sta cercando di impostare il titolo / intestazione di XTerm (o altra console). Esistono diversi modi per farlo.

Per prima cosa assicurati che la PS1 sia davvero ciò che pensi che sia

echo $PS1 | less -E

Questo ti dirà se ci sono caratteri di controllo nel prompt, meno li renderà divertenti. Supponendo che il tuo prompt sia esattamente come dici tu, allora probabilmente è la variabile d'ambiente PROMPT_COMMAND. Puoi vederlo allo stesso modo ...

echo $PROMPT_COMMAND | less -E

Se il comando prompt è il problema, puoi semplicemente annullarlo. In entrambi i casi, queste variabili vengono impostate da qualche parte e non devono essere impostate per aggiornare l'intestazione XTerm, se non si è in un XTerm!

Puoi guardare nel bashrc "standard" (/ etc / bashrc). Dovresti vedere il codice che controlla la presenza di una shell iterattiva (è impostato PS1), quindi verifica la presenza di xterm (guardando la variabile $ TERM) e fa qualcosa di diverso rispetto ad altri tipi di terminali.

Sospetto che da qualche parte l'inizializzazione di bash sia una configurazione hard-coded, che dovrebbe essere fatta solo su programmi console compatibili con xterm. Leggi man bash per trovare un elenco totale di file che puoi cercare e trovare.

Se tutto quanto sopra fallisce, prova

printenv | less

E vedi se riesci a trovare qualcosa di sospetto lì dentro, quindi rintraccia dove viene impostato. Pubblicalo qui se non riesci a risolverlo.


1
PROMPT_COMMAND era il problema. Non sono sicuro di dove venga impostato, ma ho aggiunto una riga al mio ~ / .bashrc per disinserirlo, e funziona. Grazie!
Jay Conrod,

Anche PROMPT_COMMAND mi stava uccidendo. Sto usando MobaXTerm e ha un prompt bash particolarmente complicato che era una combinazione di PS1 e PROMPT_COMMAND.
Steve Broberg,

5

Ho riscontrato esattamente lo stesso problema ed è dovuto a PROMPT_COMMAND. Mi piace il titolo xterm. Quindi ho aggiunto la seguente riga in ~ / .emacs_bash

export PROMPT_COMMAND=""

2

Potrebbe essere qualcosa a che fare con il tipo di terminale della shell emacs rispetto alla shell normale. Controlla su cosa TERMè impostata la variabile d'ambiente in entrambe le shell. Se sono diversi, dovresti essere in grado di modificare il tipo di terminale della shell emacs o utilizzare una diversa definizione PS1 per il tipo di terminale emacs .bashrc.

Potresti anche provare M-x ansi-term(e ansi-color-for-comint-mode-onse hai richieste di colore).


1
ansi-color-for-comint-mode-on mi ha aiutato!
Utente 1

1

Ciò è stato risposto molto bene sul sito stackoverflow. di Daniel Poe.

Ecco la sua risposta.

È possibile utilizzare AnsiTerm che supporta i colori oppure è possibile abilitare AnsiColor per la shell normale:

(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.