2

我想重写一些基本功能,比如说保存缓冲区(即使它没有意义,也是为了清楚起见),并给它一个新的定义。但我希望通过添加 Cu 来调用所有原始行为。

所以,

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

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

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

等等:总是“少一个”Cu ...

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

4

1 回答 1

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会打电话barC-u 它将调用,foo将给定的 arg 除以 4。

于 2013-10-12T20:06:14.777 回答