6

我正在尝试设置一个主题 - 一个仅用于终端,一个仅用于 gui。我读过这个帖子:Run certain Emacs init commands only in GUI mode

这导致我来到这里:https ://superuser.com/questions/165335/how-can-i-show-the-emacs-menu-in-gui-emacs-frames-but-not-in-tty-frames-when -usi

并尝试创建一个适合我需要的功能。

(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)

它不起作用。我正在尝试让他仅在 gui 时加载 monokai,否则加载 solarized-dark。它确实适用于 GUI 界面,但会导致终端看似崩溃。

建议?

4

5 回答 5

12

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))

对于仅终端配置的更完整方法,我有一个宏,它的工作方式与 Emacs 在没有 GUI 的情况下运行时一样progn但仅评估主体

(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 中运行,这整个块将被完全忽略,但如果在终端中运行,则会运行。

所有这些代码都是从我的配置文件中获取的,如果有兴趣,可以在这里查看:

https://github.com/jordonbiondo/Emacs/blob/master/Jorbi/jorbi-util.el

于 2013-04-12T03:28:04.433 回答
1

我可以解决这个问题:

(if (display-graphic-p) (load-theme 'solarized-dark t))

最后t是覆盖主题选择中的确认提示。

更多在这里

于 2018-08-16T06:21:53.857 回答
0

似乎是主题本身的问题 - 不多也不少。嗯。

于 2013-04-11T21:19:27.450 回答
0

在选择颜色主题时在终端模式下运行时,我也遇到了 emacs 崩溃的问题。我想说这不是颜色主题的问题,而是emacs本身的问题。在撰写本文时,从 HEAD 更新到最新版本确实对我有用。

于 2014-08-10T14:52:01.060 回答
0

https://www.emacswiki.org/emacs/CustomizingFaces所述

“如果你想为不同的显示器使用不同的配色方案,你也可以自定义它。在自定义缓冲区中,单击[状态]按钮并选择“显示所有显示器规格”。现在你可以为不同的显示器使用不同的规格。”

于 2017-07-04T17:37:15.520 回答