我将函数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")))
答案 0 :(得分:7)
您可以使用以下内容来建议语义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))
请注意,您在本地绕过所有确认,因此您可能会捕获由语义symref本身触发的其他(其他)问题。
答案 1 :(得分:2)
要在不提示反馈的情况下运行功能,可以使用宏,其优点是:
advice
一样)。 condition-case
是可以避免的) (defmacro without-yes-or-no (&rest body)
"Override `yes-or-no-p' & `y-or-n-p',
not to prompt for input and return t."
(declare (indent 1))
`(cl-letf (((symbol-function 'yes-or-no-p) (lambda (&rest _) t))
((symbol-function 'y-or-n-p) (lambda (&rest _) t)))
,@body))
这可以绑定到这样的键上。
(global-set-key (kbd "C-c C-r")
'(lambda ()
(interactive)
(without-yes-or-no
(semantic-symref))))
答案 2 :(得分:1)
@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)