1

接頭辞付きの helm-grep-do-git-grep arg リポジトリ全体を grep し、現在のディレクトリのみを grep なしで実行します。

反転してほしい

接頭辞なしの helm-grep-do-git-grep arg リポジトリ全体を grep し、現在のディレクトリのみを 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))))

関数を置き換えたいだけの場合 (OK かもしれないし、そうでないかもしれません。以下を参照)、アドバイスを使用できます。

(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)使用され、二重プレフィックスに使用されます。

于 2016-10-10T23:17:04.610 に答える