例如,有一个功能:
(defun testb (buf)
(interactive "bTest: ")
buf)
问题是emacs如何在内部为这种交互式表单读取缓冲区?
看起来它没有使用read-buffer
(或者它将read-buffer
称为C函数(并且不查看符号函数)?)。
(flet ((read-buffer (&rest args) (current-buffer)))
(call-interactively #'testb))
答案 0 :(得分:1)
它使用Lisp函数read-buffer
。您显示的interactive
规范与此相同:
(interactive (list (read-buffer "Test: " nil t)))
请参阅Elisp手册,节点Using Interactive。
我猜你指的是你在尝试在内置函数上使用flet
时遇到此错误或类似错误的事实。是的,read-buffer
是一个subr,即在C中实现。(symbol-function 'read-buffer)
返回内置函数#<subr read-buffer>
。
Use ‘labels’, not ‘flet’, to rebind macro names