面向 Emacs Lisp 程序员的静态站点生成器
- 页面
one.el * one.el * Install one.el * Getting started * How does one.el work? * one-default render function * Miscellaneous * one-ox * one-ox | headline * one-ox | src-block * one-ox | quote-block * one-ox | fixed-width and example-block * one-ox | links * one-ox | plain-list and item
面向 Emacs Lisp 程序员的 Static Site Generator
你是否曾经想编写一个博客:
- 包含在一个唯一的 org 文件中,
- 仅使用一个 Emacs 命令即可渲染,
- 可以通过编写 Emacs Lisp 代码(以及 CSS)进行修改,
- 带有“html 模板”,这些模板是纯 Emacs Lisp 数据,
- 没有配置文件,
- 并且不依赖于外部静态站点生成器?
如果答案是肯定的,那么你可能对 one.el
感兴趣,它是一个简单的 Static Site Generator,专为 Emacs Lisp 程序员和 org-mode 用户设计。 要立即开始,请查看 Install one.el 和 Getting started 页面。 你可以在这里找到代码:https://github.com/tonyaldon/one.el。 尽管 one.el
使用 org-mode,但并非所有 org 元素都对构建技术博客站点有用(请参阅 Why one.el?)。 因此,只有少数 org 元素在 one-ox 中实现了一个转码器函数,one-ox
是 one.el
使用的 org 后端,用于构建默认网站(请参阅 one-default render function)。 在依赖 one.el
之前,请检查 Org elements not supported。 在 one.el
中,以下 org 文档定义了一个包含 3 个页面的网站,我们在访问它时通过调用 one-build
命令来构建它:
* My website
:PROPERTIES:
:ONE: one-default-home
:CUSTOM_ID: /
:END:
Welcome to my website!
* Blog post 1
:PROPERTIES:
:ONE: one-default
:CUSTOM_ID: /blog/page-1/
:END:
My first blog post!
* Blog post 2
:PROPERTIES:
:ONE: one-default
:CUSTOM_ID: /blog/page-2/
:END:
My second blog post!
请注意,如果我们想使用默认的 css 样式表,我们可以在构建网站之前调用 one-default-add-css-file
来添加它。 第一个 CUSTOM_ID
org 属性中的路径 /
告诉 one.el
,“My website”页面是主页。 该页面使用 one-default-home
渲染函数进行渲染,该函数是同一标题的 ONE
org 属性的值。 第二个 CUSTOM_ID
org 属性中的路径 /blog/page-1/
告诉 one.el
,我们要以这样一种方式渲染“Blog post 1”页面,即当我们本地在 http://localhost:3000
上提供我们的网站时,该页面在 http://localhost:3000/blog/page-1/
上提供。 该页面的渲染方式由同一标题的 ONE
org 属性的值决定,该值为 one-default
,是一个渲染函数。 最后一页“Blog post 2”也是如此。 正如你可能已经注意到的,one.el
网站是一个 org 文件,其中页面是级别 1 的标题,并设置了 org 属性 ONE
和 CUSTOM_ID
。 仅此而已! ONE
是 one.el
添加的唯一 org 属性。 它的值是一个 Emacs Lisp 函数,它返回一个 HTML 字符串,对于给定的页面,它决定了 one.el
如何渲染该页面。 页面的路径使用 CUSTOM_ID
org 属性设置。 话虽如此,如果你想尝试一下,可以查看 Install one.el 和 Getting started 页面。
为什么选择 one.el?
我编写 one.el
是因为我没有找到满足以下要求的现有静态站点生成器:
- 我不是在寻找适用于每种类型网站的解决方案,而只是针对技术博客站点,这些站点基本上是被文本包围的代码块,
- 我想要一些简单易懂的东西,并且只能通过编写一些 Emacs Lisp 来修改,
- 我希望网站被写入单个 org 文件,
- 我想要一些除了 emacs 包之外没有依赖项的东西,这些包不是用来提供其他静态站点框架的桥梁,
- 我想要一些没有配置选项的东西,如果你想修改某些东西,你可以编写 Emacs Lisp 代码,并且
- 最后,我想要一个为 Emacs 用户提供的 Emacs 解决方案。
遵循这些要求让我开发了 one.el
,这是一个有主见的静态站点生成器,适用于 Emacs Lisp 程序员和 Org mode 用户,如果你想构建像以下网站一样的东西,它会很好地工作:
- minibuffer (source): 一次学习一个 sexp 的 Emacs Lisp,
- Elisp posts: 一些关于 Emacs Lisp 的文章,
- jack: Emacs Lisp 的 HTML 生成器库,
- one.el: one.el 包的文档,
- LNROOM: 学习如何在 Core Lightning 上进行 hack 和
- https://tonyaldon.com。
全部使用 one.el
构建。