web-dev-qa-db-ja.com

`ls`で使用される色の変更はEmacsの「シェル」モードでは機能しません

https://unix.stackexchange.com/a/94508/674 に従って、lsで使用される色を変更しました。これはbashで機能します。

Emacs(M-x Shell)で「シェル」モードのバッファーを開くと、変更が機能しません。同じ変更をEmacsの「シェル」モードにどのように適用できるのでしょうか。

3
Tim

lsの一部のバージョンは、terminfoデータベースから、端末でサポートされているカラーコードを知る必要があります。

まず、次のファイル(dumb-emacs-ansi.ti)を作成します。

dumb-emacs-ansi|Emacs dumb terminal with ANSI color codes,
    am,
    colors#8, it#8, ncv#13, pairs#64,
    bold=\E[1m, cud1=^J, ht=^I, ind=^J, op=\E[39;49m,
    ritm=\E[23m, rmul=\E[24m, setab=\E[4%p1%dm,
    setaf=\E[3%p1%dm, sgr0=\E[m, sitm=\E[3m, smul=\E[4m, 

これは、Emacs独自のANSIコードのブランドをサポートして作成したTerminfoエントリです(8色のみをサポートし、独立した属性として太字、斜体、下線があります)。 tic dumb-emacs-ansi.tiでコンパイルします。

次に、.bashrcに追加します。

if [ "$TERM" = dumb ] && [ "$INSIDE_EMACS" ]; then
    export TERM=dumb-emacs-ansi COLORTERM=1
fi

既存のシェルセッションでエクスポート行を実行するだけで、bashを再起動せずに更新できます。

3
Random832

Emacs Shellモードは、シェルと文字列を交換するだけのダム端末です。色を設定するような端末エスケープシーケンスは許可されません。 emacs内で完全なターミナルが必要な場合は、M-x termを使用してください。 (これを行った後、C-c kで終了できます。termは完全なターミナルエミュレーターであるため、すべての通常のキーを取得します。)

編集:termを使用するという提案は有効ですが、Shell-modeは確かに色を許可しているようで、lsはどういうわけかこの事実を認識しません。

1
Tom Hunt