【问题标题】:custom-theme-set-faces compatible with tty与 tty 兼容的自定义主题集面
【发布时间】:2014-01-13 12:48:20
【问题描述】:

我使用custom-create-theme 创建了一个emacs-23 自定义主题。它在 X(Linux gnome 桌面)下运行良好。但是,在 tty(在 gnome-terminal 中)下运行时,有些颜色是错误的。

问题不是颜色的准确性(尽管在这两种情况下匹配它们会很好),而是有些颜色太差以至于无法使用。例如,在 X 下显示为绿色的函数名称在 tty 下是不可见的,尽管在 X 下显示为金色的关键字在 tty 下也显示为金色(或至少某种黄色)。

也许 tty 下的颜色不能完全匹配,所以要替换类似的东西?如果是这样,这似乎并不总是有效。

我该如何解决这个问题?是否可以在“自定义”GUI 或 ~/.emacs.d/my-theme.el 文件中指定某些面孔仅适用于 X 上显示的帧,而其他面孔仅适用于 tty 或其他类似吗?

(我有兴趣得到这个,内置的 emacs 主题系统可以正常工作,而不是使用一些外部颜色主题系统。)

【问题讨论】:

    标签: emacs themes color-scheme dot-emacs emacs-faces


    【解决方案1】:

    如果框架上的颜色不可用,emacs 应该尝试选择“接近”的颜色,但在有限的颜色显示器上这通常是非常错误的。您应该使用M-x list-colors-display(实际查看颜色)或在暂存缓冲区中运行(display-color-cells),询问emacs 它认为它在gnome-terminal 中有多少种颜色。如果它说您只有 8 个,您可能需要考虑在启动 emacs 之前将您的 TERM 环境变量更改为 xterm-256color (尽管我不确定这在 gnome-terminal 中的实际效果如何;我使用 xterm )。

    所以这可能有助于 emacs 能够找到更接近的颜色,但如果它仍然是错误的,你会想要做一些更激烈的事情,比如根据窗口系统设置颜色。

    如果你不使用守护模式,你可以使用类似的东西

    (if window-system<br>    (set-face-foreground 'font-lock-function-name-face "LightSkyBlue"))

    如果您使用M-x describe-face,它会询问您要描述哪张脸,默认为当前所在的那张脸。您可以从那里获得名称(通常是颜色)。

    如果您使用的是守护程序模式,那么您需要为每个框架设置不同的颜色,在这种情况下,您需要在新的框架挂钩中设置框架的颜色,类似于:

    (defun set-new-frame-colors (frame)
       "Set colors based on frame type."
       (if (window-system frame)
           (set-face-forgeground 'font-lock-function-name-face "LightSkyBlue" frame)
           (set-face-forgeground 'font-lock-function-name-face "blue" frame)))
    (add-hook 'after-make-frame-functions 'set-new-frame-colors)

    或者,您可以检查(length (defined-colors frame)),而不是检查(window-system frame),并根据系统支持的颜色数量来确定,这样您就可以为8色和256色终端提供不同的颜色。

    【讨论】:

      【解决方案2】:

      您可以通过检查变量window-system 来判断当前帧是否与图形窗口相关联。该链接有文档,但看起来像:

      window-system is a variable defined in `C source code'.
      Its value is nil
      
      Documentation:
      Name of window system through which the selected frame is displayed.
      The value is a symbol--for instance, `x' for X windows.
      The value is nil if the selected frame is on a text-only-terminal.
      

      因此,您可以将当前主题包装在

      中
      (if window-system
          ;; current theme configuration
      )
      

      然后当在一个 xterm 中时,创建一个你喜欢的新的,并将它放在 else 中(或另一个 if 语句,或 unless 和 when)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多