Como corrijo meu prompt no modo shell do emacs?

12

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 eu vou para o modo shell, meu prompt bash se parece com isso:

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

Eu tenho PS1 definido como '[\u@\h]\$ ' no meu .bashrc . É suposto ser assim:

[jay@socrates]$

Isto é como parece em um shell regular. Eu também verifiquei que PS1 está definido para o valor correto no shell do emacs, então agora estou sem ideias. Como posso fazer com que o meu prompt fique do jeito que eu quero?

Eu já vi algumas sugestões para usar term ou eshell em vez de shell . term tem o mesmo problema de prompt acima, e eshell ignora completamente meu PS1 , então isso não ajuda muito.

    
por Jay Conrod 28.08.2009 / 20:37

4 respostas

12

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

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

echo $PS1 | less -E

Isso lhe dirá se houver caracteres de controle no prompt, menos eles parecerão 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 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 (é PS1 definido) e, em seguida, verifica o xterm (observando a variável $ TERM) e faz algo diferente do que para outros tipos de terminal.

Eu suspeito que em algum lugar na inicialização do bash é 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 e por.

Se todos os itens acima falharem, tente

printenv | less

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

    
por 29.08.2009 / 04:01
4

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

export PROMPT_COMMAND=""
    
por 13.03.2012 / 09:54
2

Pode haver algo a ver com o tipo de terminal do shell do emacs versus seu shell normal. Verifique o que a variável de ambiente TERM está configurada nos dois shells. Se eles são diferentes, então você deve ser capaz de alterar o tipo de terminal shell do emacs ou usar uma definição PS1 diferente para o tipo de terminal emacs em .bashrc .

Você também pode tentar M-x ansi-term (e ansi-color-for-comint-mode-on se tiver prompts de cores).

    
por 29.08.2009 / 02:49
1

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

Aqui está sua resposta.

Você pode usar AnsiTerm que suporta cores ou você pode habilitar 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)
    
por 17.10.2009 / 18:24