1

helm-grep-do-git-grep 带有前缀 arg grep 整个 repo 并且没有 grep 只有当前目录。

我要反转

helm-grep-do-git-grep 没有前缀 arg grep 整个 repo 并且 grep 只有当前目录。

我如何定义一个函数来反转它或定义键盘快捷键?

4

1 回答 1

1

对于您想要反转前缀参数的含义的任何命令(至少对于将其前缀参数解释为布尔值的命令),这是一个通用解决方案。

(defun foo (&optional arg)
  "Do something.  Do something else with prefix ARG."
  (interactive "P")
  (if arg
      (message "something else")
    (message "something")))

(defun anti-foo (&optional arg)
  "Like `foo', but with opposite behavior w.r.t. ARG."
  (interactive "P")
  (if arg
      (foo nil)
    (foo '(4))))

如果您只是想更换功能(可能会也可能不会,见下文),您可以使用建议:

(advice-add 'foo
            :around
            (lambda (orig &rest args)
              "Reverse sense of prefix arg."
              (let ((arg (car args)))
                (if arg
                    (setq args (cons nil (cdr args)))
                  (setq args (cons '(4) (cdr args))))
                (apply orig args))))

如果该功能只是最终用户功能,则可能可以在其上使用建议(略读 helm 源代码,helm-grep-do-git-grep建议可能可以)。如果该函数被其他函数使用,建议可能会导致依赖函数行为不端(因为您正在有效地更改建议函数的定义)。


旁白:如果你不熟悉 Emacs 的前缀参数,nil用于无前缀、'(4)用于单前缀、'(16)用于双前缀等等。

于 2016-10-10T23:17:04.610 回答