【问题标题】:Giving a value to a function that requires the minibuffer为需要 minibuffer 的函数赋值
【发布时间】:2012-02-07 18:56:14
【问题描述】:

假设我有一个函数(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))

谢谢!

【问题讨论】:

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

标签: emacs


【解决方案1】:

你可以暂时把read-from-minibuffer变成一个无所事事的函数:

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

【讨论】:

    【解决方案2】:

    如果您可以访问函数源,则您始终可以创建自己的函数来做几乎相同的事情并将其替换为原始函数。

    假设你在文件foo.el中有函数foo

    (defun foo ()
       ...)
    

    现在您可以添加到您的.emacs

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-08
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2011-09-03
      相关资源
      最近更新 更多