Не можете применить цветовую тему к одному кадру в Emacs? - PullRequest
3 голосов
/ 14 июня 2010

Мой .emacs файл здесь .Я хочу, чтобы тема менялась, когда я в shell-mode.Но происходит то, что тема применяется ко всем окнам.Я установил переменную color-theme-is-global на nil, но проблема все еще сохраняется.

(add-hook 'shell-mode-hook 'color-theme-monokai-terminal)
(set-variable 'color-theme-is-global nil)

Это соответствующие строки в моем файле .emacs.Что я должен сделать, чтобы это работало?

Ответы [ 2 ]

4 голосов
/ 14 июня 2010

Я обычно запускаю Emacs как демон и затем открываю фреймы по мере необходимости.Я использую разные цветовые темы для фреймов X и терминальных фреймов, например:

(require 'color-theme)
(color-theme-initialize)

(defun apply-color-theme (frame)
  "Apply color theme to a frame based on whether its a 'real'
   window or a console window."
  (select-frame frame)
  (if (window-system frame)
      (color-theme-tango)
    (color-theme-tango-black)))

(setq color-theme-is-global nil)
(add-hook 'after-make-frame-functions 'apply-color-theme)

Вы можете заменить часть (if window-system ...) проверкой на наличие режима shell-script-mode и частей color-theme-X налюбимые темы.

У этого есть один недостаток: если вы не запустите Emacs как демон, настройка вступит в силу только после того, как вы создадите второй кадр, первый всплывающий будет иметь стандартныйтема.

3 голосов
/ 14 июня 2010

Я думаю, что ваша терминология неверна: в emacs-языке frame означает то, что люди обычно подразумевают под window в графической среде.(То есть то, что имеет кнопки закрытия, минимизации и максимизации, заголовок и т. Д., Является «рамкой».) В то время как то, что появляется, когда вы делаете C-x 3 (разделенное окно), называется windows и когда вы делаете что-то вроде M-x shell-mode, вы получаете новый buffer, который может или не может быть в новом окне.

Цветовые темы всегда глобально для фреймов (насколько я знаю,и это, безусловно, то, что предлагает документация) переменная color-theme-is-global определяет, распространяется ли одна тема по кадрам .

Я думаю, что самое близкое к тому, что вы хотите, - это нечто вродеполностью непроверенный, вероятно, не работает):

(defun shell-mode-in-new-frame ()
    (interactive)
    (select-frame (make-frame))
    (color-theme-monokai-terminal)
    (shell-mode))

Хотя это создает новый фрейм, который не , что вы хотите.

...