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

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

Estou fazendo alguma programação na máquina de um colega. Ele tem uma versão do emacs (23.1.1) que 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]$ 

Eu PS1configurei '[\u@\h]\$ 'no meu .bashrc. Deveria ser assim:

[jay@socrates]$

É assim que parece em um shell normal. Também verifiquei se PS1 está definido com o valor correto no shell do emacs, então agora estou sem ideias. Como posso fazer com que meu prompt tenha a aparência que desejo?

Eu vi algumas sugestões para usar termou eshellem vez de shell. termtem o mesmo problema imediato acima e eshellignora completamente o meu , PS1então isso realmente não ajuda.

Responder1

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

Primeiro, certifique-se de que o PS1 é realmente o que você pensa que é

echo $PS1 | less -E

Isso lhe dirá se há caracteres de controle no prompt, menos os fará parecer engraçados. Supondo que seu prompt seja exatamente como 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 verifica um shell iterativo (é definido como PS1) e, em seguida, verifica 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 só deve ser feita em programas de console compatíveis com xterm. Leia man bashpara encontrar uma lista total de arquivos que você pode procurar.

Se todas as opções acima falharem, tente

printenv | less

E veja se você consegue encontrar algo suspeito lá e, em seguida, rastreie onde está sendo colocado. Poste aqui se você não conseguir resolver.

Responder2

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

export PROMPT_COMMAND=""

Responder3

Pode ter algo a ver com o tipo de terminal do shell do emacs versus o seu shell normal. Verifique como a TERMvariável de ambiente está definida em ambos os shells. Se eles forem diferentes, você poderá alterar o tipo de terminal do shell do emacs ou usar uma definição PS1 diferente para o tipo de terminal do emacs em .bashrc.

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

Responder4

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

Aqui está a resposta dele.

Você pode usar o AnsiTerm, que suporta cores, ou pode 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)

informação relacionada