无法将颜色主题应用于Emacs中的一个帧?

无法将颜色主题应用于Emacs中的一个帧?,emacs,themes,customization,Emacs,Themes,Customization,我的.emacs文件是。我希望在shell模式下更改主题。但实际情况是,该主题应用于所有窗口。我将变量颜色主题设置为global为nil,但问题仍然存在 (add-hook 'shell-mode-hook 'color-theme-monokai-terminal) (set-variable 'color-theme-is-global nil) 这些是我的.emacs文件中的对应行。我应该怎么做才能让它工作?我通常将Emacs作为守护进程启动,然后根据需要打开框架。我对X帧和终端帧使用不

我的
.emacs
文件是。我希望在
shell模式下更改主题。但实际情况是,该主题应用于所有窗口。我将变量
颜色主题设置为global
nil
,但问题仍然存在

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

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

我通常将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)
您可以将
(如果窗口系统…
部分替换为shell脚本模式检查,将color-theme-X部分替换为您喜爱的主题


这样做有一个缺点:如果不将Emacs作为deamon启动,那么定制只会在创建第二帧后启动,第一个弹出的窗口将具有标准主题。

我认为您的术语不适用:在emacs中,框架的意思是人们在图形环境中通常所说的窗口的意思。(也就是说,具有关闭、最小化和最大化按钮以及标题栏等的东西是“框架”。)而当您执行
C-x 3
(拆分窗口)时显示的东西称为
windows
,当您执行类似
M-x shell模式的操作时,您将获得一个新的
缓冲区
,可能在新窗口中,也可能不在新窗口中

颜色主题始终是框架全局的(据我所知,文档中肯定是这样建议的)变量
Color theme is global
确定单个主题是否跨框架传播

我认为最接近你想要的东西是(完全未经测试,可能已损坏):


虽然这确实创建了一个新的框架,但这不是您想要的。

我不确定我是否理解这个场景。是否要为仅运行shell模式的帧设置不同的主题?仅运行shell模式。这就是我添加钩子的原因。问题是,我无法在创建框架时检查其模式。我本可以早一点制作一个框架,现在正在打开它的shell模式。我的术语不正确。我现在已经编辑过了。因此,一个窗口不可能有一个与其他窗口不同的主题?我从未尝试过,但我想这将是相当困难的,而且可能是不可能的。您需要设置很多变量,并且需要将所有变量都设置为本地缓冲区。其中一些可能在C源代码中,不能进行缓冲区本地化。但我只是在猜测。根据我的经验,尽管大多数模式都提供了足够多的特定于模式的面。(尝试在shell模式激活的情况下显示M-x列表面,并查找comint-*面,这是[我非常确定]shell模式使用的。)我想这相当困难。谢谢你让我提出正确的问题。按照您的建议,我可以部分更改shell模式缓冲区,但不能完全更改。是的,完全正确。从概念上讲,每个重要的面(我以前没有说过,但“面”是emacs表示“文本颜色”的方式)都可以被设置为缓冲区本地,在这种情况下,只需要做一些事情(添加钩子的外壳模式钩子(lambda()(setq(make local variable background color)“new color”)(setq(make local variable)“其他东西”)“新颜色”))用于你关心的每一张脸。你知道,这很枯燥,但也是可能的。也许可以尝试一次为你关心的一张或两张脸这样做,将它们设置为你想要的颜色主题中的值?
(defun shell-mode-in-new-frame ()
    (interactive)
    (select-frame (make-frame))
    (color-theme-monokai-terminal)
    (shell-mode))