timer用のanythingのSource

何となく作ってみた。(特に意味はない)
一度定義したタイマーを再利用したいかもしれないということで、いきなり殺すのではなく、stop-listというところに退避させるようにしている。でも、reviveは実装していない。*1

(defvar stop-timer-list nil)
(defun stop-timer (timer)
  (push  timer stop-timer-list)
  (cancel-timer timer))

(define-anything-type-attribute 'timer
  '((action ("stop: stop-timer" . stop-timer)
            ("Kill: cancel-timer" . cancel-timer)
	    ("select: identity" . identity)))
 "timer attribute")

(let ((make-timer-source
       (lambda (name seq)
	 `((name . ,name)
	   (candidates . (lambda ()
			   (loop for k in ,seq
				 collect (cons (format "%s" k) k))))
;	   (multiline)
	   (type . timer)))))
  (lexical-let
      ((idle-timer-source
	(funcall make-timer-source "idle-timer" 'timer-idle-list))
       (timer-source
	(funcall make-timer-source "timer" 'timer-list))
       (stopped-timer-source
	`(,@(butlast (funcall make-timer-source "stopped-timer" 'stop-timer-list))
	  (action . (("kill-completely" .
		      (lambda (x) (setq stop-timer-list (delete x stop-timer-list))))
		     ("revive" . identity)))))) ;;fixme
    (defun anything-show-timer () (interactive)
       (anything (list stopped-timer-source idle-timer-source  timer-source)))))

*1:面倒だったので