Придание значения функции, которая требует минибуфера - PullRequest
3 голосов
/ 07 февраля 2012

Предположим, у меня есть функция (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 ]

3 голосов
/ 07 февраля 2012

Вы можете временно сделать read-from-minibuffer функцией бездействия:

(require 'cl)
(defmacro preempt-minibuffer (&rest body)
  `(flet ((read-from-minibuffer (&rest ignore)))
     ,@body))
0 голосов
/ 08 февраля 2012

Если у вас есть доступ к источнику функции, вы всегда можете создать свою собственную функцию, которая будет выполнять почти то же самое и заменять ее исходной функцией.

Предположим, где-то у вас есть функция foo в файле foo.el

(defun foo ()
   ...)

Теперь вы можете добавить в свой .emacs

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

, и когда foo.el будет загружен, если еще нет, ваш foo+ заменит исходный foo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...