目录

org mode写博客

org基本和markdown类似,但是更加强大,配合emacs使用更加优雅,因此考虑将写博客的流程切换到org,下面将介绍org mode写博客的具体操作。

写作方式选择

org mode写博客需要配合ox-hugo, Spacemacs只需要在org layers中添加如下变量即可:

(org :variables
     org-enable-hugo-support t)

ox-hugo有两种博客组织方式:

  1. 一个子结构对应一篇博客
  2. 一个org文件对应一篇博客

第一种方式的优点是不需要针对每一个org文件管理一些参数设置,同一个org文件设置的参数针对文件中所有博客都有效。因此推荐使用第一种博客组织方式,但混合第二种,博客内容过多则采用多个org文件。第一种方式文章YAML元信息中的title属性值就是一级子结构名称。

配置参数

写作之前需要配置一些参数,就可以将ord文件正确转换为md文件并存储到正确的hugo框架中存放博客的位置。

#+hugo_base_dir: ~/narcissusBlog/
#+hugo_section: ./posts/
#+hugo_front_matter_format: yaml
#+options: author:nil
#+hugo_auto_set_lastmod: t

配置说明:

  • #+hugo_base_dir表示博客根目录
  • #+hugo_section表示生成md文件位置,如上配置表示位置为博客根目录下/content/posts/
  • #+hugo_front_matter_format表示md文件front matter嵌入类型,默认是TOML,可以配置为YAML
  • #+options: author:nil表示不自动添加作者到YAML中, 这样配置是因为默认添加的是列表,会导致生成md文件无法导出成博客,只能单独每一篇博客手动添加author
  • #+hugo_auto_set_lastmod设置为真,将会自动添加lastmod元信息到YAML中

每一个一级树下面就是一篇博客, 需要为每一篇博客配置单独的内容,比如导出文件名,博客的YAML等内容,示例代码如下:

:PROPERTIES:
:EXPORT_FILE_NAME: [file_name]
:EXPORT_DESCRIPTION: 使用org mode和ox-hugo写博客.
:EXPORT_HUGO_CUSTOM_FRONT_MATTER: :key value
:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :key '(value1, "value2")
:END:

制定了导出文件名、博客描述和front-matter参数,添加多个后面会多一个+符号。

md文档YAML的元信息中包含date属性,这是来自于标题变成DONE状态后的CLOSED时间。但因为只需要日期而不需要时间,可以在org layers中设置如下变量为nil来实现:

(org :variables
     org-log-done-with-time nil)

导出为md文件

导出指定subTree结构为md文件,光标定位到具体位置,使用快捷键 , e e H H, 当然也可以导出当前org文件的所有博客等选项,会有提示按键。

标签与类别

当给博客的标题设置了标签属性后,导出的YAML元信息中将包含标签属性。或者使用 EXPORT_HUGO_TAGS 属性设置当前博客的标签。

博客YAML中的categories属性可以通过使用 EXPORT_HUGO_CATEGORIES 进行设置,或者使用标题的标签属性进行设置,不过该标签需要添加@作为前缀。

实时预览

如果编辑博客时,每一次更改想要在浏览器中看到修改效果,都需要先转换org文件到md文件,则会非常麻烦。因此需要实时预览,每次保存org文件后,hugo 启动的服务端会自动更新该次变更。

总共有如下两步:

  1. 启动 org-hugo-auto-export-mode 的次要模式。启动该次要模式可以仅作用于org文件或者整个项目,仅作用于一个org文件需要在org文件最末尾添加如下代码。
    ​* Footnotes
    ​* COMMENT Local Variables  :ARCHIVE:
    # Local Variables:
    # eval: (org-hugo-auto-export-mode)
    # End:
    
    上述代码添加后,需要重启该buffer,这将会确保该次要模式的启动更新有效。
  2. hugo启动服务器时,开启实时更新模式。使用如下代码启动hugo服务器:
    hugo server -D --navigateToChanged
    
    -D 参数将会加载草稿博客, –navigateToChanged 会启动实时预览。