Emacs Lisp定义了一个函数,其中嵌入了after make frame函数
我是否可以使用将以下代码包装到函数中(例如,Emacs Lisp定义了一个函数,其中嵌入了after make frame函数,emacs,themes,Emacs,Themes,我是否可以使用将以下代码包装到函数中(例如,我的加载主题) 一个主题名作为输入参数(您可以包括更多,例如,frameif 必要吗?也就是说,我可以使用(我的加载主题'solarized)来 等效地运行以下代码。如何定义这样一个函数?我 由于在make frame functions函数后的所需的lambda函数中嵌入了加载主题而被卡住 期待elisp大师!非常感谢 (add-hook 'after-make-frame-functions (lambda (frame) (s
我的加载主题
)
一个主题名作为输入参数(您可以包括更多,例如,frame
if
必要吗?也就是说,我可以使用(我的加载主题'solarized)
来
等效地运行以下代码。如何定义这样一个函数?我
由于在make frame functions函数后的所需的lambda函数中嵌入了加载主题
而被卡住
期待elisp大师!非常感谢
(add-hook 'after-make-frame-functions
(lambda (frame)
(select-frame frame)
(when (display-graphic-p frame)
(load-theme 'solarized t))))
感谢Stefan和来自的评论,这里有两种解决方案:
使用词汇绑定
调用函数时:(我的加载主题“solarized”)
(注意:将;;-*-词法绑定:t-*-
放在.el文件的顶行)
使用动态绑定
调用函数时:(我的加载主题(quote solarized))
如果要以与调用函数相同的方式调用函数(my load theme'solarized)
,请将函数定义中的行(load theme,theme t)
替换为(load theme,theme t)
是的,当然可以执行以下操作:
;; -*- lexical-binding:t -*-
(defun my-load-theme (theme)
(add-hook 'after-make-frame-functions
(lambda (frame)
(select-frame frame)
(when (display-graphic-p frame)
(load-theme theme t)))))
之后,您可以执行
(my load Thes'solarized)
,并在生成帧函数后设置,以便在创建下一帧后加载solarized
。就我个人而言,我会改进代码,以避免反复加载同一主题(如果不使用太多的帧,您可能不会注意到,但我会注意到)。哦,我看到了这个选项,但没有测试;-*-词法绑定:t-*-
。(我以前没有选择它,因为我不知道这个词法语句的功能范围:只有这个.el文件或任何include/require this.el)让我试试。还有另一种使用“`”和“,”的方法,称为注入或其他方法,应该是等效的,但不起作用:(我的意思是,coredump给出的第二种解决方案,在中。我尝试了,但失败了(我在之前添加`
(lambda
和,
,在主题的左侧,在最后一行).t-*-
需要位于文件的第一行,它会影响文件中的所有代码,但不会对其他文件中的其他代码施加任何要求。至于其他选项,它可以工作,但您需要在主题
前面添加,
,而不仅仅是,
。
(defun my-load-theme (theme)
(add-hook 'after-make-frame-functions
`(lambda (frame)
(select-frame frame)
(when (display-graphic-p frame)
(load-theme ,theme t)))))
;; -*- lexical-binding:t -*-
(defun my-load-theme (theme)
(add-hook 'after-make-frame-functions
(lambda (frame)
(select-frame frame)
(when (display-graphic-p frame)
(load-theme theme t)))))