想问下emacs在terminal下颜色诡异怎么破

如下图,我Git有conflict,在解决冲突的时候,颜色非常晃眼…

emacs 28,linux.

终端的颜色没那么丰富,绝大多数的 color-theme 都是针对 GUI 进行设计的,用 color-theme-approximate 兼容一下终端,保证基本可用:

(use-package color-theme-approximate
  :unless (or window-system (getenv "MLTERM"))
  :config
  (color-theme-approximate-on))
1 个赞

谢谢,我试试

现在终端都支持真彩色吧,按理来说不会和gui有什么区别

额我改成了256那个,但还是这样

不是256,搜终端名+truecolor

可以试试直接显示真彩色,前提是终端支持,比如 Mac 下的 iTerm2,开启方法可以参考这里:https://workflowy.com/s/tui-terminal-color/UjlCsE53l6H3yVpt

换终端也是个办法。。。。比如alacritty,iterm2,一类的都是可以啊

确实。。我发现原生terminal色彩比较烂

这个merge-diff的配色很熟悉啊,我也经常遇到。 是不是和我一样,用的windows terminal 的One Half Dark主题啊 :smiley: 个人经验,有几种方法解决:

  1. 改terminal工具的主题,比如 windows terminal设置->配色方案,换一个主题,或者把主题里的红绿配色换一下。terminal的红色不是绝对的#FF0000,绿色也不是绝对的#00FF00,它会调整RGB值,每个主题定制自己的赤橙黄绿青蓝紫,但也不会偏离太多,人看了还能叫出正确的颜色名。
  2. 换emacs主题,M-x customize-themes,换几个试试,总有几个清晰的配色
  3. 单独换merge-diff的的颜色,光标放在想换颜色的区域,M-x customize-face通常会自动识别光标下的face名,大概是smerge-开头的几个face,回车进去Background颜色选一个就行了。
1 个赞

如果是在Windows Terminal下用wsl的话,有个很简单的设置:

export TERM=vscode-direct

即可启用真彩色

2 个赞

您好,我是用的mac原生的terminal app,除了您提到的问题外,我发现改成iterm2后问题有所缓解,我查了下terminal app虽然是xterm-256,但是似乎不是真彩色,支持的颜色比iterm2少好多

我从原生的Mac terminal app换成了iterm2就解决了

不过我还是不太清楚终端的配色和emacs配色谁占据主导权

配色主导权,我猜是这样的:

emacs配色,是真的对应到颜色的RGB色值,比如红色就是#FF0000。但这个色值只存在emacs的配置里,要传到显示器,必须经过terminal。

terminal可以改色,也就是存了一层颜色映射,比如#FF0000 映射到 #F50000,让红色浅一点,通过这层映射来实现terminal主题。这个映射在terminal的主题配置里可以改,但只能改能叫出名字的几个颜色,其他颜色映射可能线性插值实现的吧?

256色,足够丰富了,解决你的问题,不需要真彩。

你原生term换iTerm2能改善,可能是因为它们的主题不同,也就是terminal的颜色映射表不同。

所以 xterm-direct 的 direct 的意思应该是让颜色直通,不允许映射。