我希望能够在选择捕获模板之前中止org-capture 时运行一些代码。我可以在使用defadvice完成捕获过程(无论是完成还是中止)时运行一些代码。例如:
(defadvice org-capture-finalize
(after delete-capture-frame activate)
"Advise capture-finalize to close the frame"
(if (equal "capture" (frame-parameter nil 'name))
(delete-frame)))
(defadvice org-capture-kill
(after delete-capture-frame activate)
"Advise capture-kill to close the frame"
(if (equal "capture" (frame-parameter nil 'name))
(delete-frame)))
我无法弄清楚当我在选择模板之前中止捕获时如何运行一些代码。这是 Org Select 缓冲区提示我"选择捕获模板"。我可以点击' q'或者' C-g'中止捕获但我无法弄清楚如何挂钩。对于上下文,我想要完成的是能够在中止时删除组织捕获帧。我将org-capture设置为open in a new frame,我可以在捕获完成后删除帧,或者在模板选择后中止。
在模板选择之前中止捕获时,是否可以使用钩子或一些建议来运行某些代码?
答案 0 :(得分:2)
不确定
(defadvice org-capture-select-template
(before org-before-capture-template activate)
(message "bar"))
或扩展版本(检查 C-g ):
(defadvice org-capture-select-template
(around org-around-capture-template activate)
(message "trying")
(if (ignore-errors ad-do-it t)
(message "success")
(message "fail")))
如果你想检查 q ,你必须浏览组织来源, 找到它所在的位置并提出建议。
答案 1 :(得分:1)
这似乎有效:
(defadvice org-capture-select-template (around delete-capture-frame activate)
"Advise org-capture-select-template to close the frame on abort"
(unless (ignore-errors ad-do-it t)
(setq ad-return-value "q"))
(if (and
(equal "q" ad-return-value)
(equal "capture" (frame-parameter nil 'name)))
(delete-frame)))
这会检查org-capture-select-template
的返回值,这是org-capture
调用设置entry
的内容,如果它返回error "Abort"
,则会调用q
,因为您和已经看过了。如果捕获帧确实返回q
,则该建议将删除捕获帧。
请注意,它在模板选择中不处理没关系,修复了。假设C-g
。q
中的结果行为相同,我在错误时将返回值设置为C-g
(即在org-capture
上)。据我所知,通过阅读来源,它是(唯一的区别是error
而不是org-capture
来调用org-capture-select-template
。
哦,org-capture-kill
来电org-capture-finalize
,所以你不需要告诉前者。