我如何要求 Emacs 根据缓冲区的模式自动使用不同的颜色主题(例如使用 Elisp ColorTheme包)?
一些颜色主题在编辑代码时效果很好,但在 Dired+、TERM 或 shell 模式下效果不佳。
谢谢
似乎不能为不同的缓冲区设置单独的颜色主题,但可以为不同的帧设置。您可以在此处找到设置每帧颜色主题的说明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)))
该包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
我正在使用 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+ 版本完美配合。
您可以使用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
.
过去我在终端中遇到过同样的问题,即不可读的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
了解详情 。
这并不能完全回答这个问题——我不知道是否可以使用每个缓冲区或每个模式的颜色主题——但它可能有助于解决根本问题。