【问题标题】:how to answer yes or no automatically in emacs如何在emacs中自动回答是或否
【发布时间】:2011-09-29 06:45:27
【问题描述】:

我将函数 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")))

【问题讨论】:

    标签: emacs lambda lisp elisp


    【解决方案1】:

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

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

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

    【讨论】:

    • flet 不被认为是过时的吗?应该使用cl-flet 代替吗?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      要在不提示反馈的情况下运行函数,可以使用宏,它的优点是:

      • 它不会对函数进行任何全局更改(就像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))))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-24
        • 1970-01-01
        • 2022-09-26
        • 2012-12-13
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多