
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 PS1
configurei '[\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 term
ou eshell
em vez de shell
. term
tem o mesmo problema imediato acima e eshell
ignora completamente o meu , PS1
entã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 bash
para 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 TERM
variá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-on
se tiver instruções coloridas).
Responder4
Isso foi respondido muito bem no site stackoverflow. por Daniel Poe.
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)