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 とするとこの画像のようにレンダリングされる。

http://www.rubyist.net/~rubikitch/images/linkd.jpg

linkd-modeが有効になったら、C-c ]で次のリンク、C-c [で前のリンクに移る。
リンクにカーソルがあったら独自のキーマップになるのでそのまま]と[で前後のリンクへ移ることができる。

まぁ目次と見出しが目立つようになるので、その目的だけにlinkdを使うのもアリだな。