2013-09-27 115 views
10

我希望emacs在终端中打开框架时不会有背景色。我使用的是具有半透明背景的终端,具有背景色的字符不是“透明”的。 TERM设置为“xterm-256color”。Emacs:禁用终端中的主题背景颜色

当框架不是图形时,如何让emacs使用默认的背景颜色(根本没有颜色)?

编辑: 我知道了,排序的:

(add-to-list 'custom-theme-load-path "~/.emacs.d/themes") 
(load-theme 'my-awesome-theme t) 

(defun on-frame-open (frame) 
    (if (not (display-graphic-p frame)) 
    (set-face-background 'default "unspecified-bg" frame))) 
(on-frame-open (selected-frame)) 
(add-hook 'after-make-frame-functions 'on-frame-open) 

我把上面的代码在我的init文件,但只有在终端打开一个emacsclient时抑制的背景下,而不是emacs本身(即,仅在调用emacsclient -t时调用,而不调用emacs时调用)。增加一个额外的(unless window-system (set-face-background 'default "unspecified-bg" (selected-frame)))不起作用,只会混淆图形帧。

关于为什么会发生这种情况的任何想法?

回答

16
(defun on-after-init() 
    (unless (display-graphic-p (selected-frame)) 
    (set-face-background 'default "unspecified-bg" (selected-frame)))) 

(add-hook 'window-setup-hook 'on-after-init) 

结合编辑中的代码,它对emacsterms和新启动的emacsen都非常适合我。至于为什么window-setup-hookhttp://www.gnu.org/software/emacs/manual/html_node/elisp/Startup-Summary.html

(无论是早期的挂钩似乎除了这一项工作)

+0

谢谢,这完美的伎俩。 –

+0

太棒了! iTerm2 + Emacs 24 + Base 16主题对我来说非常合适。 –

+0

伟大的小动作。我用它仅将wombat主题应用于终端Emacs,而不是窗口版本,它看起来不太好。 –

2

我想这是在this answer建议的方法,但我没有运气得到它的工作。这个片段对我的作品虽然

(defun on-frame-open (&optional frame) 
    "If the FRAME created in terminal don't load background color." 
    (unless (display-graphic-p frame) 
    (set-face-background 'default "unspecified-bg" frame))) 

(add-hook 'after-make-frame-functions 'on-frame-open) 

虽然有挫折,如果终端有比我用(暗与轻),正在使用的默认主题脸上的主题可能似乎并不好不同的背景设置在明亮或黑暗的背景上。但在我的情况下,这两个终端和主题是黑暗的,它工作正常。

+1

这对我有效,而接受的没有。 – terje