如何用"少一个"铜调用原始功能?

fni*_*sen 2 lisp emacs elisp

我想覆盖一些基本功能,让我们说保存缓冲区(即使它没有意义,它是为了清晰起见),并给它一个新的定义.但是我希望通过添加Cu来调用所有原始行为.

所以,

  • Cx Cs成为我对保存缓冲区的新定义.

  • Cu Cx Cs将调用原始的Cx Cs(无参数)

  • Cu Cu Cx Cs与使用一个 Cu 调用原始Cx Cs相同

等等:总是"少一点"Cu ...

现在,我测试了arg的值.如果没有,我执行我的新定义; 否则,我调用 - 交互式保存缓冲区(例如).但是,然后,使用一个Cu参数调用save-buffer.我不知道如何做"-1"铜部分.

abo*_*abo 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)
Run Code Online (Sandbox Code Playgroud)

现在一个普通人baz会打电话bar.随着C-u 它会调用foo,将给定的arg除以4.