繁体   English   中英

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

[英]how to answer yes or no automatically in emacs

我将 function semantic-symref 绑定到密钥Cc Cr ,如下所示:

(global-set-key (kbd "Cc Cr") 'semantic-symref)

每次我按Cc Cr时,它都会提示:

查找 xxxxx 的参考资料? (是或否)

我怎样才能自动回答? 我尝试像这样使用 lambda function ,但失败了

(global-set-key (kbd "Cc Cr") (lambda() (interactive) (semantic-symref "yes")))

您可以通过以下方式为语义符号参考提供建议:

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

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

@huitseeker 的回答非常简洁有效。 四年后,随着fletdefadvice过时,我编写了以下函数来自动回答是。 也许它对某人有用。

(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)

要在不提示反馈的情况下运行 function,您可以使用宏,这具有以下优点:

  • 它不会对 function 进行任何全局更改(如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))))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM