如何在emacs中自动回答是或否

cra*_*ell 9 lisp emacs lambda elisp

我将函数semantic-symref绑定到键,C-c C-r如下所示:

(global-set-key (kbd "C-c C-r") 'semantic-symref)

每当我按下时C-c C-r,它都会提示:

查找xxxxx的参考文献?(是或否)

我该如何自动回答?我尝试使用像这样的lambda函数,但失败了

(global-set-key (kbd "C-c C-r") (lambda() (interactive) (semantic-symref "yes")))

hui*_*ker 7

您可以使用以下内容建议semantic-symref:

(defadvice semantic-symref (around stfu activate)
      (flet ((yes-or-no-p (&rest args) t)
             (y-or-n-p (&rest args) t))
        ad-do-it))
Run Code Online (Sandbox Code Playgroud)

请注意,您在本地绕过所有确认,因此您可能会捕获由语义symref本身触发的其他(其他)问题.


win*_*ind 2

@huitseeker 的回答非常简洁有效。四年后,随着flet并且defadvice已经过时,我编写了以下函数来自动回答“是”。也许这对某人有用。

(defun my/return-t (orig-fun &rest args)
  t)
(defun my/disable-yornp (orig-fun &rest args)
  (advice-add 'yes-or-no-p :around #'my/return-t)
  (advice-add 'y-or-n-p :around #'my/return-t)
  (let ((res (apply orig-fun args)))
    (advice-remove 'yes-or-no-p #'my/return-t)
    (advice-remove 'y-or-n-p #'my/return-t)
    res))

(advice-add 'projectile-kill-buffers :around #'my/disable-yornp)
Run Code Online (Sandbox Code Playgroud)