Emacs 为需要微型缓冲区的函数提供值

Emacs 为需要微型缓冲区的函数提供值,emacs,Emacs,假设我有一个函数(foo)定义为(defun foo()(从minibuffer“What?”)读取)。我无法更改定义,但我希望将其包装在宏或其他函数中,以避免手动给定任何值 不幸的是,以下解决方案不起作用,因为(exit minibuffer)只有在离开minibuffer后才被调用,所以我想知道您是否知道一些事情 (defmacro return-an-empty-string (&rest code) `(progn ,@code (exit-minibuffer))) (defun re

假设我有一个函数
(foo)
定义为
(defun foo()(从minibuffer“What?”)读取)
。我无法更改定义,但我希望将其包装在宏或其他函数中,以避免手动给定任何值

不幸的是,以下解决方案不起作用,因为
(exit minibuffer)
只有在离开minibuffer后才被调用,所以我想知道您是否知道一些事情

(defmacro return-an-empty-string (&rest code) `(progn ,@code (exit-minibuffer))) (defun return-an-empty-string (function) (funcall function) (exit-minibuffer)) (defmacro返回空字符串(&rest代码)`(progn,@code(exit minibuffer))) (defun返回空字符串(函数)(funcall函数)(退出迷你缓冲区))
谢谢

您可以将
从微型缓冲区读取
临时设置为不执行任何操作的功能:

(require 'cl)
(defmacro preempt-minibuffer (&rest body)
  `(flet ((read-from-minibuffer (&rest ignore)))
     ,@body))

如果您可以访问函数源,您可以随时制作自己的函数,该函数将执行几乎相同的操作,并用它替换原始函数

假设在文件
foo.el

(defun foo ()
   ...)
现在您可以添加到
.emacs

(eval-after-load "foo"
                 '(progn
                   (defun foo+ ()
                     ...)
                   (fset 'foo 'foo+)))

当加载
foo.el
时,如果尚未加载,您的
foo+
将替换原始
foo

你想干什么?如果您提供更多详细信息,可能会有人找到您潜在问题的直接解决方案。我最初的问题是函数
(slime compile and load file)
每次都要求我保存该文件,但没有变量覆盖该文件。我用Sean解决方案的一个变体来修复它:
(defun slime just do it()(交互式)(flet((y-or-n-p(&rest-ignore)t))(slime编译并加载文件))