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。