![在 tmux 中获取 emacs 16 色支持的正确方法?](https://linux22.com/image/1345852/%E5%9C%A8%20tmux%20%E4%B8%AD%E8%8E%B7%E5%8F%96%20emacs%2016%20%E8%89%B2%E6%94%AF%E6%8C%81%E7%9A%84%E6%AD%A3%E7%A1%AE%E6%96%B9%E6%B3%95%EF%BC%9F.png)
我正在尝试为我的 emacs 获取自定义颜色主题(日光浴)设置,该设置使用 16 色调色板,我已经为我的终端(gnome-terminal)设置了该调色板。
当使用 从一个普通终端运行 emacs 时TERM=xterm-256color
,我可以正确M-x list-colors-display
显示所有 16 种 ansi 颜色,例如红色、绿色、亮绿色、亮红色等。
但是,在 tmux 和 中运行它时TERM=screen-256color
,M-x list-colors-display
仅列出基本的 8 种颜色,并且缺少扩展的亮色。在这两种设置下,评估(display-color-cells)
报告都为 256 种颜色。我能找到的关于亮色的唯一引用是在 lisp/term/xterm.el 和 lisp/term/rxvt.el 中,因此问题似乎出在设置上TERM
。
为了使 tmux 正常工作,TERM
必须将其设置为 screen 或 screen-256color,因此不能以其他方式设置 TERM。我使用别名时运气不错:
alias emacs='TERM=xterm-256color emacs'
有没有比这更好的方法来强制 emacs 允许使用所有 16 种 ansi 颜色?
答案1
如您所见,附加颜色由 TERM 特定的库文件配置(例如术语/lisp)。 GNU Emacs 的较新版本包含术语/屏幕重新使用来自的颜色定义术语/xterm,但听起来你的 Emacs 版本没有这样做。
如果你不想升级到较新的 Emacs,那么你可能只需要使用要点其中包括一个term/screen.el
和一些你可以放入其中.emacs
以启用它的位;该版本term/screen.el
还包括一些你可能会发现有用的关键定义,如果你启用tmux的xterm-keys
选择。
代码的核心部分如下所示:
;;; .emacs addition
(add-to-list 'load-path "~/.emacs.d/lisp/")
;;; ~/.emacs.d/lisp/term/screen.el
(load "term/xterm")
(defun terminal-init-screen ()
(xterm-register-default-colors)
(tty-set-up-initial-frame-faces))