2016-10-02 2 views
1

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

Я хочу, чтобы он отменил

штурвал-Grep-ду-ГИТ-Grep без префикса аргумент Grep весь репо и Grep только текущей директории.

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

ответ

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) используется для двойного префикса, и так далее.

Смежные вопросы