Next: , Previous: , Up: Major Modes   [Contents][Index]


22.2.4 Defining Derived Modes

新しいメジャーモードを定義する推奨された方法は、define-derived-modeを使用して既存のメジャーモードから派生させる方法です。それほど近いモードが存在しない場合はtext-modespecial-mode、またはprog-modeから継承するべきです。Basic Major Modesを参照してください。これらがどれも適切でない場合は、fundamental-modeから継承することができます(Major Modesを参照)。

Macro: define-derived-mode variant parent name docstring keyword-args… body…

このマクロは、variantをメジャーモードコマンドとして定義し、nameをモード名の文字列形式とする。variantparentは、クォートされていないシンボルであること。

新たなコマンドvariantは、関数parentを呼び出すよう定義され、その後その親モードの特定の性質をオーバーライドする。

これらに加えて、bodyparentのその他の性質をオーバーライドする方法を指定できます。コマンドvariantはー、通常のオーバーライドをセットアップした後、そのモードのフックを実行する直前にbody内のフォームを評価します。

parentが非nilmode-classシンボルプロパティをもつ場合、define-derived-modevariantmode-classプロパティに、同じ値をセットします。これは、たとえばparentがspecialモードの場合は、variantもspecialモードになることを保証します(Major Mode Conventionsを参照)。

parentにたいしてnilを指定することもできます。これにより、新たなモードは親をもたなくなります。その後、define-derived-modeは上述のように振る舞いますが、当然parentにつながるすべてのアクションは省略されます。

引数docstringは、新たなモードにたいするドキュメント文字列を指定します。define-derived-modeは、このドキュメント文字列の最後にそのモードフックに関する一般的な情報と、その後にそのモードのキーマップを追加します。docstringを省略した場合は、define-derived-modeがドキュメント文字列を生成します。

keyword-argsは、キーワードと値のペアーです。値は評価されます。現在、以下のキーワードがサポートされています:

:syntax-table

新たなモードにたいする構文テーブルを明示的に指定するために、これを使用できる。nil値を指定した場合、新たなモードはparentと同じ構文テーブル、parentnilの場合は標準的な構文テーブルを使用する(これは、nil値の非キーワード引数は引数を指定しないのと同じという通常の慣習にはしたがわないことに注意されたい)。

:abbrev-table

新たなモードにたいするabbrevテーブルを明示的に指定するために、これを使用できる。nil値を指定した場合、新たなモードはparentと同じabbrevテーブル、parentnilの場合は、fundamental-mode-abbrev-tableを使用する(繰り返すが、nil値はこのキーワードを指定しないことではない)。

:group

これが指定された場合、値はそのモードにたいするカスタマイズグループ(customization group)であること(すべてのメジャーモードがカスタマイズグループをもつ訳ではない)。(まだ実験的かつ未公表だが)現在のところ、これを使用するのはcustomize-modeコマンドだけである。define-derived-modeは、指定されたカスタマイズグループを自動的に定義しない

以下は架空の例である:

(define-derived-mode hypertext-mode
  text-mode "Hypertext"
  "ハイパーテキスト用のメジャーモード
\\{hypertext-mode-map}"
  (setq case-fold-search nil))

(define-key hypertext-mode-map
  [down-mouse-3] 'do-hyper-link)

define-derived-modeが自動的に行うので、この定義内にinteractive指定を記述してはならない。

Function: derived-mode-p &rest modes

この関数は、シンボルmodesで与えられたメジャーモードのいずれかから、カレントメジャーモードが派生された場合は非nilをリターンする。