14

我如何要求 Emacs 根据缓冲区的模式自动使用不同的颜色主题(例如使用 Elisp ColorTheme

一些颜色主题在编辑代码时效果很好,但在 Dired+、TERM 或 shell 模式下效果不佳。

谢谢

4

5 回答 5

13

似乎不能为不同的缓冲区设置单独的颜色主题,但可以为不同的帧设置。您可以在此处找到设置每帧颜色主题的说明http://www.emacswiki.org/emacs/ColorTheme#toc8

您可以使用加载挂钩在加载模式时自动更改颜色主题,但它会将更改应用于所有缓冲区。

您可以在使用加载挂钩加载模式时更改颜色主题。例如

(add-hook 'dired-mode-hook 'color-theme-emacs-nw)

编辑:这是一个使用不同颜色主题在新框架中打开外壳的函数:

(defun my-shell () 
       (interactive)
         (let ((color-theme-is-global nil))
          (select-frame (make-frame))
          (color-theme-gnome)
                         (shell)))
于 2011-01-02T07:58:48.290 回答
7

该包load-theme-buffer-local(或者color-theme-buffer-local.el如果您使用 pre emacs 24 主题)可以为每个缓冲区设置不同的面。你的背景保持不变。

您可以像这样对其进行模式挂钩:
(add-hook 'js2-mode-hook (lambda nil (load-theme-buffer-local 'tango (current-buffer))))

这些软件包在MELPA ( M-x install-package RET load-theme-buffer-local) 上可用,源代码和自述文件在 github

于 2013-12-11T02:52:32.530 回答
4

我正在使用 zenburn 颜色和

(setq font-lock-maximum-decoration (quote ((dired-mode . nil) (t . t))))

对我不起作用,但是,

(setq font-lock-maximum-decoration (quote ((dired-mode) (t . t))))

与 2011/01/04 发布的 dired+ 版本完美配合。

于 2011-01-13T07:19:35.410 回答
4

您可以使用per-buffer-theme.el. 这是我的配置:

(require 'per-buffer-theme)
(setq per-buffer-theme/use-timer t)
(setq per-buffer-theme/timer-idle-delay 0.1)
(setq per-buffer-theme/default-theme 'notheme)
(setq per-buffer-theme/themes-alist
      '(((:theme . dichromacy)
         (:buffernames nil)
         (:modes ess-mode inferior-ess-mode
                 python-mode inferior-python-mode))
        ((:theme . solarized)
         (:buffernames nil)
         (:modes tex-mode plain-tex-mode TeX-special-mode latex-mode bibtex-mode))))
(setq per-buffer-theme/ignored-buffernames-regex
      (append ido-ignore-buffers '("*info*" "*Warnings*") ; ‘ido-ignore-buffers’ contains *Completions*, *Help* and so on.
              per-buffer-theme/ignored-buffernames-regex))
(per-buffer-theme-mode)

对于您要使用的每个主题,per-buffer-theme/themes-alist您可以在列表中指定模式和缓冲区名称以加载该主题。如果缓冲区名称和主模式的某种组合没有规则,per-buffer-theme将加载per-buffer-theme/default-theme.

于 2019-06-26T10:19:50.527 回答
1

过去我在终端中遇到过同样的问题,即不可读的dired缓冲区。作为一种解决方法,我做了 Mx customize-option font-lock-maximum-decoration; 您也可以直接在配置文件中设置变量,例如(setq font-lock-maximum-decoration (quote ((dired-mode . nil) (t . t)))). 这对 dired 使用默认装饰,对其他所有内容使用最大值(这是默认设置)。C-h v font-lock-maximum-decoration了解详情 。

这并不能完全回答这个问题——我不知道是否可以使用每个缓冲区或每个模式的颜色主题——但它可能有助于解决根本问题。

于 2010-12-26T01:36:00.600 回答