Any*_*orn 17 emacs macros elisp function
我写了一些几乎相同的函数,除了它们的名字.例如:
; x is name, such as function/paragraph/line/etc.
(defun my-x-function
(interactive)
(mark-x) (do-more-stuff) (modify-x))
Run Code Online (Sandbox Code Playgroud)
有没有办法自动生成这样的功能?我有一种感觉这是宏做的,但我不知道如何使用它们.任何帮助,也许包括一个小例子都会很棒.
谢谢!
Sea*_*ean 21
是的,这正是宏所做的.这是一个简单的宏,它根据您指定的模式构建函数:
(defmacro make-my-function (name)
(list 'defun (intern (format "my-%s-function" name)) ()
(list 'interactive)
(list (intern (format "mark-%s" name)))
(list 'do-more-stuff)
(list (intern (format "modify-%s" name)))))
Run Code Online (Sandbox Code Playgroud)
您可以将此宏复制到*scratch*Emacs中的缓冲区并对其进行评估,然后检查它是否像这样工作:
(make-my-function x) ; type control-J here
my-x-function ; <-- Emacs's output
(symbol-function 'my-x-function) ; type control-J here
(lambda nil (interactive) (mark-x) (do-more-stuff) (modify-x)) ; <-- Emacs's output
Run Code Online (Sandbox Code Playgroud)
更常见的是,可以使用反引用工具更简洁地编写宏,但是所有宏基本上以与上述示例相同的方式工作.