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

时间:2013-04-01 01:47:21

标签: emacs org-mode gnus

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

我的工作流程如下:

  1. 打开gnus INBOX的摘要视图,然后选择一条新消息
  2. 使用org-store-link(C-c l)
  3. 捕获消息
  4. 打开我的todo文件(todo.org),为其创建一个新任务,并使用org-insert-link(C-c C-l)将捕获的链接粘贴到任务的主体
  5. 返回gnus摘要视图并归档消息(B del)
  6. 问题是,当将邮件移动到存档文件夹时,捕获的链接会中断,我无法再关注该链接。这是因为捕获的链接包含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。

1 个答案:

答案 0 :(得分:7)

我不使用'org-store-link'和'org-insert-link'而是使用capture template,它会自动生成指向消息的链接(下面的%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"))

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

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

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

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

HTH