假设我将函数(foo)
定义为(defun foo () (read-from-minibuffer "What? "))
。我无法更改定义,但我想将其包装在宏或其他函数周围,以避免必须手动赋予任何值。
不幸的是,以下解决方案不起作用,因为(exit-minibuffer)
仅在离开迷你缓冲区后被调用,所以我想知道你是否知道某事。
(defmacro return-an-empty-string (&rest code) `(progn ,@code (exit-minibuffer))) (defun return-an-empty-string (function) (funcall function) (exit-minibuffer))
谢谢!
答案 0 :(得分:3)
您可以暂时将read-from-minibuffer
变为无效功能:
(require 'cl)
(defmacro preempt-minibuffer (&rest body)
`(flet ((read-from-minibuffer (&rest ignore)))
,@body))
答案 1 :(得分:0)
如果您可以访问功能源,您可以随时创建自己的功能,它将执行几乎相同的操作并将其替换为原始功能。
假设您在文件foo
foo.el
(defun foo ()
...)
现在您可以添加到.emacs
(eval-after-load "foo"
'(progn
(defun foo+ ()
...)
(fset 'foo 'foo+)))
如果尚未加载foo.el
,则foo+
将替换原始foo
。