Next: Tabulated List Mode, Previous: Basic Major Modes, Up: Major Modes [Contents][Index]
すべてのメジャーモードコマンドは、モード独自のノーマルフックchange-major-mode-after-body-hook
、そのモードのモードフック、ノーマルフックafter-change-major-mode-hook
を実行することにより終了すべきです。これは、run-mode-hooks
を呼び出すことにより行われます。もしそのモードが派生モードなら、自身のbody内で他のメジャーモード(親モード)を呼び出す場合は、親モードが自身でこれらのフックを実行しないように、delay-mode-hooks
の中でこれを行うべきです。そのかわりに、派生モードは親のモードフックも実行する、run-mode-hooks
を呼び出すのです。Major Mode Conventionsを参照してください。
Emacs 22より前のバージョンのEmacsには、delay-mode-hooks
がありません。また、Emacs
24より前のバージョンには、change-major-mode-after-body-hook
がありません。ユーザー実装のメジャーモードがrun-mode-hooks
を使用せず、これらの新しい機能を使用するようにアップデートされていないときは、これらのメジャーモードは以下の慣習に完全にしたがわないでしょう。それらのモードは、親のモードフックをあまりに早く実行したり、after-change-major-mode-hook
の実行に失敗するかもしれません。そのようなメジャーモードに遭遇した場合は、以下の慣習にしたがって修正をお願いします。
define-derived-mode
を使用してメジャーモードを定義したときは、自動的にこれらの慣習にしたがうことが確実になります。define-derived-mode
を使用せずにメジャーモードを“手動”で定義した場合は、これらの慣習を自動的に処理するように、以下の関数を使用してください。
メジャーモード、この関数を使用してそれらのモードフックを実行すべきである。これはrun-hooks
(Hooksを参照)と似ているが、change-major-mode-after-body-hook
とafter-change-major-mode-hook
も実行する。
この関数が、delay-mode-hooks
フォーム実行中に呼び出されたときは、それらのフックを即座には実行しない。かわりに、次のrun-mode-hooks
呼び出しでそれらを実行するようにアレンジする。
あるメジャーモードコマンドが他のメジャーモードコマンドを呼び出すとき、それはdelay-mode-hooks
の内部で行われるべきである。
このマクロはbodyを実行するが、body実行中はすべてのrun-mode-hooks
呼び出しにたいして、それらのフックの実行を遅延するよう指示する。それらのフックは、実際にはdelay-mode-hooks
構造の最後の後、次のrun-mode-hooks
呼び出しの間に実行されるだろう。
これは、run-mode-hooks
により実行されるノーマルフックである。これは、そのモードのフックの前に実行される。
これは、run-mode-hooks
により実行されるノーマルフックである。これは、すべての適切に記述されたメジャーモードコマンドの一番最後に実行される。