helm-grep-do-git-grep,带有前缀arg grep full repo且不带 grep只有当前的目录。
我希望它反转
helm-grep-do-git-grep没有前缀arg grep整个仓库和 grep只有当前的目录。
如何定义一个函数来反转它或定义键盘快捷键?
答案 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)
用于双前缀等等。