anything-c-source-mark-ring を作った

マーク箇所をリスティングする anything-c-source-mark-ring を作った。
ソフトウェアと本の覚え書き(2008-10-25) のパクリ + persistent-action の追加という代物。
微妙にanythingインターフェースの作り方忘れてるw


というか、こんなことしている場合じゃ無いはずww

20:41修正

元々の作者さんも書いていたが、リングの内容がずれるて表示されるので、無理矢理修正。
icicleのパクリコードです。

(defvar anything-c-source-mark-ring
  '((name . "mark-ring")
    (candidates . anything-c-source-mark-ring-init)
    (init . anything-c-source-mark-ring-init)
    (action . (("Goto line" . (lambda (candidate)
                                (goto-line (string-to-number candidate))))))
    (persistent-action . (lambda (candidate)
                           (switch-to-buffer anything-current-buffer)
                           (goto-line (string-to-number candidate))
                           (set-window-start (get-buffer-window anything-current-buffer) (point))
                           (anything-persistent-highlight-point
                            (line-beginning-position)
                            (line-end-position))))
    ))
(defun anything-c-source-mark-ring-init ()
  (with-current-buffer anything-current-buffer
    (let* ((ring (cons (mark-marker) mark-ring))
           (lines (mapcar (lambda (pos)
                            (save-excursion
                              (goto-char pos)
                              (let ((line  (buffer-substring-no-properties (save-excursion (beginning-of-line) (point))
                                                                           (save-excursion (end-of-line) (point)))))
                                (when (string= "" line) (setq line  "<EMPTY LINE>"))
                                (format "%7d: %s" (current-line) line))))
                          ring)))
      (sort lines 'string<)
      )))
12/2 C-u C-SPC で anything-c-source-mark-ringが発動するように設定追加
(defadvice icicle-goto-marker-or-set-mark-command (around icicle-goto-mark-or-set-mark-command-take-over-anythig activate)
  (if (> (prefix-numeric-value (ad-get-arg 0)) 1)
      (anything '(anything-c-source-mark-ring) nil "select mark: ")
    ad-do-it))