拷贝浏览器链接到 org-mode

发布: 2021-12-26   更新: 2024-02-24   标签: tips org-mode

文章目录

在 org-mode 里写博客文章时,经常会旁征博引一些链接,之前都是用 C-c C-l(org-insert-link) 的快捷键来输入链接,但这是个费事费力的事情,需要去浏览器里面拷贝两次,一次是链接,一次是标题,有没有更好地方式呢?答案是肯定的。不同浏览器做法大同小异,这里以 macOS 上的 Safari 与 Firefox 为例说明。

Safari

在 macOS 中,可以使用下面的 applescript 脚本来获取 org 格式的链接:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/usr/bin/osascript

# @raycast.title Copy URL as org-capture
# @raycast.packageName org-capture-url-safari
# @raycast.mode silent
# @raycast.schemaVersion 1


tell application "Safari"
    set tab_link to URL of front document
    set tab_title to NAME of front document
    set org_link to ("[[" & tab_link & "]" & "[" & tab_title & "]]")
    set the clipboard to org_link
    display notification org_link with title "链接复制成功"
end tell

我这里封装成了 Raycast 中可以调用的格式。

https://img.alicdn.com/imgextra/i2/581166664/O1CN016HmVsr1z6A73zIseR_!!581166664.png
Raycast 调用示范

Firefox

按理来说,Firefox 也可以参考 Safari 的做法,但是 Firefox 有个长达 20 年的 bug:

因此只能另辟蹊径,虽然网上有些 hack 的解法,但是我觉得太复杂了,不如直接用 userscript 来解决(完整代码可参考 web-util.js):

1
2
3
4
5
6
7
8
9
function copy_as_org_capture() {
  const url = window.location.href;
  const title = window.document.title;
  GM_setClipboard(`[[${url}][${title}]]`);
  alert(title);
}
GM_registerMenuCommand("org-capture", copy_as_org_capture);

VM.shortcut.register('c-i', copy_as_org_capture);

这样既能在快捷菜单中,通过点击来实现链接的复制,也能通过快捷键 C-i 来复制。

https://img.alicdn.com/imgextra/i2/581166664/O1CN01dSLObd1z6A7CdhPcw_!!581166664.png
油猴脚本快捷菜单

org-mac-link

在本文发布后,有热心读者提到在 macOS 上已经有这方面的轮子了:org-mac-link.el,原理也是通过 applescript 来获取链接信息,源码在这里。我自己试用了下,Firefox 不能正常拷贝,Safari 实现和本文一致,感兴趣的读者可以自己尝试下。这个插件使用很简单:

1
2
3
4
(use-package org-mac-link
  :defer t
  :load-path "~/.config/vendor/org-contrib/lisp" ;; org-contrib 的本地路径
  :commands (org-mac-grab-link))

参考



收听方式

反馈