2007/05/22
tempo.elで独自ボキャブラリXMLを書く使い捨てモード
世の中、独自XMLボキャブラリを氾濫させるのは止めようと、誰もが思っているのに、独自XMLボキャブラリは後をたちません。
独自XMLボキャブラリを書くことになったら、使い捨ての自分XMLモードを作って楽をしましょう。tempo.elを使った例を示します。
tempo.el
コードの雛型は次のようになります(メジャーモードの作り方としてはやや変則的な部分がありますが、使い捨てなので許してください)。
(require 'tempo) (defun my-xml-mode () (interactive) (kill-all-local-variables) (setq mode-name "my xml") (setq major-mode 'my-xml-mode) (let ((my-xml-mode-map (make-sparse-keymap))) (define-key my-xml-mode-map "\M-\C-f" 'tempo-forward-mark) (define-key my-xml-mode-map "\M-\C-b" 'tempo-backward-mark) (define-key my-xml-mode-map "\C-c\C-lu" (tempo-define-template "ul" '("<ul>\n<li>" p "</li>\n" p "</ul>\n"))) (define-key my-xml-mode-map "\C-c\C-li" (tempo-define-template "li" '("<li>" p "</li>\n"))) ; add more (use-local-map my-xml-mode-map)))
add moreの部分に必要なパターンを書き加えます。上の例ではキーアサインをhtml-helper-mode.elに準拠しています。適当に好きなキーアサインにすることも可能です。XMLボキャブラリに応じて、何も考えずに適当に書き加えても動くのが良い点です。
キーアサインとタグの挿入を対応づけているだけです。上のコードだけ見ると、キーボードマクロとたいして変わらないように見えます。良い点は上記のテンプレート内の p の部分にカーソルが移動することと、tempo-forward-mark、tempo-backward-markで p の位置を順々に移動できることです。
上のmy-xml-modeを使って、次のXML断片を書くケースを考えます。
<ul> <li>foo</li> <li>bar</li> <li>baz</li> </ul>
キー入力は次のようになります。
- C-u C-l u
- foo
- M-C-f
- C-u C-l i
- bar
- M-C-f
- C-u C-l i
- baz
コードの重複が悪であるように、キー入力の重複も悪です。3と4のステップの組み合わせは繰り返されているので、気になるなら、無くしてください。キーボードマクロが一番容易でしょう。
- Category(s)
- カテゴリなし
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/inoue/xml-adhoc-mode/tbping
Re:tempo.elで独自ボキャブラリXMLを書く使い捨てモード
というのもあります。