はてなブックマークFirefox拡張のsqlite dbファイルをanything.elで検索


http://d.hatena.ne.jp/aki77/20090501/1241167586


前回のエントリでは最終的には launchd ではてなブックマークFirefox拡張のdbファイルを監視することで、リアルタイムに同期していたけど、だったら最初からdbファイルをそのまま使ったほうがいい気がしてきた、、
リモート環境の場合でも、dropbox なり rsync なりで同期させれば済むし。
無理矢理書き換えただけだけど、綺麗に書き換えてもらえることを期待してソースを張っておきます。

(defvar anything-hatena-bookmark-db "Profiles/xxxxx/hatenabookmark/HATENA_ID/bookmark.sqlite")

(defvar anything-c-source-hatena-bookmark
  '((name . "Hatena::Bookmark")
    (init
     . (lambda ()
         (call-process-shell-command
          (concat "echo 'SELECT title || \" [summary:\" || REPLACE(REPLACE(comment, \"[\", \"\"), \"]\", \", \") || \"][href:\" || url || \"]\" FROM bookmarks ORDER BY date DESC LIMIT 10000;' | sqlite3 \"" anything-hatena-bookmark-db "\"")  nil (anything-candidate-buffer 'global))))
    (candidates-in-buffer)
    (action
     ("Browse URL" . (lambda (candidate)
                       (string-match "\\[href:\\(.+\\)\\]$" candidate)
                       (browse-url (match-string 1 candidate))))
     ("Show URL" . (lambda (candidate)
                     (string-match "\\[href:\\(.+\\)\\]$" candidate)
                     (message (match-string 1 candidate))))
     ("Show Summary" . (lambda (candidate)
                         (string-match "\\[summary:\\(.+\\)\\]\\[" candidate)
                         (message (match-string 1 candidate)))))))

(defun anything-hatena-bookmark ()
  "Search Hatena::Bookmark using `anything'."
  (interactive)
  (unless (file-exists-p anything-hatena-bookmark-db)
    (error "File does not exist"))
  (anything
   '(anything-c-source-hatena-bookmark) nil "Find Bookmark: " nil nil))


オリジナルのanything-hatena-bookmark.el