how to answer yes or no automatically in emacs

后端 未结 3 972
陌清茗
陌清茗 2021-02-20 06:43

I binded function semantic-symref to key C-c C-r like this:

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

everytime I pressed

相关标签:
3条回答
  • 2021-02-20 07:14

    To run a function without prompting for feedback, you can use a macro, this has the advantages that:

    • It doesn't make any global changes to the function (as advice does).
    • Any errors in the code wont lead to the advice being left enabled (although that's preventable using 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))
    

    This can be bound to a key like this.

    (global-set-key (kbd "C-c C-r")
      '(lambda ()
         (interactive)
         (without-yes-or-no
           (semantic-symref))))
    
    0 讨论(0)
  • You can advice semantic-symref with something like :

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

    Beware that you're locally bypassing all confirmations, so you may catch further (other) questions triggered by semantic-symref itself.

    0 讨论(0)
  • 2021-02-20 07:33

    The answer by @huitseeker is quite neat and effective. After four years, with flet and defadvice being obsolete, I wrote the following functions to answer yes automatically. Maybe it's useful for someone.

    (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)
    
    0 讨论(0)
提交回复
热议问题