2

.emacsファイルで次のコードを実行しています。

(defun load-hooks ()
    (add-hook 'after-save-hook 'my-hook))

(add-hook 'c-mode-hook 'load-hooks)

(defun my-hook () ... )

ただし、my-hook別のモードを使用している場合でも、のコンテンツは保存時に実行されます。私は一歩を逃していますか?

4

3 に答える 3

5

にLOCAL引数を使用する必要がありますadd-hook。これにより、フックが現在のバッファーにのみ影響するようになります。

(defun load-hooks ()
  (add-hook 'after-save-hook 'my-hook nil t))

(add-hook 'c-mode-hook 'load-hooks)

(defun my-hook () ...)
于 2012-09-04T21:39:09.173 に答える
2

呼び出すと、すべてのモードにフックが追加さ(add-hook 'after-save-hook 'my-hook)れると思います。つまり、その関数が呼び出されると、他のすべてのバッファに対しても変更されます。load-hooksafter-save-hook

acファイルを開かないとフックが実行されないのではないかと思います。cファイルを開かずにファイルを開いてみて、何かが実行されているかどうかを確認してください。そうでない場合は、cファイルに対して実行される関数が他のすべての保存フックを変更することを意味します。

于 2012-09-04T21:11:30.147 に答える
0

Tikhonは、すべてのモードに影響を与える'after-save-hookについて正しかった-私は現在、次の関数を使用したチェックに依存しています。

(defun in-c-mode? ()
  (string= (current-major-mode) "c-mode"))

(defun current-major-mode ()
  (with-current-buffer (current-buffer) major-mode))
于 2012-09-04T21:28:13.953 に答える