Emacs lisp,“交互式”如何读取缓冲区?
Emacs lisp, How `interactive' reads buffer?
例如有一个函数:
(defun testb (buf)
(interactive "bTest: ")
buf)
问题是 emacs 如何在内部读取这种交互形式的缓冲区?
看起来它不使用 read-buffer
(或者它调用 read-buffer
作为 C 函数(并且不查看符号函数)?)。
(flet ((read-buffer (&rest args) (current-buffer)))
(call-interactively #'testb))
它使用了 Lisp 函数 read-buffer
。您显示的 interactive
规范等同于此规范:
(interactive (list (read-buffer "Test: " nil t)))
参见 Elisp 手册,节点 Using Interactive。
我猜你指的是当你尝试在内置函数上使用 flet
时遇到的错误或类似错误。是的,read-buffer
是一个 subr,即在 C 中实现。(symbol-function 'read-buffer)
returns 内置函数 #<subr read-buffer>
.
Use ‘labels’, not ‘flet’, to rebind macro names
例如有一个函数:
(defun testb (buf)
(interactive "bTest: ")
buf)
问题是 emacs 如何在内部读取这种交互形式的缓冲区?
看起来它不使用 read-buffer
(或者它调用 read-buffer
作为 C 函数(并且不查看符号函数)?)。
(flet ((read-buffer (&rest args) (current-buffer)))
(call-interactively #'testb))
它使用了 Lisp 函数 read-buffer
。您显示的 interactive
规范等同于此规范:
(interactive (list (read-buffer "Test: " nil t)))
参见 Elisp 手册,节点 Using Interactive。
我猜你指的是当你尝试在内置函数上使用 flet
时遇到的错误或类似错误。是的,read-buffer
是一个 subr,即在 C 中实现。(symbol-function 'read-buffer)
returns 内置函数 #<subr read-buffer>
.
Use ‘labels’, not ‘flet’, to rebind macro names