helm-grep-do-git-grep在当前目录中搜索

时间:2016-10-02 03:51:36

标签: emacs git-grep emacs-helm

  

helm-grep-do-git-grep,带有前缀arg grep full repo且不带   grep只有当前的目录。

我希望它反转

  

helm-grep-do-git-grep没有前缀arg grep整个仓库和   grep只有当前的目录。

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

1 个答案:

答案 0 :(得分:1)

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

(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)用于双前缀等等。