网页剪藏是我感觉 org mode 不如 obsidian, notion 等方便的地方. org-web-tools-read-url-as-org 转换效果大多数时候都不让我满意, 所以我通常是先拷贝到 obsidian, 再用 pandoc 转为 org mode. 有时候效果也不太好, 而且为了剪藏网页我还得开着 obsidian.
我想到, 如果对 shr 中解析 DOM 比如 shr-tag-a
进行 override, 使之显示 org-mode 的内容, 比如:
(defun my/shr-tag-a (dom)
(let ((url (dom-attr dom 'href))
(title (dom-text dom)))
(insert (format "[[%s][%s]]" url title))
))
或许能让 eww 直接显示 org-mode 内容, 这样就非常方便了. 想问有按这个思路现成的包么? 或者你们有更好的剪藏网页的思路么?
懒猫大神的 EAF 浏览器中集成了 Readability,可以做到很好的提取网页正文。
我个人对于想要保存的网页采用的流程是:
- 使用 eaf 浏览器打开网页
- M-x eaf-py-proxy-insert_or_switch_to_reader_mode 切换到 reader_mode,该命令会帮我提取正文。并且我在 eaf 的 Python 源码 /Users/c/.emacs.d/elpa/29.3/develop/eaf-20240321.230436/app/browser/buffer.py 的
switch_to_reader_mode 中做了小小的 hack:
@interactive(insert_or_do=True)
def switch_to_reader_mode(self):
if self.buffer_widget.execute_js("document.getElementById('readability-page-1') != null;"):
message_to_emacs("Reader mode has been enable in current page.")
else:
self.load_readability_js()
html = self.buffer_widget.execute_js("new Readability(document).parse().content;")
if html is None:
self.refresh_page()
message_to_emacs("Cannot parse text content of current page, failed to switch reader mode.")
else:
self.buffer_widget.setHtml(get_emacs_var("eaf-browser-reader-mode-style") + html)
eval_in_emacs("hurricane/html-to-org-with-pandoc", [html])
注意最后一句 eval_in_emacs("hurricane/html-to-org-with-pandoc", [html])
是我自己添加的,只添加了这里。
而 hurricane/html-to-org-with-pandoc
是我自己定义的函数:
(defun hurricane/html-to-org-with-pandoc (html)
(kill-new (org-web-tools--html-to-org-with-pandoc html)))
该函数非常简单就是使用 org-web-tools 包中的函数 org-web-tools–html-to-org-with-pandoc 将 eaf Readability 提取的正文经 pandoc 转换为 org mode,并 kill-new 到剪贴板。
- 打开 org 文件,粘贴上一个步骤获得的网页正文。
对于粘贴到 org 文件的网页正文中的图片链接,我是使用
(defun hurricane/org-download-images ()
(interactive)
(let* (($inputStr (if (use-region-p)
(buffer-substring-no-properties (region-beginning) (region-end))
(let ($p0 $p1 $p2
($pathStops "^ \t\n\"`'‘’“”|[]{}「」<>〔〕〈〉《》【】〖〗«»‹›❮❯❬❭〘〙·。\\"))
(setq $p0 (point))
(skip-chars-backward $pathStops)
(setq $p1 (point))
(goto-char $p0)
(skip-chars-forward $pathStops)
(setq $p2 (point))
(goto-char $p0)
(buffer-substring-no-properties $p1 $p2)))))
(next-line)
(org-download-image $inputStr)
(org-display-inline-images)))
这个函数手动下载,具体看 GIF 演示。
2 个赞
我在 gnus 这类使用 shr 渲染 HTML 的包里使用 org-eww-copy-for-org-mode 复制 HTML 到 org 里
网页剪藏的话,我用 wallabag (有两个不错的 wallabag Emacs 包,但我还没试用),diigo 也不错。原则上不把整篇网页剪藏到 org。曾经我用 OneNote 的时候有过剪藏网页的习惯,后来发现把剪藏网页和自己的笔记混在一起非常糟糕:严重干扰搜索结果导致笔记搜索很难用。
大部分剪藏的网页,其实读完之后不太会看第二遍。而自己亲手写的笔记往往以后会几十次地重新搜索查看。使用频率是完全不一样的。
现在我的笔记是笔记,网页剪藏是网页剪藏。有可能会经常翻阅的网页会自行精炼之后写到笔记里。如果某个网页里有一段话我想直接复制到笔记里,用 Firefox 插件 Copy-as-Org-Mode
1 个赞
这个看起来效果很好, 就是我的主机用不了 eaf-browser