2010-06-14 22 views
3

我的.emacs文件是here。当我在shell-mode时,我想要改变主题。但是会发生什么呢是主题适用于所有的窗口。我将变量color-theme-is-global设置为nil,但问题仍然存在。无法将颜色主题应用于Emacs中的一个框架?

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

这些是我的.emacs文件中的相应行。我应该怎么做才能使它工作?

+0

我不确定我是否理解该场景。你是否想要一个只运行shell模式的框架的不同主题? – lmichelbacher 2010-06-14 09:27:50

+0

仅限shell模式。这就是为什么我添加了钩子。 – prtksxna 2010-06-14 11:43:01

回答

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脚本模式,并与喜爱的主题颜色主题-X部分。

这样做有一个缺点:如果你没有启动Emacs作为deamon,那么只有在你创建第二个框架后,第一个弹出的标准主题才会自定义。

+0

问题在于,我无法在创建帧时检查帧的模式。我可以提前制作一个框架,现在我正在打开shell模式。 – prtksxna 2010-06-14 14:25:39

3

我认为你的术语是关闭的:在emacs-speak 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)) 

虽然这并创建一个新的框架,这不是你想。

+0

我的术语不正确。我现在编辑它。所以窗户不可能有与其他窗户不同的主题吗? – prtksxna 2010-06-14 19:55:28

+0

我从来没有尝试过,但我会想象它会相当困难,并且可能不可能。你需要设置很多变量,你需要将它们全部设置为本地缓冲区。其中一些可能在C源代码中,而不是缓冲区本地化的。但我只是在那里猜测。根据我的经验,尽管大多数模式都提供了足够的模式特定面。 (尝试使用shell模式激活的M-x list-faces-display,并查找[我很确定] shell模式使用的comint- * faces。) – quodlibetor 2010-06-14 21:51:50

+0

我想这很困难。谢谢你让我问正确的问题。你建议的方式,我将能够部分改变shell模式缓冲区,但不完全。 – prtksxna 2010-06-14 22:52:09