linkd.el
><
http://dto.freeshell.org/e/linkd.el
eevを何年も使っているのでなかなか手を出してなかったが、linkd.elを入れてみた。
リンクに色がつくのがいい。
@*とか@>とかは特殊記号かと思えばたんなる関数名であるw このへんがLispの柔軟性なんだろう。その定義がこれまたカッコイイ!
(defun @> (tag-name) `(:follow (lambda () ほにゃらら) :render (lambda (beg end) ほげほげ)))
という感じ。一瞬ぎょっとしたけど、ラムダ式が値のplistを返しているだけ。elispでclosureもどきを作るにはbackquoteを使う。
(defun linkd-follow (sexp) (let* ((plist (eval sexp)) (follower (plist-get plist :follow))) (when follower もぐもぐ (funcall follower))))
evalで得たplistをplist-get(Common Lispのgetfに相当)してfuncall。んー、エレガント。
iciclesで有名なDrew Adams氏はすぐに惚れ込んだし、eevに固執している俺も使ってみようかな。eevにはリンクをハイライトするコードは含まれていないんだし。
試してみる
(@> "label") (@file :file-name "~/.emacs" :display "dot.emacs") (@file :file-name "~/.emacs") (@* "label") (@L "(+ 1 32)") (@L '(+ 1 32)) (@L '(+ 1 32)) (@L (+ 1 32)) (@L '(find-file "~/.emacs"))
へんてこな記号だが、それら全部S式である。
- @> : 目次
- @* : 見出し
- @file : ファイルへのリンク
- @L : S式へのリンク
そして、M-x linkd-mode とするとこの画像のようにレンダリングされる。
linkd-modeが有効になったら、C-c ]で次のリンク、C-c [で前のリンクに移る。
リンクにカーソルがあったら独自のキーマップになるのでそのまま]と[で前後のリンクへ移ることができる。
まぁ目次と見出しが目立つようになるので、その目的だけにlinkdを使うのもアリだな。