emacs – 从宏创建自动加载的功能
发布时间:2020-12-13 17:01:07 所属栏目:PHP教程 来源:网络整理
导读:如何从宏功能工厂创建自动加载功能?例如,假设我有一个宏来创建对齐函数,如下所示,但我希望能够指定一个选项,以便扩展的宏具有自动加载cookie. (defmacro align-by (name doc regex) "Alignment function factory." (declare (indent 1)) (let ((fn (intern
如何从宏功能工厂创建自动加载功能?例如,假设我有一个宏来创建对齐函数,如下所示,但我希望能够指定一个选项,以便扩展的宏具有自动加载cookie.
(defmacro align-by (name doc regex) "Alignment function factory." (declare (indent 1)) (let ((fn (intern name))) `(defun,fn (start end),doc (interactive "r") (align-regexp start end,regex)))) (align-by "align-backslash" "Align backslashes at end of line in region." "(s-*)\$") 我知道我可以写这个,但是我可以避免为每个函数编写这个吗? ;;;###autoload (autoload 'align-backslash "this-file") 解决方法
目前尚不清楚宏将在哪里获取要自动加载的文件的名称 – 您目前没有将文件名传递给宏.
假设文件名来自扩展宏时正在访问的文件,这将执行以下操作: (defmacro align-by (name doc regex) "Alignment function factory." (declare (indent 1)) (let ((fn (intern name))) `(progn,(and (buffer-file-name) `(autoload ',name,(buffer-file-name))) (defun,doc (interactive "r") (align-regexp start end,regex))))) 测试: (macroexpand '(align-by "align-backslash" "Align backslashes at end of line in region." "(s-*)\$")) C-u C-x C-e显示当前缓冲区未访问文件时给出: (progn (autoload '"align-backslash" nil) (defun align-backslash (start end) "Align backslashes at end of line in region." (interactive "r") (align-regexp start end "(s-*)\$"))) 当缓冲区访问文件foo.el时,它会给出这个,其中“… / foo.el”实际上是foo.el的绝对文件名: (progn (autoload '"align-backslash" ".../foo.el") (defun align-backslash (start end) "Align backslashes at end of line in region." (interactive "r") (align-regexp start end "(s-*)\$"))) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |