Como faço para corrigir meu prompt no modo shell do emacs?

13

Estou fazendo alguma programação na máquina de um colega. Ele tem uma versão do emacs (23.1.1) que eu não usei antes. Meu problema é que, quando vou para o modo shell, meu prompt do bash fica assim:

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

Tenho PS1definido para '[\u@\h]\$ 'na minha .bashrc. Ele deveria ficar assim:

[jay@socrates]$

É assim que fica em um shell comum. Também verifiquei se o PS1 está definido com o valor correto no shell emacs, então agora estou sem ideias. Como faço para que meu prompt tenha a aparência desejada?

Eu já vi algumas sugestões para usar termou em eshellvez de shell. termtem o mesmo problema imediato que o descrito acima e eshellignora completamente o meu PS1para que isso realmente não ajude.

Jay Conrod
fonte

Respostas:

13

Seu shell está tentando definir o título / cabeçalho do XTerm (ou outro console). Existem várias maneiras de fazer isso.

Primeiro, verifique se o PS1 é realmente o que você pensa que é

echo $PS1 | less -E

Isso informará se há caracteres de controle no prompt, menos fará com que pareçam engraçados. Supondo que seu prompt seja exatamente o que você diz, provavelmente é a variável de ambiente PROMPT_COMMAND. Você pode ver isso da mesma maneira ...

echo $PROMPT_COMMAND | less -E

Se o comando prompt for o problema, você pode simplesmente desmarcá-lo. Em ambos os casos, essas variáveis ​​estão sendo configuradas em algum lugar e não devem ser configuradas para atualizar o cabeçalho do XTerm, se você não estiver em um XTerm!

Você pode procurar no bashrc "padrão" (/ etc / bashrc). Você deve ver o código que procura um shell iterativo (é o conjunto PS1) e, em seguida, o xterm (olhando para a variável $ TERM), e faz algo diferente lá do que para outros tipos de terminal.

Eu suspeito que em algum lugar na inicialização do bash há uma configuração codificada, que deve ser feita apenas em programas de console compatíveis com xterm. Leia man bash para encontrar uma lista total de arquivos que você pode procurar e encontrar.

Se tudo isso falhar, tente

printenv | less

E veja se você pode encontrar algo suspeito lá e depois localize onde está sendo definido. Publique aqui se você não conseguir resolver.

Pedro
fonte
1
PROMPT_COMMAND foi o problema. Não tenho certeza de onde está sendo definido, mas adicionei uma linha ao meu ~ / .bashrc para desmarcá-la, e isso funciona. Obrigado!
Jay Conrod
PROMPT_COMMAND também estava me matando. Estou usando o MobaXTerm e ele tem um prompt do bash particularmente complicado, que era uma combinação do PS1 e do PROMPT_COMMAND.
9788 Steve Jobs #
5

Me deparei exatamente com o mesmo problema e é devido a PROMPT_COMMAND. Eu gosto do título xterm. Então eu adicionei a seguinte linha em ~ / .emacs_bash

export PROMPT_COMMAND=""
SG1
fonte
2

Pode ser algo a ver com o tipo de terminal do shell emacs versus o seu shell comum. Verifique como a TERMvariável de ambiente está configurada nos dois shells. Se eles forem diferentes, você poderá alterar o tipo de terminal do shell emacs ou usar uma definição PS1 diferente para o tipo de terminal do emacs .bashrc.

Você também pode tentar M-x ansi-term(e ansi-color-for-comint-mode-onse tiver instruções em cores).

luapyad
fonte
1
ansi-color-for-comint-mode-on me ajudou!
usar o seguinte
1

Isso foi respondido muito bem no site stackoverflow. de Daniel Poe.

Aqui está a resposta dele.

Você pode usar o AnsiTerm que suporta cores ou ativar o AnsiColor para o shell normal:

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