从浏览器一键保存书签到 Org Mode

最近开始尝试用 Org Mode 文件保存「书签」,指的是有趣或者以后可能有用的链接,记录下来免得担心忘了。

我设置了这样一个 org-capture 模板,之后 C-c c b 就把 Chrome 在访问的页面做成了书签:

("b" "Bookmark" entry (file "bookmarks.org")
 "* %?%(grab-mac-link 'chrome 'org)\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n"
 :empty-lines 1
 :immediate-finish t)

昨天我开始用 emacs-mac,因为它注册 org-protocol:// ,所有不需要用 emacsclient,也能用 org-protocol。用它能从别的程序,比如 Chrome,激活 org-capture。

注册 org-protocol,之后访问 org-protocol://bookmark 就意味着把 Chrome 页面保存到 bookmarks.org 了:

(setq org-protocol-protocol-alist
      '(("bookmark"
         :protocol "bookmark"
         :function chunyang-org-protocol-capture-bookmark)))

(defun chunyang-org-protocol-capture-bookmark (_info)
  (org-capture nil "b")
  (run-at-time 0 nil #'chunyang-mac-switch-back-to-previous-application)
  nil)

(defun chunyang-mac-switch-back-to-previous-application ()
  (interactive)
  ;; http://blog.viktorkelemen.com/2011/07/switching-back-to-previous-application.html
  (do-applescript
   (mapconcat
    #'identity
    '("tell application \"System Events\""
      "  tell process \"Finder\""
      "    activate"
      "    keystroke tab using {command down}"
      "  end tell"
      "end tell")
    "\n")))

本来这段代码很简单,但是因为我不想把焦点从 Chrome 换到 Emacs,所以用了一些 AppleScript。

似乎是 org-protocol 的 Bug,上面的链接参数不能为空,要写成 org-protocol://bookmark? 之类的,后面随便加点什么。

$ open 'org-protocol://bookmark?
$ emacsclient 'org-protocol://bookmark?'

最后就是设置 Bookmarklet 了

javascript:location.href = 'org-protocol:///bookmark?'

然后,遇到一个有趣的页面,我点击这个 Bookmarklet 就完成保存了。

4 个赞

哈呀

很需要这个功能啊,阁下有自己的blog吗,我想看看详细的操作步骤

1 个赞