最近开始尝试用 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 就完成保存了。