我的.emacs
文件为here。当我在shell-mode
时,我希望主题能够改变。但是,所发生的是主题应用于所有窗口。我将变量color-theme-is-global
设置为nil
,但问题仍然存在。
(add-hook 'shell-mode-hook 'color-theme-monokai-terminal)
(set-variable 'color-theme-is-global nil)
这些是我.emacs
文件中的相应行。我该怎么做才能让它发挥作用?
答案 0 :(得分:4)
我通常将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作为守护程序,自定义只会在你创建第二个框架后启动,弹出的第一个框架将具有标准主题。
答案 1 :(得分:3)
我认为你的术语是关闭的:在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))
虽然这会创建一个新框架,但不是你想要的。