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:面倒だったので