【问题标题】:in GNU Emacs, how to set background color by mode?在 GNU Emacs 中,如何按模式设置背景颜色?
【发布时间】:2014-06-02 06:56:13
【问题描述】:

在 GNU Emacs 中,我看到我可以在不同的模式下为前景类型设置不同的面,例如:

(custom-set-faces
 '(message-header-to ((t (:foreground "LightGoldenrod1" :weight bold)))))

如何设置逐帧模式的背景颜色?这样,例如,组织模式背景将采用颜色主题定义的任何内容,但消息模式背景将是黑色的?

类似这样的东西,除了以下不起作用:

(custom-set-faces
 '(message-mode-frame ((t (:background "black")))))

【问题讨论】:

  • 澄清一下:您是要更改文本的背景还是整个框架的背景?如果是前者,您可能只需在第一个示例中添加 :background 关键字。如果是后者,据我所知,您必须设置 frame 的 背景,这与设置窗口的背景不同。
  • 整帧,即消息模式的整个背景。
  • 使用buffer-face-mode,您可以制作一个不同于其他缓冲区的缓冲区。当你设置一个框架背景时,它会影响框架中的所有缓冲区。
  • 非常酷。实际上,请查看以下问题的主题,看起来它有一些适合您的答案:stackoverflow.com/questions/1516830/…

标签: emacs


【解决方案1】:

这是一个按帧执行的快速示例 - 即它将影响帧中的每个缓冲区:

(add-hook 'post-command-hook 'change-my-background-color)

(add-hook 'change-major-mode-hook 'change-my-background-color)

(add-hook 'window-configuration-change-hook 'change-my-background-color)

(defun change-my-background-color ()
  (cond
    ((eq major-mode 'org-mode)
      (set-background-color "honeydew"))
    ((eq major-mode 'text-mode)
      (set-background-color "blue"))
    (t
      (set-background-color "red"))))

还有,这里是一个改变缓冲区颜色的例子:

(defun buffer-background-red ()
(interactive)
  (setq buffer-face-mode-face `(:background "red"))
  (buffer-face-mode 1))

目前不可能在窗口基础上进行;但是,这里有一个链接可以更改活动窗口的模式行颜色。

https://stackoverflow.com/a/20936397/2112489

【讨论】:

    【解决方案2】:

    "整个帧,即消息模式的整个背景"

    这句话让我觉得作者在 Emacs 中混淆了 frame and window。每个框架可以包含多个窗口。而 *-mode 可以引用each buffer,即window。 因此,如果您想为每个 buffer 设置背景颜色按模式(但不是帧),那么最好使用模式挂钩like here

    【讨论】:

      猜你喜欢
      • 2011-03-06
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 2010-12-11
      • 2016-07-15
      • 1970-01-01
      相关资源
      最近更新 更多