Различные цветные темы для каждого режима в 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.