更改 `ls` 使用的颜色在 Emacs“Shell”模式下不起作用

更改 `ls` 使用的颜色在 Emacs“Shell”模式下不起作用

我跟着https://unix.stackexchange.com/a/94508/674更改 所使用的颜色ls。这在 bash 中有效。

当我在 Emacs(Mx shell)中打开“Shell”模式的缓冲区时,更改不起作用。我想知道如何将相同的更改应用于 Emacs“Shell”模式?

答案1

某些版本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, 

这是我创建的一个 Terminfo 条目,支持 Emacs 自有品牌的 ANSI 代码(仅支持 8 种颜色,具有粗体、斜体和下划线作为独立属性)。用 编译它tic dumb-emacs-ansi.ti

然后添加到你的.bashrc:

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

您只需在现有 shell 会话中运行导出行即可更新它,而无需重新启动 bash。

答案2

Emacsshell模式是一个哑终端,仅与 shell 交换字符串;它不允许像设置颜色那样的终端转义序列。如果您想要 emacs 中的完整终端,请使用M-x term. (完成此操作后,您可以使用C-c k;退出它,term获取所有正常的键,因为它是一个完整的终端模拟器。)

编辑:建议使用term支架,但似乎shell-mode确实允许颜色,并且ls以某种方式拒绝承认这一事实。

相关内容