Различные цветные темы для каждого режима в Emacs
Как я могу попросить Emacs автоматически использовать другую цветную тему (например, используя пакет Elisp ColorTheme) в зависимости от режима буфера ?
Некоторые цветовые темы отлично работают при редактировании кода, но не в режиме Dired +, TERM или shell.
Спасибо
Ответы
Ответ 1
Кажется, что вы не можете установить отдельные цветовые темы для разных буферов, но вы можете установить его для разных фреймов. Инструкции по настройке цветовых тем в кадре можно найти здесь http://www.emacswiki.org/emacs/ColorTheme#toc8.
Вы можете использовать load-hook для автоматического изменения цветовой темы при загрузке режима, но она применит изменение ко всем буферам.
Вы можете изменить цветную тему, когда режим загружается с использованием крючка загрузки. например.
(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)))
Ответ 2
Пакет 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
), source и readme для github
Ответ 3
Я использую цвета zenburn и
(setq font-lock-maximum-decoration (quote ((dired-mode . nil) (t . t))))
не работал для меня, но
(setq font-lock-maximum-decoration (quote ((dired-mode) (t . t))))
отлично работает с версией dired +, выпущенной в 2011/01/04.
Ответ 4
Я столкнулся с той же проблемой в прошлом с нечитаемыми перезагруженными буферами в терминале. В качестве обходного пути я сделал M-x 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
.
Это точно не отвечает на вопрос - я не знаю, можно ли использовать цветные темы в каждом буфере или в режиме, но это может помочь решить основную проблему.
Ответ 5
Вы можете использовать per-buffer-theme.el
. Это моя конфигурация:
(require 'per-buffer-theme)
(setq per-buffer-theme/use-timer nil) ; Set it to t if the window flickers.
(setq per-buffer-theme/default-theme 'notheme)
(setq per-buffer-theme/ignored-buffernames-regex
(append '("*anaconda-mode*" "*Backtrace*" "*Buffer List*" "*compilation*" "*Compile-Log*" "*Completions*" "*ESS*" "*Flymake log*" "*Help*" "*Ibuffer" "*info*" "*Messages*" "*Warnings*")
per-buffer-theme/ignored-buffernames-regex))
(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 latex-mode))))
(per-buffer-theme/enable)
Для каждой темы, которую вы хотите использовать, в списке per-buffer-theme/themes-alist
вы можете указать режимы и имена буферов для загрузки этой темы. Если для определенной комбинации имени буфера и основного режима нет правил, per-buffer-theme
загрузит per-buffer-theme/default-theme
.