当我在终端中打开一个框架时,我想让emacs没有背景颜色。我正在使用具有半透明背景的终端,而具有背景颜色的字符不是“透视”。 TERM设置为“xterm-256color”。
当框架不是图形时,如何让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
时调用,而不是在使用{{1}调用时})。添加额外的emacs
不起作用,只会混淆图形框架。
关于为什么会发生这种情况的任何想法?
答案 0 :(得分:23)
(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-hook
:
http://www.gnu.org/software/emacs/manual/html_node/elisp/Startup-Summary.html
(早期的钩子似乎都没有用,除了这个。)
答案 1 :(得分:4)
我尝试了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)
虽然它有一个挫折,但如果终端的背景设置与我使用的主题不同(黑暗与光线相比),则会使用默认主题面部,这些面部在浅色或深色背景下可能看起来不太好。但在我的情况下,终端和主题都是黑暗的,它可以正常工作。
答案 2 :(得分:0)
此问题已经有两个答案:one使用window-setup-hook
(在启动时调用)和another使用after-make-frame-functions
(在新帧时调用)完成,包括调用emacsclient
之后。为了涵盖所有可能的情况,我发现我需要这样做:
(defun set-background-for-terminal (&optional frame)
(or frame (setq frame (selected-frame)))
"unsets the background color in terminal mode"
(unless (display-graphic-p frame)
(set-face-background 'default "unspecified-bg" frame)))
(add-hook 'after-make-frame-functions 'set-background-for-terminal)
(add-hook 'window-setup-hook 'set-background-for-terminal)
请注意,如有必要,我仅使用selected-frame
;似乎在客户端模式下,在选择框架之前会调用该挂钩,因此在这种情况下使用frame参数很重要。