仅适用于GUI/终端emacs的设置
我正在尝试设置一个主题——一个只用于终端,一个只用于gui。 我读过这个帖子: 这让我来到这里: 并试图创建一个功能来满足我的需要仅适用于GUI/终端emacs的设置,emacs,elisp,Emacs,Elisp,我正在尝试设置一个主题——一个只用于终端,一个只用于gui。 我读过这个帖子: 这让我来到这里: 并试图创建一个功能来满足我的需要 (defun set-frame-theme (frame) (let ((want-theme (memq (framep frame) '(x w32 ns)))) (set-frame-parameter frame '(load-theme '(if want-theme monokai solarized-dark) t)))) (add-ho
(defun set-frame-theme (frame)
(let ((want-theme (memq (framep frame) '(x w32 ns))))
(set-frame-parameter frame '(load-theme '(if want-theme monokai solarized-dark) t))))
(add-hook 'after-make-frame-functions 'set-frame-theme)
它不起作用。
我试着让他只加载monokai如果gui,否则加载solarized dark。
它确实适用于GUI界面,但会导致终端看起来崩溃
建议?似乎是主题本身的一个问题——不多也不少。嗯。emacs lisp函数, (display-graphic-p) 如果emacs在GUI中运行,将返回true 在.emacs中,添加以下内容以在GUI和终端主题之间切换
(if (display-graphic-p)
(load-GUI-theme)
(load-Terminal-theme))
为了便于配置,我有一个简单的函数叫做is in terminal
(defun is-in-terminal()
(not (display-graphic-p)))
您可以使用它来编写一个更易于阅读的函数
(if (is-in-terminal)
(load-Terminal-theme)
(load-GUI-theme))
对于仅终端配置的更完整方法,我有一个宏,它的工作方式与progn
类似,但仅在Emacs运行时在没有GUI的情况下计算主体
(defmacro when-term (&rest body)
"Works just like `progn' but will only evaluate expressions in VAR when Emacs is running in a terminal else just nil."
`(when (is-in-terminal) ,@body))
用法示例:
(when-term
(load-my-term-theme)
(set-some-keybindings)
(foo-bar))
如果在GUI中运行,则整个块将被完全忽略,但如果在终端中运行,则整个块将被忽略
所有这些代码都取自my config中的一个文件,如果您感兴趣,可以在此处查看:
在选择颜色主题时,在终端模式下运行时,我也遇到了emacs崩溃的问题。 我想说这不是颜色主题的问题,而是emacs本身的问题。 在撰写本文时,从HEAD更新到最新版本确实对我有用。如中所述
“如果您想为不同的显示器使用不同的颜色方案,您也可以自定义。在自定义缓冲区中,单击[State]按钮并选择“显示所有显示器规格”。现在您可以为不同的显示器使用不同的规格。”我可以通过以下方法解决此问题:
(if (display-graphic-p) (load-theme 'solarized-dark t))
最后一个t
是覆盖主题选择中的确认提示
更多。比我预期的要好。谢谢我试过了,emacs抛出了一个错误,说“Symbol的函数定义无效:display-graphics-p”。我该怎么办?我用的是Emacs24。哎呀,打字错误!它应该是(display-graphic-p)而不是(display-graphicS-p)