3

Emacs でシェル コマンドを実行すると、ANSI コードのようなコードが表示されることがよくあります。それらは、シェル プロセスが新しいプロセスを生成するときに発生するようです。

Emacs シェルで Stata を実行する例を次に示します。ANSI コード (これがそのコードの場合) は下部に表示されます。

. ls *.tex
ls *.tex

-rw-r--r--  1 pnj  staff  78006 Jun 23 17:21 un_paper.tex
-rw-r--r--  1 pnj  staff   1821 Dec 22  2013 un_results.tex

. shell ls *.tex
shell ls *.tex

^[[?1l^[>un_paper.tex                    un_results.tex
^[[?1h^[=
.

注: ANSI カラー エスケープ シーケンスに関する同様の SO の質問が多数あります。これは私の問題ではありません!ansi-color、 、ansi-color-for-comint-mode-on、および ANSI カラーが既に必要です。また、ansi-term を使用するとこの問題は解決しますが、私は標準シェルのバッファーのような特性をはるかに好みます。eshell の方がわずかに優れていますが、それでもいくつかのエスケープ コードが表示されます。

私の推測では、これらは画面モード/カーソル移動コードですが、emacs にそれらを無視または処理させる方法がわかりません。TERM は xterm-256color に設定されています。

更新: h および l コードが端末/表示モードの設定に使用されることを知りました。これは、Emacs では処理できないと思われます。それらが表示されないようにする方法はありますか?

4

2 に答える 2

3

あなたが言うように、Emacs の eshell はエスケープ コードを処理できません。これは「ダム」端末です。しかし、TERM 変数の設定は、これらのエスケープ コードを処理できることをシェルに伝えています。

eshell の内部にいるときに TERM を「ダム」に設定すると、これらの醜いエスケープ コードがなくなります。

于 2014-11-01T22:03:57.813 に答える
0

実際、emacs は の色をサポートしていますがshell、部分的にしかサポートしていません。ncurses ( dumb-emacs-ansi) に端末の説明があり、それを使用しない理由 (エントリの前のコメント) についてのメモがあります。

于 2017-02-26T11:28:23.493 に答える