3

たとえば、いくつかのコードを内python-mode-hookに配置すると、コードは次の場合に実行されます。

(1)Pythonファイルを開くたびに*.py

(2)最初python-modeにトリガーされたときのみ

誰かが正しい答えを持っているという考えを持っていますか?

ありがとう!

4

3 に答える 3

6

フックがいつ実行されるかについての一般的な規則はありません。これは、フックを定義するコードによってのみ制御されます。ただし、従う一般的な規則があり、その中には次のものがあります。

  • foo-modeが何らかのメジャーモードである場合、バッファで有効にfoo-mode-hookなるたびに実行されます。foo-mode

特に、すでに指摘したように、ファイルがロードさpython-mode-hookれるたびに関数が実行されます。.py

于 2012-10-30T06:47:20.510 に答える
4

コードを見たい場合は、主要なモードの大部分がdefine-derived-modeマクロで構築されていることに注意してください(同じ利点を得るには、新しいモードが実際にnil別のモードから派生していない場合、モードは単に提供できますマクロの使用による標準的な動作)。parent

それでM-x find-function RET define-derived-mode RET

モードが呼び出されたときに発生する最後のことは次のとおりです(run-mode-hooks ',hook),hookこの場合、接尾辞が付いたモードの名前に展開されます-hook)。

したがって、バッファがそのモードを有効にするたびに(つまり、そのマクロによって定義されたモード関数が実行される)、モードのフックも実行されます(親/祖先モードのフックも同様です-興味深い相互作用はdelay-mode-hooksrun-mode-hooksフックは、他のすべての処理が完了するまで実行されます)。

于 2012-10-30T07:43:27.420 に答える
3

Pythonファイルを開くたびに実行されます。

次に、このファイルバッファに対してPythonモードがトリガーされ、フックが実行されます。

簡単なフックを書くことで、これを簡単にテストできます。

(add-hook 'python-mode-hook  (lambda () (message "python mode hook")))
于 2012-10-30T05:53:54.483 に答える