华丽的 Curl 网站
2026年3月18日(更新:2026年10月14日)很久以前,我添加了一个有趣的curl版本网站,用于在终端中查看。尝试运行这些命令!curl nytpu.com/gemlog/2026-03-18 # 或 curl nytpu.com(抱歉,Windows 用户,cmd.exe 默认禁用了 ANSI 转义代码,这不是我的错。而且在 Powershell 中,你必须使用 curl.exe 而不是 curl,因为 Powershell 不可思议地将其别名为 Invoke-WebRequest。)我在 Fediverse 上发表了一些内容,但没有详细说明,因为我认为这相当自解释。但我有几个人问我我是如何做到的,所以我决定实际上写一篇关于我如何做到的文章(……大约晚了七个月)。我应该注意,这个想法来自于 trinkey 的(curl trinkey.com)和 strongsand 的(curl proot.party)curl 网站,我并不是自己想出来的。尽管我确实以不同于他们的方式进行了,但这个非常酷的想法的所有功劳都归他们所有。(更新:不幸的是,他们的 curl 版本到 2026-10-14 都无法使用。)首先,因为这是更有趣的部分,实际上生成标记为 ANSI 的文件以发送给客户端。我完全手动编写了索引页和关于页。请注意,我相信 trinkey 和 strongsand 是使用 ratatui 库(或类似)动态生成他们的页面,这可能更方便;但对我来说,手写似乎更迅速。我将主要的转义代码—— ESC[ ,即 [ — 1 存储在 Vim 的寄存器中,以便在需要时轻松粘贴,然后打开维基百科页面参考特定的转义代码。嗯,就这些。我实验决定了一致的我喜欢的样式,并在制作标记为curl页面时参考了我的页面的 Gopher 版本。现在,我版本的显著之处在于,我拥有整个博客的 curl 版本,而不仅仅是可用的一两个页面。这完全是由于一个方便的巧合:四年前,我在用于我的博客的自定义标记语言 Gemroff 中实现了输出带有 ANSI 标记的纯文本。最初只是为了在撰写时方便在终端预览草稿;但将其直接接入我的静态网站生成器以立即生成 Curl 版本却显得微不足道。我确实手动为博客文章编写了一个包装模板,以及一个列出文章的索引页模板,但加上一些额外的语句就足以将其连接起来。这个是我很难说它简单的主要原因!因为对于我来说它只是因为我使用的是完全自定义的标记语言和静态网站生成器,并且我几年前正好做出了正确的设计选择——例如,我的 SSG 也恰好已经支持多种模块化的输出格式,而不仅仅是像其他 SSG 那样的 HTML,因为我将我的网站托管在 HTTP、Gemini 和 Gopher 上。可是,提供几个手写页面作为乐趣仍然是建立这样一个网站的完全可接受的方式,因为这只是一个不错的噱头,没人会真正用它超过几分钟的浏览时间。最后,最后一步是将你网站的 Curl 版本实际呈现给包含 curl 的任何用户代理,对我来说,只需对我的 Nginx 配置做几处更改,对于其他服务器来说,类似的也应当简单。我的主要特性是我想要一个覆盖头(X-Original: true),这样你仍然可以获得像随便运行 Curl 的人所希望的未修改的 HTTP 响应,我希望一切仍然静态提供。就这样!正如我所说,当我第一次设置时,对我来说似乎是相当自解释的,但它与人们通常使用的 Web 服务器或 ANSI 转义代码非常不正交,所以我能理解人们的好奇心/困惑来自哪里。看到更多网站采用这个技巧还是很酷的!EMDASH!AI 生成!实际上我想让你知道,自2022年11月以来,我的标记语言就有用于 emdash 的明确标记元素。信不信由你:大型语言模型是基于实际作者的内容进行训练的,所以如果人类作品中没有使用 emdash,大型语言模型就不会使用它。那我,该不该避免一段二十个插入语的段落,以至于我需要使用 emdash 来变化一下呢?不可想象!
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡