仅适用于GUI/终端emacs的设置

仅适用于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

我正在尝试设置一个主题——一个只用于终端,一个只用于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-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)