############################################################## メジャーモード (2) - generic mode - ############################################################## * generic mode ( ジェネリックモード: 一般 emacs モード) . * 以下が可能. + キーワード毎に、 :blue:`色付きのフォントロックを指定` できる + :blue:`モード起動時に関数を起動` 、設定を読み込み. + 拡張子に自動的に判別して、フックできる. + :red:`スニペットを登録・呼び出し` できる. | ========================================================= generic mode の作成 ========================================================= --------------------------------------------------------- サンプルコード ( elmer_mode.el ) --------------------------------------------------------- .. literalinclude:: codes/sample__elmer_mode.el :caption: generic mode のサンプル (elmer_mode.el) :language: lisp | ========================================================= コードの中身 ========================================================= --------------------------------------------------------- generic-x パッケージの呼び出し --------------------------------------------------------- * generic-xパッケージを呼び出す. :: (require 'generic-x) | --------------------------------------------------------- リストインタリーブ関数の定義 --------------------------------------------------------- * 文字列リストを展開する関数(リストインタリーブ関数)を定義する. * 次のキーワード群の定義にて使用する. | --------------------------------------------------------- キーワード群の定義 --------------------------------------------------------- * 前述のリストインタリーブ関数を用いて、キーワード群を列挙する. * キーワード群は、例えば、 **演算子** , **キーワード** , **括弧** , **メタ命令** など. * リストインタリーブ関数の引数部 "'("[Tt]rue" "[Ff]alse" "[Nn]one")" を変更するだけ. + :blue:`正規表現でかける` ので、大文字・小文字区別[Aa]や、行頭正規表現"^"などを使用できる. + 正規表現で使用する文字列 "\" "." "*" "+" "?" "{}" "()" "{}" "[]" "^" "$" "-" "|" "/" には、 :blue:`エスケープシーケンス` が必要. + エスケープ文字は :blue:`"\\"` を使う ( e.g. "\\.", "\\$", "\\$.*" etc. ). | --------------------------------------------------------- フォントフェイスの作成 --------------------------------------------------------- * :blue:`defface` にて、faceを作成する. * 基本的には、foreground 文字色を変更すれば足りるはずである. | --------------------------------------------------------- generic mode の定義 --------------------------------------------------------- * define-generic-mode 'elmer-mode にて、モードを定義する. (ここでは、elmer-mode を定義). * 指定箇所は、以下である. (1) :blue:`コメント文字` (2) メインの :blue:`キーワード` (赤とか、既に決まっている配色でキーワードが色つけられる). (3) 詳細のキーワード設定 ( :blue:`[重要] 文頭はバッククオートで始める:リストインタリーブ関数使用のため` ) (4) :blue:`拡張子の設定` : 正規表現で指定 "\\.py$" など (5) 起動時の実行関数:例のように与えても良いし、( my-function )のように、別途定義した関数を呼んでもよい. (6) generic mode呼び出し時に表示されるコメント.:なんでもよい. * キーワードリスト(setqを使用して文字リストとして定義)は最後に付記してある. | --------------------------------------------------------- mode の provide --------------------------------------------------------- * require するときの :blue:`パッケージ名` .以下命令でprovideする.:: (provide 'elmer-mode) | ========================================================= まとめ ========================================================= * 基本的には、色とキーワードリスト、最初に実行する関数(タブ幅など)を指定すれば良い.