在 tmux 中获取 emacs 16 色支持的正确方法?

在 tmux 中获取 emacs 16 色支持的正确方法?

我正在尝试为我的 emacs 获取自定义颜色主题(日光浴)设置,该设置使用 16 色调色板,我已经为我的终端(gnome-terminal)设置了该调色板。

当使用 从一个普通终端运行 emacs 时TERM=xterm-256color,我可以正确M-x list-colors-display显示所有 16 种 ansi 颜色,例如红色、绿色、亮绿色、亮红色等。

但是,在 tmux 和 中运行它时TERM=screen-256colorM-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还包括一些你可能会发现有用的关键定义,如果你启用tmuxxterm-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))

相关内容