用Emacs Org-Mode来建站
很多朋友问到我这个站点是怎么搭建出来的。不过我的感觉是,他们可能更多地是对我积累了这么多文章感到好奇,而不仅仅是这个站点的搭建感兴趣。 因为其实只要有个简单的Wordpress或者是Github Pages也能做到这样,唯一的差别还是是否愿意长期往这个站点里面添加文章和内容。 说来惭愧,我的这个站点里面大部分的内容都不是原创的,东抄一点西抄一点,抄别人的文章,翻译别人的文章和论文等等。
既然问的同学多了,我就简单地说说我这个站点是怎么搞的。代码仓库在 这里
- src 原始org文件
- src/images 图片和PDF等静态资源文件
- html 生成html文件
- scripts
- publish/publish.el 发布脚本
- pp-html 处理org生成的html文件,添加评论以及GA等代码
- gen-404 生成404.html
- codes 非生产代码
- sitemap.xml/txt 站点导图
- 404.html/index.html
- themes 站点样式配置
publish.el 文件如下:
- 载入.emacs文件,里面有一些辅助函数比如 `get-string-from-file`
- 设置站点发布配置:哪些目录,发布到哪里,样式如何等等
- 调用 `org-publish-project` 发布站点
CSS文件可以参考这个链接 CSS for Org-exported HTML 原始文件
;; load env (load "~/.emacs.d/init.el") ;; http://orgmode.org/worg/org-tutorials/org-publish-html-tutorial.html (require 'ox-publish) ;; TODO(yan): 在下面设置 :html-head 一直有问题 ;; 显示 Wrong type: sequencep my-org-publish-html-head ;; 但是在这里如果检查变量的话,的确是满足sequencep的。 ;; 暂时找不到原因。不过如果放在 publish.el 下面设置 (setq org-html-head ...) 是可以work的 ;; 现在解决方案是将这个处理放在pp-html里面,这样的好处是可以快速地修改样式, ;; 而不用每次对整个项目重新输出,速度更快。 (setq my-org-publish-html-head (replace-regexp-in-string "root/" "/" (get-string-from-file "~/repo/dirtysalt.github.io/themes/setup.txt"))) ;; (message my-org-publish-html-head) ;; (when (sequencep my-org-publish-html-head) ;; (message "IT'S SEQUENCE")) (setq org-publish-project-alist '(("pages" :base-directory "~/repo/dirtysalt.github.io/src/" :publishing-directory "~/repo/dirtysalt.github.io/html/" :recursive nil :html-head-include-default-style nil ;; TODO(yan): seqeuncep my-org-publish-html-head failed?! ;; :html-head my-org-publish-html-head :html-head "" :publishing-function org-html-publish-to-html :with-toc 't) ("site" :components ("pages" "blogs")))) ;; (setq my-org-publish-html-head ;; (replace-regexp-in-string ;; "root/" "/" ;; (get-string-from-file "~/repo/dirtysalt.github.io/themes/setup.txt"))) ;; (setq org-html-head my-org-publish-html-head) (org-publish-project "site")