HTML のマークアップが楽になる(?) html-key-chord-mode を作った。

以前日記で、HTMLをすんごい速さで書ける Emacs のモードの構想。とか書いたのですが、とりあえず形になったので紹介します。僕のEmacsモード(正確にはマイナーモードですが)処女作です。

公開場所

これまた初めて GitHub 使いました。

みんないじいじしたりアドバイスください。

想定している使い方。

メジャーモードじゃないのは、色分けとか、インデントとか、そういうのは他の昔からあるモードに任せてしまおうと言う考えです。
んでもって、一から文書構造を考える場合よりも、既にある程度構造が決まっていて、そこに文章を流し込む場合のマークアップを最強に高速に行なうための機能を提供するという感じです。

インストール。

elisp のインストールを一から書こうかと思ったのですが、それだけで記事ひとつになりそうだったので、涙を飲んで省略します。

# git clone git://github.com/tomoya/html-key-chord-mode.git

リポジトリごとコピーしてもいいし、普通にサイトからダウンロードしてもいいけど、一番早いのは、断然 install-elisp を使って、Emacs から最新のファイルを直接インストールするのが早くて楽ちんです。
install-elispはてなキーワードにもなっているので、そちらを参照。
僕も初めて知ったけど、GitHub からelispを直接ダウンロードするには html-key-chord-mode.el を開いて、ソース右上の「raw」というのが生のファイルだったので、

M-x install-elisp http://github.com/tomoya/html-key-chord-mode/raw/87d07a285ee01a860336e093b86e17710f76a66b/html-key-chord-mode.el

として*1、指示に従って C-c C-c する。
あと、key-chord.elの力を存分に借りており、また、xyzzy からの lisp 移植を簡単にしようという試みから、xyzzy.elという xyzzy の組み込み関数を使える様にしたものも微妙に作って使っているので、これも必要。どう考えても最初から欲張り過ぎです。

M-x install-elisp-from-emacswiki http://www.emacswiki.org/emacs/key-chord.el
M-x install-elisp http://github.com/tomoya/xyzzy.el/raw/f530bcf3ccd4160a055e0e36f421e21076591d76/xyzzy.el

という感じで両方入れておいて下さい。

設定。

.emacs など設定ファイルに、

(require 'key-chord)
(require 'html-key-chord-mode)

で、設定完了です。コマンドラインで起動するには、M-x html-key-chord-mode です。
僕は、key-chord 厨なので、

(key-chord-define-global "hk" 'html-key-chord-mode)

として、h + k キー同時押しで、呼び出せるようにしています。なお、機能上、全てのバッファで利用するのは、誤爆が多いのでオススメできません :p)

機能。

現時点では大きく分けると

の2つの機能があります。

対話的にマークアップ!

好きな行で C-c t を押すと、ミニバッファでタグを聞かれるので、入力してエンタすると、その行が入力したタグでマークアップされます。
続いて、マークしてリージョンを指定して M-t を押すと、同じくタグを聞かれるので、入力してエンタを押すと、リージョン範囲がタグでマークアップされます。
このキーバインドは、

(define-key hkc-mode-map "\C-t" 'quote-line-by)
;; や
(define-key hkc-mode-map [(super t)] 'quote-region-by)

の様に変更可能です。んでもって、この機能は、のりさんの xyzzy用 続マクアプ用 lisp達のパクりです。

入力がめんどいので、超速でマクアプ!!

こっからが、考えてみた機能で、key-chord.el と組み合わせたやつ。カーソルのある行を指定されたタグでマークアップするのですが、
とりあえず標準で、「dl, dt, dd, ol, ul, li, th, tr, h1, h2, h3, h4, h5, h6, em, p, blockquote」のタグが登録してあって、例えば、dl を同時押し(key-chordの設定をしてなければ、デフォルトで0.05秒以内)すると、その行が dl でマークアップされます。
p と blockquote は、2文字ではないので、pを2度押し、bq を同時押しで、その行がマークアップされます。

今後。

とりあえず、行とリージョンのタグを削除する関数をを入れて、あと、タグの入力を聞かれるときにタグ一覧を表示して anything とか。それだと、yasnippet と組み合わせると便利そうだけど難しそう。
key-chord の方はいらないけど、対話コマンドの方は利用したいとか、その逆とかのニーズに合わせて、設定でオフにどっちかオフにできたりとかもあった方がいいかも。
あと、複数行に渡って、同じタグで一気にマークアップするとかも、li とかするので、あったら便利かも。のりさんが、table もスペースで区切っておいて、正規表現でガっとが楽って言っていたので、それも取り入れたい。
最後に、IRC で色々教えてくれた id:elim に猛感謝です :-)

*1:09-01-17現在の最新ファイルです。