52 sync.vim (4-2) sync-isbn.vim を作ってみた

sync.vim を使って ISBN から本の情報を取得するスクリプト「sync-isbn.vim」を書いてみた。

見てのとおり一日一冊(を目指して)本を読んで感想を書いてるんだけど、はてなの isbn 記法に :detail をつけたやつがうらやましかった。howm-mode.vim で使いたくなった。それがきっかけ。

so ~\vimplugins\sync\sync-isbn.vim

function! HowmActionlockSyncIsbn(str, head)
  let code = input('ISBN コードを入力→')
  if code !~ '\c\d\{9}[0-9x]' && code !~ '\d\{13}'
    echoerr "'" . code . "' は ISBN コードじゃないよ!"
    return
  endif
  let l = line('.')
  let s = '{sync:isbn code=' . code . '}'
  call setline(l, s)
  call append(l, '{/sync}')
endfunction

function! HowmActionlockSyncIsbnPull(str, head)
  :SyncPull
endfunction

if !exists('g:howm_actionlock_list') | let g:howm_actionlock_list = [] | endif
call add(g:howm_actionlock_list, {'func': function('HowmActionlockSyncIsbn'), 'pat': '^{sync:isbn}\s*$'})
call add(g:howm_actionlock_list, {'func': function('HowmActionlockSyncIsbnPull'), 'pat': '^{sync:isbn\s.*}\s*$'})

パターンとか結構適当だけど、動くのでおk。

= 
{sync:isbn}
[2008-02-21 16:01]

こんな風にしておいて、 {sync:isbn] にカーソルを置いて ENTER を押すと、ISBN の入力が求められる。とりあえず、ここでは天涯の砦の ISBN を入力する。4152087536。すると、{/sync} と code= が補完されて、以下のようになる。

= 
{sync:isbn code=4152087536}
{/sync}
[2008-02-21 16:01]

さらに、{sync:isbn code=4152087536} で ENTER。以下のように適当に情報をとってくる。

= 
{sync:isbn code=4152087536 last_sync=2008.02.21,16:04}
天涯の砦 (ハヤカワSFシリーズ・Jコレクション)
作者: 小川一水
出版社/メーカー: 早川書房
発売日: 2006/08
メディア: 単行本
http://d.hatena.ne.jp/asin/4152087536
http://www.amazon.co.jp/exec/obidos/ASIN/4152087536
http://images-jp.amazon.com/images/P/4152087536.09.MZZZZZZZ.jpg
{/sync}
[2008-02-21 16:01]

curl で、はてなにアクセスして情報をとってくる。ISBN の解釈とか amazon の URL とか適当。ISBN-13 には、はてながリダイレクトしてくれる範囲で対応してる。チェックディジットとか確認してない。amazon の URL の規則とか知るわけない。教えてくれたら修正しま。

というわけで、ダウンロードは以下の URL 。右クリックとかで保存すればいいと思う。vimrc で :so とかで読み込むといいと思う。上の設定を参考にするといいと思う。まあ、うん。いいと思う。

http://kuhun.s1.zmx.jp/Vim/sync-isbn.vim