![更改 `ls` 使用的颜色在 Emacs“Shell”模式下不起作用](https://linux22.com/image/75747/%E6%9B%B4%E6%94%B9%20%60ls%60%20%E4%BD%BF%E7%94%A8%E7%9A%84%E9%A2%9C%E8%89%B2%E5%9C%A8%20Emacs%E2%80%9CShell%E2%80%9D%E6%A8%A1%E5%BC%8F%E4%B8%8B%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我跟着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
以某种方式拒绝承认这一事实。