Emacs Lisp定义了一个嵌入了后制作帧功能的函数

时间:2018-03-27 14:17:13

标签: emacs themes

我可以将以下代码包装到函数中(例如,import QtQuick 2.0 import QtTest 1.0 TestCase { name: "MainMenu" Loader { id: main_loader source: "qrc:/qml/main.qml" } function test_on_off(){ wait(3000); } } ) 主题名称作为输入参数(您可以包含更多内容,例如my-load-theme if 必要)?也就是说,我可以使用frame来 等效运行以下代码。如何定义这样的功能?一世 因(my-load-theme 'solarized)功能所需的lambda函数中load-theme的嵌入而陷入困境。

期待elisp大师们!非常感谢!

after-make-frame-functions

感谢 Stefan 和来自https://emacs-china.org/t/topic/5387的评论,以下是两个解决方案:

使用词汇绑定

(add-hook 'after-make-frame-functions
    (lambda (frame)
      (select-frame frame)
      (when (display-graphic-p frame)
        (load-theme 'solarized 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-theme 'solarized)放在.el文件的顶行)

使用动态绑定

;; -*- 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-theme '(quote solarized))相同的方式调用该函数,请将函数定义中的行(my-load-theme 'solarized)替换为(load-theme ,theme t)

1 个答案:

答案 0 :(得分:2)

是的,当然,你可以这样做:

;; -*- 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-them 'solarized)并设置after-make-frame-functions,以便在创建每个下一帧后加载solarized。就个人而言,我会改进代码,以避免一遍又一遍地加载相同的主题(如果你不使用太多帧,你可能不会注意到它,但我确实如此)。