我想覆盖一些基本功能,让我们说保存缓冲区(即使它没有意义,它是为了清晰起见),并给它一个新的定义.但是我希望通过添加Cu来调用所有原始行为.
所以,
Cx Cs成为我对保存缓冲区的新定义.
Cu Cx Cs将调用原始的Cx Cs(无参数)
Cu Cu Cx Cs与使用一个 Cu 调用原始Cx Cs相同
等等:总是"少一点"Cu ...
现在,我测试了arg的值.如果没有,我执行我的新定义; 否则,我调用 - 交互式保存缓冲区(例如).但是,然后,使用一个Cu参数调用save-buffer.我不知道如何做"-1"铜部分.
这是一种方法:
(defun foo (arg)
(interactive "p")
(message "foo %s" arg))
(defun bar (arg)
(interactive "p")
(message "bar %s" arg))
(defmacro wrap (fg f g)
`(defun ,fg (arg)
(interactive "p")
(message "%s" arg)
(if (= 1 arg)
(funcall ,g 1)
(funcall ,f (/ arg 4)))))
(wrap baz #'foo #'bar)
Run Code Online (Sandbox Code Playgroud)
现在一个普通人baz
会打电话bar
.随着C-u
它会调用foo
,将给定的arg除以4.