web-dev-qa-db-ja.com

emacsシェルモードでプロンプトを修正するにはどうすればよいですか?

同僚のマシンでプログラミングをしています。彼は私が今まで使ったことがないバージョンのemacs(23.1.1)を持っています。私の問題は、シェルモードに移行すると、bashプロンプトが次のようになることです。

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

PS1'[\u@\h]\$ '.bashrcに設定しています。次のようになります。

[jay@socrates]$

これは、通常のシェルでどのように見えるかです。また、emacsシェルでPS1が正しい値に設定されていることを確認したので、今はアイデアがありません。プロンプトを希望どおりに表示するにはどうすればよいですか?

termの代わりにeshellまたはShellを使用する提案を見てきました。 termには上記と同じプロンプトの問題があり、eshellは私のPS1を完全に無視するため、実際には役に立ちません。

13
Jay Conrod

シェルがXTerm(または他のコンソール)のタイトル/ヘッダーを設定しようとしています。これが行われる可能性のあるいくつかの方法があります。

まず、PS1が本当にあなたが思っているものであることを確認してください

echo $PS1 | less -E

プロンプトに制御文字があるかどうかがわかりますが、少ないと面白く見えます。プロンプトがあなたの言うとおりであると仮定すると、それはおそらくPrompt_COMMAND環境変数です。あなたはそれを同じように見ることができます...

echo $Prompt_COMMAND | less -E

プロンプトコマンドが問題である場合は、設定を解除するだけです。いずれの場合も、これらの変数はどこかに設定されているため、XTermを使用していない場合は、XTermヘッダーを更新するように設定しないでください。

「標準」のbashrc(/ etc/bashrc)を調べることができます。反復シェル(PS1が設定されている)をチェックし、次にxterm($ TERM変数を参照)をチェックし、他の端末タイプとは異なる処理を行うコードが表示されます。

Bashの初期化のどこかにハードコードされたセットアップがあると思います。これは、xterm互換のコンソールプログラムでのみ実行する必要があります。 man bashを読んで、探したり調べたりできるファイルの全リストを見つけてください。

上記のすべてが失敗した場合は、試してください

printenv | less

そして、そこに疑わしいものを見つけることができるかどうかを確認し、それが設定されている場所を追跡します。うまくいかない場合は、ここに投稿してください。

13
Peter

まったく同じ問題が発生しましたが、これはPrompt_COMMANDが原因です。 xtermのタイトルが好きです。だから私は〜/ .emacs_bashに次の行を追加しました

export Prompt_COMMAND=""
5
SG1

これは、emacsシェルと通常のシェルの端末タイプに関係している可能性があります。両方のシェルでTERM環境変数が何に設定されているかを確認してください。それらが異なる場合は、emacsシェル端末タイプを変更するか、.bashrcのemacs端末タイプに異なるPS1定義を使用できるはずです。

M-x ansi-term(およびカラープロンプトがある場合はansi-color-for-comint-mode-on)を試すこともできます。

2
luapyad

これはstackoverflowサイトで非常によく答えられました。ダニエルポーによる。

これが彼の答えです。

色をサポートするAnsiTermを使用するか、通常のシェルでAnsiColorを有効にすることができます。

(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'Shell-mode-hook 'ansi-color-for-comint-mode-on)
1
Flamingbear