Emacs启动日志

Emacs启动日志,让我对自己的配置和Emacs的启动过程有了更多了解。如图:

muse-mode多年不用,居然还隐藏在我的配置脚本的某个角落里。加载失败,是因为在机器里根本没有它。尽管加载失败,但启动过程并没有因此中断,是因为我使用了require-maybe来加载它,在找不到的情况下,忽略之,而不是报错。

使用require-maybe而不是require,是因为某些软件包不包含在Emacs的官方发布里,如果不存在,一来不需要对其进行配置,二来不会中断启动过程,影响对核心功能的配置。

唯一的缺陷就是不清楚到底哪些加载成功哪些加载失败。有了启动日志,一目了然。

经过扩展的require-maybe代码如下:

(defmacro require-maybe (feature &optional file)
  "*Try to require FEATURE, but don't signal an error if `require' fails."
  `(let ((require-result (require ,feature ,file 'noerror)))
     (with-current-buffer (get-buffer-create "*Startup Log*")
       (let* ((startup-log-format-string-prefix "%-20s--------[")
              (startup-log-format-string-postfix "%s")
              (startup-status (if require-result "LOADED" "FAILED"))
              (startup-status-face `(face (:foreground
                                           ,(if require-result "green" "red")))))
         (insert (format startup-log-format-string-prefix ,feature))
         (let ((start-pos (point)))
           (insert (format startup-log-format-string-postfix startup-status))
           (add-text-properties start-pos (point) startup-status-face)
           (insert "]\n"))))
     require-result))

使用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