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

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

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

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

私は を にPS1設定しました。次のようになるはずです:'[\u@\h]\$ '.bashrc

[jay@socrates]$

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

の代わりにtermまたは を使用するという提案をいくつか見ました。は上記と同じプロンプトの問題があり、my を完全に無視するため、あまり役に立ちません。eshellshelltermeshellPS1

答え1

シェルは 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

そこに何か疑わしいものがないか確認し、それがどこに設定されているかを追跡してください。わからない場合は、ここに投稿してください。

答え2

私もまったく同じ問題に遭遇しましたが、それはPROMPT_COMMANDが原因でした。私はxtermのタイトルが好きです。そこで、~/.emacs_bashに次の行を追加しました。

export PROMPT_COMMAND=""

答え3

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

試してみることもできますM-x ansi-term(ansi-color-for-comint-mode-on色のプロンプトがある場合)。

答え4

これについては、stackoverflow サイトで Daniel Poe によって非常によく回答されています。

これが彼の答えです。

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

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

関連情報