Emacs lisp,如何“交互式”读取缓冲区?

时间:2017-09-02 13:46:31

标签: emacs elisp

例如,有一个功能:

(defun testb (buf)
  (interactive "bTest: ")
  buf)

问题是emacs如何在内部为这种交互式表单读取缓冲区?

看起来它没有使用read-buffer(或者它将read-buffer称为C函数(并且不查看符号函数)?)。

(flet ((read-buffer (&rest args) (current-buffer)))
  (call-interactively #'testb))

1 个答案:

答案 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