True color (24-bit) in terminal

相关的 patch/fork 早就有了,我试过几次都没成功(可能跟当时使用的终端和终端配置有关),于是放弃了治疗。

刚才看到这个回复:https://github.com/bbatsov/solarized-emacs/issues/18#issuecomment-294374266

here’s how i went around the problem. code supporting 24bit colors is already in emacs’ development version: e463e57 on osx this can easily be installed via the emacs-plus brew formula, using the --HEAD option.

this version of emacs requires a custom terminfo description xterm-24bit, which needs to be compiled manually:


$ cat terminfo-24bit.src

# Use semicolon separators.
xterm-24bits|xterm with 24-bit direct color mode,
        use=xterm-256color,
        Tc,
        setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
        setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,

$ tic -x -o ~/.terminfo terminfo-24bit.src

this will also work for tmux, provided that true color is also setup tmux side. source: Re: Black and white emacs -nw (WAS: Re: [PATCH v3 0/4] Support 24-bit te more on how to setup tmux true color here.

TERM=xterm-24bits emacs -nw and the theme works flawlessly. :ok_hand:

跟着试了一下,果然在终端下看到了平滑过度的灰色:


  • macOS 10.11.6
  • iTerm2 v3.0.15 + Solarized-dark
1 个赞

字都认识,但是读的懵懵懂懂 http://lists.gnu.org/archive/html/emacs-devel/2017-02/msg00635.html 这个链接说是要重新编译tmux,然后tmux下运行emacs,但是实在看不懂这段代码怎么用

$ cat terminfo-24bit.src

    # Use semicolon separators.
    xterm-24bits|xterm with 24-bit direct color mode,
            use=xterm-256color,
            Tc,
            setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
            setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,

    $ tic -x -o ~/.terminfo terminfo-24bit.src

就是创建一个名为 terminfo-24bit.src,内容为中间那一段,然后用最后一行的命令去执行。这是常用的表达方式,要习惯。代码比文字描述更清晰、准确、可靠

你不着急编译/配置 tmux,先在 iTerm2 下实验成功再说。

emacs-plus 在没打补丁的 tmux ( stable v2.3) 下是这样的,明显看到灰色过渡不连贯。我平时没在 tmux 里运行 emacs,暂时不管它。

我用的linux,solarized这个主题在终端显示不正常,所以一直但是放弃的,

Tmux 2.4 发布了,支持 True Color,不过它的 vi 模式有点问题,影响不大。

另外要说明一下,Emacs 支持终端真彩的 patch 早就进 master 分支了,跟前面提到的 Emacs Plus 没关系。

终端 emacs 的烦恼事又少了一件,可喜可贺,现在就剩下快捷键了。

看了一下,需要安装emacs-snapshot,我来试试看是否支持solarized

终端与emacs带的gui颜色显示已经没区别了,然而突然发现不怎么喜欢solarized

一定要在tmux里面启动emacs么

根据这里(https://www.gnu.org/software/emacs/manual/html_node/efaq/Colors-on-a-TTY.html), emacs 27.1支持真彩色, 但是实际没有生效, TERM变量值是xterm-direct, list-colors-display仅显示500多种颜色

设置了环境变量export COLORTERM=truecolor, 情况依旧.

终端是mintty(运行在windows上, mintty配置中选择终端类型xterm-direct), 通过ssh连接到linux, TERM变量的值也确实是xterm-direct

文档中第一个命令有输出:

$ infocmp|grep "seta[bf]"
        setab=\E[%?%p1%{8}%<%t4%p1%d%e48:2::%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%d%;m,
        setaf=\E[%?%p1%{8}%<%t3%p1%d%e38:2::%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%d%;m,

第二个命令没有输出:

$ toe | grep '\-direct'

但是看了下/usr/share/terminfo/x里面有xterm-direct

是哪里的问题呢?

看了一下确实 list-colors-display 只有 500 多种颜色,但是终端的 theme 显示和 GUI theme 显示已经完全一样没任何区别了,不觉得这有什么问题。而且你哪怕用 GUI 来 list-colors-display,也就是 500 多种颜色,是一样的。

我加载了solarized主题, 和GUI不一样, 差别较大

另外, emacs -Q刚起来, 颜色也和GUI不一样.

emacs有没有更明确的方法判断当前是不是真彩色模式? 或者更准确的, 当前处于几色模式?

500多色就是真彩了,你只要看灰色过渡是不是平滑,或者对照GUI看看有什么差别。

不一样可能不一定是真彩显示的问题;我知道终端显示颜色有一个非常 hack 的情况,但不确定是不是你的 case。就是在终端里 #000000#FFFFFF显示的并不是纯白色和纯黑色,而是你的用的 terminal (alacrity/wezterm啥的) 的主题定义的纯白色和纯黑色。但是其他的 hex code 的颜色显示都是准的,就是纯黑色和纯白色比较奇怪。

具体情况可以看这个邮件列表的讨论:The background for modus-vivendi in terminal is lighter than in GUI, and "hl-line-mode" is different? — sourcehut lists

灰色看着有过渡,

不过加载同样颜色主题, 差别较大, 目测主要是背景色. 左边窗口是GUI, 右边是终端

solarized主题背景色倒不是纯白或纯黑, 楼上有截图, 粗看是背景色不一样, 其他颜色差不多

难道背景色做了特殊处理? 或者是这个颜色主题有问题?

又测试了下emacs内置主题, 好像正常.

估计是刚才那个主题的原因了

有一个方法可以粗略判断: 就是在终端的配置页面, 切换终端自己的颜色主题, 如果切换后emacs的颜色有变, 说明用的是16色或256色, 不是真彩色. 如果颜色没变, 说明是真彩色, 不受终端颜色主题影响.

emacs有没有更明确的方法判断当前是不是真彩色模式?

有一个方法可以判断: 就是在终端的配置页面, 切换终端自己的颜色主题, 如果切换后emacs的颜色有变, 说明用的是16色或256色, 不是真彩色. 如果颜色没变, 说明是真彩色, 不受终端颜色主题影响.

这个不太对。即使你的终端是真彩的,只要你的 emacs 的主题的背景是纯黑或者纯白,那么背景色还是会跟着你的终端的主题走,但是只要你把 emacs 的背景色换成一个很接近纯黑/纯白,但是又不是纯色的背景色,那么就能够正常的显示了。

具体地说可以尝试一下

(set-background-color "#0F0000")
(set-background-color "#000000")

看看会有什么样的显著变化。

只是粗略判断, 一方面我用的主题没有纯黑和纯白, 眼睛不舒服. 另一方面, 还有背景色之外的其他(文本)颜色可以对比

可能受到了你终端本身的配色干扰。你试试终端和Emacs设置同一套配色。