使用org-capture记录密码

org-capture是orgmode的最新特性之一,它试图取代org-remember,成为快速记录的利器。

org-capture(包括org-remember)的目的,是通过事先定义记录信息的位置、格式,使得我们在记录时专注于内容本身,而不是其形式。由于记录信息不再需要一系列繁琐的步骤,记录速度得到极大的提升,工作流程也不会被严重打断。

org-capture与org-remember的功能并非完全相同,下面两幅图展示了操作界面的不同。

另外一个不同是,org-remember只能记录headline,而org-capture则提供多种形式以供选择,具体参见作者的详细描述

我目前使用org table来保存用户名密码信息(并使用GPG加密),由于文件中还存有其它信息,定位表格的步骤比较无聊。而利用org-capture添加表格行的功能,极大地减轻了操作负担。配置如下(假设表格位于Web accounts这个headline之下):

;; org-capture
(define-key global-map [(f8)] 'org-capture)

(setq org-capture-templates
      `(("t" "Todo" entry (file+headline "~/gtd/todo.org" "Tasks")
         "* TODO %?\n  %i" :prepend t)

        ("n" "Note" entry (file+headline "~/gtd/notes.org" "Notes")
         "* %U %?\n\n  %i" :prepend t :empty-lines 1)

        ;; ...

        ("a" "Account" table-line
         (file+headline "~/.account.org.gpg" "Web accounts")
         "| %? | | %a | %U |")))

最后一项就是用来记录用户名和密码的,快捷键为F8 a,其中链接和创建时间可以自动填充。下图是记录Quora注册信息的例子,最后一行是自动添加的(倒数第二行的Quora注册信息是之前记录的)。

在记录信息时,org-capture使用indirect buffer,而org-remember则使用单独的buffer,这个不同很重要。前者相当于直接在源文件上修改,内容不会丢失,所以能够在一次capture过程没有结束时再一次调用capture;org-remember则做不到这一点。

org-remember的优点是撤销操作(C-c C-k)很容易,只要将记录信息的buffer杀掉就可以了;而org-capture则在某些情况下无法完美撤销,需要手工操作,比如自动添加的表格行就不得不手工删除。作者声称这不是一个bug