我想覆盖一些基本功能,让我们说保存缓冲区(即使它没有意义,它是为了清晰起见),并给它一个新的定义。但我希望通过添加C-u来调用所有原始行为。
所以,
C-x C-s成为我对保存缓冲区的新定义。
C-u C-x C-s会调用原来的C-x C-s(不带参数)
C-u C-u C-x C-s与使用 1调用原始C-x C-s相同 C-u
依此类推:总是“少一点”C-u ...
现在,我测试了arg的值。如果没有,我执行我的新定义;否则,我调用 - 交互式保存缓冲区(例如)。但是,然后,使用一个C-u参数调用save-buffer。我不知道如何做“-1”C-u部分。
答案 0 :(得分:5)
这是一种方法:
(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)
现在普通baz
会致电bar
。使用 C-u
它会调用foo
,将给定的arg除以4。