为需要迷你缓冲区的函数赋值

时间:2012-02-07 18:56:15

标签: emacs

假设我将函数(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))

谢谢!

2 个答案:

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