如何自动跟踪org-mode中的链接到gnus消息?

Yas*_*iya 5 emacs org-mode gnus

我使用org-mode + gnus + Gmail作为我的日常GTD例程.这个概念是将所有传入的消息视为任务,并使用org-capture将INBOX中的所有消息转换为org-mode的任务.将所有新消息转换为任务后,将其归档,并希望INBOX保持为零.

我的工作流程如下:

  1. 打开gnus INBOX的摘要视图,然后选择一条新消息
  2. 使用org-store-link(Cc l)捕获消息
  3. 打开我的todo文件(todo.org),为它创建一个新任务,并使用org-insert-link(Cc Cl)将捕获的链接粘贴到任务的主体
  4. 返回gnus摘要视图并归档消息(B del)

问题是,当将邮件移动到存档文件夹时,捕获的链接将被破坏,我不能再关注该链接.这是因为捕获的链接包含IMAP文件夹的名称,归档消息会更改邮件的IMAP文件夹名称.例如,

  • 捕获的链接:[[gnus:nnimap%2Blocalhost:%5BGmail%5D.Important#1364607772002.9702fb8c@Nodemailer][Email from Geeklist Team: Geekli.st Suggestions & Activi]](IMAP文件夹名称是"[Gmail]Important")
  • 链接到存档消息:( [[gnus:nnimap%2Blocalhost:%5BGmail%5D.All Mail#1364607772002.9702fb8c@Nodemailer][Email from Geeklist Team: Geekli.st Suggestions & Activi]]IMAP文件夹名称是"[Gmail]All Mail")

所以我的问题是:当邮件移动到其他文件夹时,如何自动更新捕获的链接?我想有一些钩子可以做到这一点,但我找不到一个好的样本用于此目的.或者欢迎任何更简单的解决方案.TIA.

小智 9

我不使用'org-store-link'和'org-insert-link'作为捕获模板,它自动生成消息的链接(下面的%a).因此,您不必切换缓冲区来存储TODO条目:

(setq org-capture-templates
  '(
    ("m" "TODO from Mail" entry (file+headline "~/gitfiles/org/gtd.org" "Inbox") 
     "* TODO %?, Link: %a")))

由于我的所有电子邮件都在INBOX中存档并存档在"存档"文件夹中,我可以使用以下函数在捕获缓冲区的Org模式链接中用'Archive'替换字符串'INBOX':

 (defun hs/replace ()
   (interactive)
   (goto-char 1)
   (replace-string "INBOX" "Archive"))

当我点击Cc Cc来提交捕获条目时,这个钩子调用该函数:

(add-hook 'org-capture-prepare-finalize-hook 'hs/replace)

所以,我的工作流程如下:

  • 在摘要缓冲区中选择一条消息
  • 点击Cc cm以捕获带有链接到消息的TODO项目并写入描述(因为消息仍在收件箱中,生成的链接包含组"INBOX")
  • 点击Cc Cc来提交TODO条目(这会调用函数'hs/replace',它会通过Archive替换字符串INBOX)
  • 将电子邮件存档在存档文件夹中.

HTH