anything-c-source-bmをさらに改造
Visible Bookmarks 用 anything-source - プログラム番長のヲボエガキ
anything-c-source-bmはMatsuyamaさん作です:-)
このままだと出現順に並ばないのでsortしておいた。sort*に:keyキーワードをつけるとそこに指定されたものが基準にソートされる。rubyでいうEnumerable#sort_by。
candidates-in-buffer をつかうならばリストを作成する必要はなくなる。リストを作成するならば従来通りcandidatesを設定したほうが簡潔になる。
(defvar anything-c-source-bm '((name . "Visible Bookmarks") (init . anything-c-source-bm-init) (candidates-in-buffer) (action . (("Goto line" . (lambda (candidate) (goto-line (string-to-number candidate)))))))) (defun anything-c-source-bm-init () (let ((bookmarks (bm-lists)) (buf (anything-candidate-buffer 'global))) (dolist (bm (sort* (append (car bookmarks) (cdr bookmarks)) '< :key 'overlay-start)) (let ((start (overlay-start bm)) (end (overlay-end bm)) (annotation (or (overlay-get bm 'annotation) ""))) (unless (< (- end start) 1) ; org => (if (< (- end start) 2) (let ((str (format "%7d: [%s]: %s\n" (line-number-at-pos start) annotation (buffer-substring start (1- end))))) (with-current-buffer buf (insert str))))))))