上周,作者在博客中介绍了将浏览器用作终端模拟器,该帖子在lobster.rs上引起了很多关注,并收到了一些有趣的反馈。
最常见的批评是从浏览器标签运行终端本质上不安全,还有一些关于设置复杂性的担忧,以及它需要始终运行服务器这一事实。
作者很高兴地宣布有了解决方案:Tweety现在作为 Chrome 扩展分发!展示了 Tweety 扩展在侧边栏的截图。
Chrome 扩展有很多有趣的 API 可利用,除了在浏览器标签中放置终端,还可以创建为侧边栏或开发工具面板!
由于 Chrome 扩展页面有一个 URL,可以利用查询参数打开特定视图,如chrome-extension://<your-extension-id>/term.html?app=ssh&arg=vps
打开 SSH 模式的终端并连接到vps
主机,chrome-extension://<your-extension-id>/term.html?app=nvim&file=/home/pomdtr/.bashrc
在 neovim 中打开.bashrc
文件。
如果要为特定应用创建 URL,可以在~/.config/tweety/apps
中创建脚本,如创建~/.config/tweety/apps/htop
脚本,内容为#!/bin/sh; exec /usr/local/bin/htop
,就会得到 htop 的新 URL:chrome-extension://<your-extension-id>/term.html?app=htop
。
The most underrated extension API: Native Messaging
Native Messaging API允许 Chrome 扩展与在用户计算机上运行的本机消息主机通信。在本例中,本机消息主机将是tweety
cli,可以使用 Homebrew 安装:brew install pomdtr/tap/tweety; tweety install --extension-id <your-extension-id>
(目前需要手动安装扩展,因为尚未在 Chrome 网上应用店发布)。安装扩展后,浏览器每次启动时都会查找扩展注册的本机消息主机,如果主机未运行,浏览器将启动它(注意:本机消息主机必须单独安装)。主机通过标准输入和输出(stdin/stdout)与扩展通信。打开新的 Tweety 标签时,扩展将向本机主机发送消息,本机主机将启动终端模拟器会话并返回 WebSocket URL 给扩展,扩展然后使用此 URL 连接到终端模拟器并在标签中显示终端。
Proxying the chrome extension api through the tweety
cli
除了 WebSocket 服务器,tweety 服务器还将开始在 Unix 套接字上监听 JSON-RPC 命令。可以从tweety
CLI 利用此 Unix 套接字从 shell 访问扩展 API。如截图中tweety tabs query
映射到chrome.tabs.query
API。可以使用 cli 工具jq
组合这些 tweety 命令,并立即构建自己的脚本。例如,一个生成当前标签的 Markdown 链接的脚本:#!/bin/sh; CURRENT_TAB=$(tweety tabs get); URL=$(echo "$CURRENT_TAB" | jq -r.url); TITLE=$(echo "$CURRENT_TAB" | jq -r.title); printf "[%s](%s)" "$TITLE" "$URL" | pbcopy
,将此脚本存储在~/.config/commands/copy-markdown-link
中,它将作为tweety
CLI 的子命令添加。还有用mods总结当前博客文章的截图。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。