自从有了 Evernote 这个东西后,经常把网上看到的文章、图片以及一些自己的想法一股脑扔到 Evernote 里。Evernote 里的东西越来越多,也越来越有价值,变得越来越像一个数据仓库了。那么,如何使用这些数据、如何有效地找到这些数据,就成了一个迫切需要解决的问题。

我是 Emacs 的重度使用者,并且最喜欢使用 Org Mode 来写笔记,喜欢在合适的时候会把 org 文件全转为 html 以便阅读。那么,我自然非常希望能在 Org Mode 里直接链接 Evernote 里的文章。Evernote 支持 URL Protocol,可以在浏览器里直接通过 Evernote 打开内部链接,那 Emacs 是否也可以这样做呢?我们稍微试验一下就知道了。

比如说,有一个 Evernote 的内部链接:

evernote:///view/52572/s1/6e53e0ed-272a-4ec9-89c7-f636b16d6a3c/6e53e0ed-272a-4ec9-89c7-f636b16d6a3c/

我按照 Org Mode 的方式,写一个链接出来:

[[evernote:///view/52572/s1/6e53e0ed-272a-4ec9-89c7-f636b16d6a3c/6e53e0ed-272a-4ec9-89c7-f636b16d6a3c/][Som Evernote note title]]

我希望这个链接,在 org 源代码(即你在 Emacs 编辑 org 文件时)里,可以直接用鼠标一点就通过 Evernote 打开该内部链接、跳转到相对应的文章;或是,在把 org 文件转成 html 文件时,同样保留这个链接的形式,以方便浏览器直接通过生成的链接、发送给 Evernote 来打开这篇文章。

现在来看看 Emacs 默认配置下的结果:

  1. 在 org 文件里用鼠标点击该 evernote:/// 链接,无效;
  2. 把 org 文件转成 html 文件后,该链接变成了如下奇怪的形式:
    index.html#evernote-view/52572/s1/6e53e0ed-272a-4ec9-89c7-f636b16d6a3c/6e53e0ed-272a-4ec9-89c7-f636b16d6a3c
    
[evernote:///view](///view) 被 Org Mode 转义成了 evernote-view。 

看来结果不尽如人意,我们需要解决两个问题。

对于第一个问题,我们可以让 Emacs 把 evernote:/// 链接直接发送给操作系统来处理:

(defun org-pass-link-to-system (link)
  (if (string-match "^[a-zA-Z0-9]+:" link)
     (browse-url link)
    nil)
  )

(add-hook 'org-open-link-functions 'org-pass-link-to-system)

对于第二个问题,我们可以让 org-add-link-type 不转义 evernote 的链接

(require 'org)
(org-add-link-type "evernote" nil '(lambda (path desc frmt)
      (format "<a href=\"evernote:%s\">%s</a>" path desc)))

这样,在把 org 转成 html 文件时, evernote:/// 这样的链接就会原封不动的保存起来。

就这样,我在 Evernote 里汇总别人的笔记,但是依然在 Emacs Org 里记录自己的笔记,并且在 Emacs Org Mode 里链接别人的笔记。对于一些特别有价值的文章,我会把这些信息收录到 Evernote 里,在必要的时候,通过 Emacs 链接 Evernote 的内部链接来作为检索的依据,这样一来,在上不了网或是网页被作者下线后资料无从检索的时候,就再也不用烦恼了。

这样,我就搭建了一个完美的笔记生态系统!工欲善其事,必行利其器,说的就是这个道理。