(defun idle-agenda()
;; [[https://emacs.stackexchange.com/questions/46750/defun-in-defun-is-not-local][defun in defun is not local?]]
(interactive)
(cl-labels (
(show-agenda ()
(org-agenda nil "n")
)
)
;; (run-with-idle-timer 5 t #'show-agenda)
(with-timeout (3
;; (funcall #'show-agenda) 没有执行
)
)
)
)
没看懂你这个代码。首先,cl-labels 定义的本地函数,是可以“当作”正常函数调用的。用 (func xxx)
或者 #'func
都可以。
(cl-labels ((func (x)
(+ x 42)))
(func 20) ;; => 62
(mapcar #'func (list 1 2 3 4 5 6)))
;; => (43 44 45 46 47 48)
其次 with-timeout
这个宏,其实是一种类似 negative acknowledgement 的机制。比如
(with-timeout (20 (progn (nack)))
(some-thing))
这个效果是,如果 (some-thing)
在 20 秒内没有结束,那么中断他,然后执行 (nack)
。
1 个赞