helm-grep-do-git-grep ищет в текущем каталоге

helm-grep-do-git-grep с префиксом arg grep весь репо и без grep только текущий каталог.

Я хочу, чтобы все было наоборот

helm-grep-do-git-grep без префикса arg grep whole repo и с grep only current dir.

Как я могу определить функцию, чтобы отменить ее или определить сочетание клавиш?

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-grep-do-git-grep это нормально, чтобы посоветовать). Если функция используется другими функциями, рекомендация может привести к неправильному поведению зависимых функций (потому что вы эффективно меняете определение рекомендованной функции).


Если вы не знакомы с префиксными аргументами Emacs, nil используется без префикса, '(4) используется для одного префикса, '(16) используется для двойного префикса и так далее.

Другие вопросы по тегам