========================================================= Emacs-lisp の Major Mode 記述のサンプル ========================================================= *Emacs* で拡張子毎に 動作を規定することができる.これを *Major Mode* と言い、以下の *Emacs-Lisp* のサンプルを示す. *Emacs-Lisp* はとても難解な言語なので、詳しい解説等は他に譲り、ここでは、コピペと最小限の変更で、世に言う **「オレオレモード」** をインスタントに実現することを目指す. ここで、要求する動作としては、次の通りである. * 拡張子を自動判別し、モードを開く. * 好きなワードをハイライトする. ほぼ、ハイライトのためだけの最小限構成としている.今後の改良に期待する. Emacs-Lisp Major Mode の サンプルコード ========================================================= 以下にコードサンプルを示す. .. literalinclude:: ../code/emacs_lisp_sample_sif_mode.el :caption: ハイライト用 Major Mode のサンプルコード :linenos: :language: emacs-lisp サンプルコード の動作 ========================================================= 基本的に Major Mode の定義は、 **( define-generic-mode ... )** を書けば良い. この関数は、次の7つを指定することで定義できる. 1. モード名 ( sif-mode ) 2. コメント行の開始文字 3. とりあえずハイライトする文字列群の指定 4. 詳細なハイライト文字列の指定 5. 反応する拡張子の指定 6. ファイルが開かれた際の自動実行する関数 7. モードの説明文 ( ミニバッファに表示される ) 前後には、これに付随する関数を記述している. モード定義部分内部で変更できる箇所は、上記の7つである. モード定義部分以外で変更する必要がある箇所は、次の2つ. * 変数グループを返却する関数 ( sif-variables-type-operators ) * 読み込み時の動作を定義する関数 ( sif-initial-call ) 変数グループは、関数名 ( グループ名 )と中身の文字列リスト ( '() としてリストを定義 )を変更する. 動作を定義する関数は好きなように変更して良い.何かパラメータを設定したければ、 .. code-block:: (setq パラメータ名 値) というようにすれば良い.何も動作する必要が無ければ、sif-initial-call の代わりに nil (何もしない)を書いておいても良い. 末尾の拡張子へのフックは書かなくでも、ファイルを開いた時に自動的に判別される.一応、一般のモードフックの方法を示すためにコメントにて記述している.