我正在尝试设置一个主题 - 一个仅用于终端,一个仅用于gui.我已经读过这个帖子:只在GUI模式下运行某些Emacs init命令
这导致我在这里: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)
Run Code Online (Sandbox Code Playgroud)
它不起作用.我正在尝试他加载monokai只有gui,否则加载solarized-dark.它确实适用于GUI界面,但会导致终端看起来崩溃.
建议?
Jor*_*ndo 11
emacs lisp函数,(display-graphic-p)如果emacs在GUI中运行,则返回true.
在.emacs中,添加以下内容以在GUI和终端主题之间切换
(if (display-graphic-p)
(load-GUI-theme)
(load-Terminal-theme))
Run Code Online (Sandbox Code Playgroud)
为了便于配置,我有一个名为is-in-terminal的简单函数
(defun is-in-terminal()
(not (display-graphic-p)))
Run Code Online (Sandbox Code Playgroud)
你可以用它来编写一个更容易阅读的功能
(if (is-in-terminal)
(load-Terminal-theme)
(load-GUI-theme))
Run Code Online (Sandbox Code Playgroud)
对于更完整的终端配置方法,我有一个宏,它只是工作,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))
Run Code Online (Sandbox Code Playgroud)
用法示例:
(when-term
(load-my-term-theme)
(set-some-keybindings)
(foo-bar))
Run Code Online (Sandbox Code Playgroud)
如果在GUI中运行,则整个块将被完全忽略,但如果在终端中则将运行.
所有这些代码都是从我的配置文件中获取的,如果有兴趣,可以在这里查看:
https://github.com/jordonbiondo/Emacs/blob/master/Jorbi/jorbi-util.el
| 归档时间: |
|
| 查看次数: |
3210 次 |
| 最近记录: |