Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs Lisp定义了一个函数,其中嵌入了after make frame函数_Emacs_Themes - Fatal编程技术网

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