通过 Org 模式管理 Chromium 和 Firefox 会话
创始人
2024-03-02 04:34:28
0

我是会话管理器的铁粉,它是 Chrome 和 Chromium 的小插件,可以保存所有打开的选项卡,为会话命名,并在需要时恢复会话。

它非常有用,特别是如果你像我一样,白天的时候需要在多个“思维活动”之间切换——研究、开发或者阅读新闻。或者你只是单纯地希望记住几天前的工作流(和选项卡)。

在我决定放弃 chromium 上除了 uBlock Origin 之外的所有扩展后,就必须寻找一些替代品了。我的主要目标是使之与浏览器无关,同时会话链接必须保存在文本文件中,这样我就可以享受所有纯文本的好处了。还有什么比 org 模式更好呢 ;)

很久以前我就发现了这个小诀窍:通过命令行获取当前在谷歌 Chrome 中打开的标签 再加上些 elisp 代码:

(require 'cl-lib)

(defun save-chromium-session ()
  "Reads chromium current session and generate org-mode heading with items."
  (interactive)
  (save-excursion
    (let* ((cmd "strings ~/'.config/chromium/Default/Current Session' | 'grep' -E '^https?://' | sort | uniq")
           (ret (shell-command-to-string cmd)))
      (insert
       (concat
        "* "
        (format-time-string "[%Y-%m-%d %H:%M:%S]")
        "\n"
        (mapconcat 'identity
                   (cl-reduce (lambda (lst x)
                                (if (and x (not (string= "" x)))
                                    (cons (concat "  - " x) lst)
                                  lst))
                              (split-string ret "\n")
                              :initial-value (list))
                   "\n"))))))

(defun restore-chromium-session ()
  "Restore session, by openning each link in list with (browse-url).
Make sure to put cursor on date heading that contains list of urls."
  (interactive)
  (save-excursion
    (beginning-of-line)
    (when (looking-at "^\\*")
      (forward-line 1)
      (while (looking-at "^[ ]+-[ ]+\\(http.?+\\)$")
        (let* ((ln (thing-at-point 'line t))
               (ln (replace-regexp-in-string "^[ ]+-[ ]+" "" ln))
               (ln (replace-regexp-in-string "\n" "" ln)))
          (browse-url ln))
        (forward-line 1)))))

那么,它的工作原理是什么呢?

运行上述代码,打开一个新 org 模式文件并调用 M-x save-chromium-session。它会创建类似这样的东西:

* [2019-12-04 12:14:02]
  - https://www.reddit.com/r/emacs/comments/...
  - https://www.reddit.com/r/Clojure
  - https://news.ycombinator.com

也就是任何在 chromium 实例中运行着的 URL。要还原的话,则将光标置于所需日期上然后运行 M-x restore-chromium-session。所有标签都应该恢复了。

以下是我的使用案例,其中的数据是随机生成的:

#+TITLE: Browser sessions

* [2019-12-01 23:15:00]...
* [2019-12-02 18:10:20]...
* [2019-12-03 19:00:12]
  - https://www.reddit.com/r/emacs/comments/...
  - https://www.reddit.com/r/Clojure
  - https://news.ycombinator.com

* [2019-12-04 12:14:02]
  - https://www.reddit.com/r/emacs/comments/...
  - https://www.reddit.com/r/Clojure
  - https://news.ycombinator.com

请注意,用于读取 Chromium 会话的方法并不完美:strings 将从二进制数据库中读取任何类似 URL 字符串的内容,有时这将产生不完整的 URL。不过,你可以很方便地地编辑它们,从而保持会话文件简洁。

为了真正打开标签,elisp 代码中使用到了 browse-url,它可以通过 browse-url-browser-function 变量进一步定制成运行 Chromium、Firefox 或任何其他浏览器。请务必阅读该变量的相关文档。

别忘了把会话文件放在 git、mercurial 或 svn 中,这样你就再也不会丢失会话历史记录了 :)

那么 Firefox 呢?

如果你正在使用 Firefox(最近的版本),并且想要获取会话 URL,下面是操作方法。

首先,下载并编译 lz4json,这是一个可以解压缩 Mozilla lz4json 格式的小工具,Firefox 以这种格式来存储会话数据。会话数据(在撰写本文时)存储在 $HOME/.mozilla/firefox//sessionstore-backup /recovery.jsonlz4 中。

如果 Firefox 没有运行,则没有 recovery.jsonlz4,这种情况下用 previous.jsonlz4 代替。

要提取网址,尝试在终端运行:

$ lz4jsoncat recovery.jsonlz4 | grep -oP '"(http.+?)"' | sed 's/"//g' | sort | uniq

然后更新 save-chromium-session 为:

(defun save-chromium-session ()
  "Reads chromium current session and converts it to org-mode chunk."
  (interactive)
  (save-excursion
    (let* ((path "~/.mozilla/firefox//sessionstore-backups/recovery.jsonlz4")
           (cmd (concat "lz4jsoncat " path " | grep -oP '\"(http.+?)\"' | sed 's/\"//g' | sort | uniq"))
           (ret (shell-command-to-string cmd)))
...
;; rest of the code is unchanged

更新本函数的文档字符串、函数名以及进一步的重构都留作练习。


via: https://acidwords.com/posts/2019-12-04-handle-chromium-and-firefox-sessions-with-org-mode.html

作者:Sanel Z 选题:lujun9972 译者:lujun9972 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

火狐Firefox 146...
IT之家 12 月 9 日消息,火狐 Firefox 浏览器 14...
2026-01-20 11:26:42
Manus首席科学家季逸超...
Manus首席科学家季逸超和张小珺对谈,是2025年最重要的一篇中...
2026-01-11 20:48:15
Opera“AI浏览器”N...
Opera的AI浏览器Neon正式向公众推出,用户需要每月支付19...
2025-12-12 12:17:01
蚂蚁旗下通用AI助手灵光上...
12月9日消息,蚂蚁集团全模态通用AI助手灵光正式推出网页版,补全...
2025-12-09 12:16:38
Mozilla进一步拥抱A...
IT之家 11 月 14 日消息,又有一个“AI 浏览器”要来了,...
2025-11-14 09:16:03
OpenAI发布AI浏览器...
截至2025年10月27日 09:32,中证沪港深游戏及文化传媒指...
2025-10-27 10:15:08

热门资讯

如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Textual:为 Pytho... 快速入门使用 TextualPython 在 Linux 上有像 TkInter 这样的优秀 GUI...
硬核观察 #1245 Open... #1 OpenAI 悄然删除禁止将 ChatGPT 用于 “军事和战争” 的禁令在 1 月 10 日...
使用时间序列数据,用开源工具助... InfluxData 是一个开源的时间序列数据库平台。下面介绍了它是如何被用于边缘应用案例的。收集到...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
硬核观察 #1249 LG 洗... #1 LG 洗衣机每天上传近 4GB 的数据?一个名为 Johnie 的 LG 洗衣机用户发现,他的...
2024 年 Linux 和开... 让我们尝试预测未来吧!新的一年快乐,朋友们 ✨2024 年的钟声已经敲过,我们有必要去预见一下将塑造...