emacsシェルモード(Mxシェル)

emacsシェルモード(Mxシェル)

emacs Mxを使用する場合シェルパターンプロンプト(行末を含む)と色の使用に関連していると思われる奇妙な文字が画面に表示されます。

端末で見た内容は次のとおりです。

mperdikeas@thorin:~#
$ 

これは私がEmacsで見たものです。シェルバッファー:

^[]0;mperdikeas@thorin: ~^Gmperdikeas@thorin:~#
$  

これは私の関連部分です.bashrc:

if [ "$color_prompt" = yes ]; then
  PS1='${debian_chroot:+($debian_chroot)}\[\033[1;32m\]\u@\h\[\033[00m\]:\[\033[1;33m\]\w\[\033[00m\]#\n$'
else
  PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w#\n$ '
fi 

プロンプトを正しく表示するようにemacsを設定する方法シェルバッファー?

答え1

おそらく、よりエレガントな解決策があるでしょう。しかし、これは私にとって効果的です。 .bashrcのプロンプト関連行の後に次のように挿入し、PS1値を適切に調整します。

# Keep it simple if running in emacs.
case "$TERM" in
  dumb)
    PROMPT_COMMAND=
    PS1="\u@\h:\W$ "
esac

答え2

シェルモードの設定で ansi-color を有効にすると良いと思います。

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

答え3

追加の構築デイブエイミーの答え.bashrc作業を簡単にするために、次のような内容を入れました。

case "$EMACS" in
    t)
    PROMPT_COMMAND=
    PS1="[\u@\h:\w]$ "
esac

$TERM私の場合、依存値は機能しないため、Emacsでは$EMACS 環境変数を true に設定する必要があります。それが生産するすべての殻について。

答え4

以下をinitファイルに入れて、Emacsを再起動してOSC(オペレーティングシステムコード)のサポートを有効にしてみてください。

(add-hook 'comint-output-filter-functions 'comint-osc-process-output)

詳細については、次を参照してください。シェルモードEmacs マニュアルのセクションC-h iの後には次のようになりますm Shell Mode <RET>:

デフォルトでは、シェルモードは通常のANSIエスケープコード(テキストの色を変更するために使用されます)を処理します。 Emacsには、次のものをinitファイルに入れると、特定のOSC(オペレーティングシステムコード)などのいくつかの拡張エスケープコードをサポートするオプションもあります。

(add-hook 'comint-output-filter-functions 'comint-osc-process-output)

関連情報