yupanzi

如何发布我的博客笔记

· 3 分钟阅读

技术选型

原本可以一直使用 WordPress 的,但是同时也越发觉着 CMS 系统的”臃肿”,当然,这是个人观点。程序员总是追求所谓的”高效”,原本还想用 MarkDown 的方式发布博客,不过随着探究的深入,最终还是选定 Org-mode 的方式,能够满足笔记与博客两者,算是兼得吧。

如何发布

编辑器当然是 Emacs 了,但编辑内容还是 vi 模式比较舒服,所以找到了 Evil 这个插件。当用 Emacs 编辑好文章后,M-x org-publish-project RET blog RET 即可,如果只有一个项目那就直接用 M-x org-publish-all RET

通过 git 保存源文件,通过 rsync 同步生成的文件。

本地配置

具体可以参见 Publishing Org-mode files to HTML 以及一些导出选项 Options for the exporters

(require 'ox-publish)
(setq org-publish-project-alist
      '(
    ("blog-notes"
     :base-directory "~/org/blog/notes/"
     :base-extension "org"
     :publishing-directory "~/org/html/"
     :recursive t
     :publishing-function org-html-publish-to-html
     :section-numbers nil ; 不显示段落数字
     :auto-sitemap t ; 自动生成站点地图
     :sitemap-filename "index.org" ; 站点地图的文件名
     :sitemap-title "" ; 站点的标题
     :sitemap-sort-files anti-chronologically ; 站点文件排序方式, 时间倒序
     :sitemap-file-entry-format "%d %t" ; 站点文件的链接格式"时间 标题"
     :language "zh-CN"
     :author ""
     :html-doctype "html5"
     :html-preamble "<a href=\"index.html\">首页</a>" ; 导航栏内容
     :html-postamble "" ; 评论栏内容, 可加载 Google 统计
     :html-head "<link rel=\"stylesheet\" type=\"text/css\" href=\"css/worg.css\"/>" ; 自定义 CSS
     )
    ("blog-static"
     :base-directory "~/org/blog/assets/"
     :base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf"
     :publishing-directory "~/org/html/"
     :recursive t
     :publishing-function org-publish-attachment
     )
    ("blog" :components ("blog-notes" "blog-static"))
    ))
(setq org-publish-use-timestamps-flag nil) ; 不使用时间戳标识

目录结构

org
├── blog
│   ├── assets
│   │   ├── css
│   │   │   └── worg.css
│   │   └── img
│   └── notes
│       ├── about.org
│       ├── how-to-publish-my-blog-notes.org
│       ├── how-to-site-my-blog-server.org
│       └── index.org
└── html

排坑记录

更新的时候,遇到了”Skipping unmodified file …”这种问题,查了一通资料,根据 org-publish doesn’t republish if you delete the .html fileUsing emacs org-mode, how to publish the unchanged files in a project 以及 将发布Org文件为HTML文件 给出的解决方案才明白,原来 Org-mode 使用 .org-timestamps 记录时间戳变更,如果想要将全部内容(包括未更改的)重新发布,有以下三种可选方式:

  1. 删除 .org-timestamps 目录
  2. 使用前缀强制发布,C-u M-x
  3. 在配置文件中取消时间戳标识,(setq org-publish-use-timestamps-flag nil)

为了方便以后发布,目前使用的是第3种方式。

参考链接

相关文章