【问题标题】:Settings only for GUI/Terminal emacs仅适用于 GUI/终端 emacs 的设置
【发布时间】:2013-04-11 20:39:31
【问题描述】:

我正在尝试设置一个主题 - 一个仅用于终端,一个仅用于 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 界面,但会导致终端看似崩溃。

建议?

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

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

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

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

    【讨论】:

    • 比我预期的要好。谢谢!
    • 我试过了,emacs报错,说“Symbol的函数定义无效:display-graphics-p”。我应该怎么办?我正在使用 Emacs 24。
    • 糟糕,错字!它应该是 (display-graphic-p) 而不是 (display-graphicS-p)
    【解决方案2】:

    我可以解决这个问题:

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

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

    更多here.

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          正如https://www.emacswiki.org/emacs/CustomizingFaces所提到的那样

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-10-27
            • 2011-11-28
            • 2021-06-02
            • 2018-12-03
            • 2012-04-20
            • 1970-01-01
            • 1970-01-01
            • 2013-08-23
            相关资源
            最近更新 更多