日知录

学而不思则殆

使用 org-page 搭建个人博客

故事要从多年前接触到的 Emacs - Muse 说起。算起来那是八、九年前了, 组织上 鬼使神差,不知怎么地就叫俺去做软件开发,而且一上来就是高难度的——所谓“高性能并行计算”。那时候国内一窝蜂的上 HPC 项目,都是做“烧钱”堆机器的事情,可以在“高、大、上”机器上跑起来真正有实际工程意义的作业基本上没有。原因很简单,缺乏大型的工程并行计算应用软件,国外有,但人家政府不让卖,因为这玩意首选的应用领域,在国防、军事上。那时候,国内也就中科院有几个学者在这上面做过一些算得上真正意义上的 HPC应用软件 科研工作。而我不过是个画图的,充其量也就是使用商业计算软件完成计算作业的一个 软件用户 而已。开发软件?完全找不到北!!!

一切从“偷”开源代码开始,光是“读程序”就叫人心浮气躁。记笔记是少不了的,还要说人家老一代的科技工作者素养好,记得当时返聘了一位已经退休的老研究员。每天跟我们几个年轻小伙子一起读 Adina 软件的代码,写的笔记工工整整,比我们现在电脑排版打印的看起来还整齐美观。而我就"臭"了,不光不讲逻辑,而且记的凌乱。小本本用了不知多少,信手拈来的薄记纸片也塞满了抽屉。总之,只在当时起到一点强化记忆的作用,事后完全不可追查,都成了废纸。

大概到第三年头上,无意中发现了 Emacs - Muse ,妙在简便易用,而且可以输出为 TexHtml ,打印与浏览同时具备了。此后,我就用它完成笔记和交流。可惜,很快我就不做那个工作,新的工作不大需要做笔记,这个东东也就丢下了。

最近,迷上了读书,突然发现除了工作之外,还有那么多好玩而又深沉的事情。阅读、思考之余也用 LaTeX 摘要、薄记一些心得体会。可这个东东主要用来展示的,书写的时候为了信息和逻辑上略微完整些,常常“节外生枝”,不仅很是消耗时间,稍不小心就打断了之前的阅读和思想。这两天,突然发现 Emacs Org-mode 的“大纲、标签和计划”功能“酷不堪言”,兴趣一下子从“求知”转向“器用”上来了。

吸取之前的教训,笔记不能总是藏在抽屉里,不时的晒出来温习一下才能唤回“美好的回忆”所以这次先从 Blog 搞起。

讲废话已经花了不少时间,该干正事了。话说弄这个 Org Page 还是花了点功夫才把它搞通的,今天就先把这个过程记录下来。

必须事先申明:

  1. Org Page 插件作者为 Kelvin Hu 1
  2. 初次尝试,下载了 Kelvin Hu 的博客源代码

利用 Org-Page 跑通本地 Blog

Org-page 安装

由于依赖很多其他的插件,利用 melpa 安装是个比较好的选择。Emacs 24 已经自带 melpa 但缺省提取的只是“稳定”插件列表, org-page 不在其中,因此需要在 .emacs 文件中作如下配置:

;; melpa 包管理的配置
(require 'package) ;; You might already have this line
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
;; (add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)
(when (< emacs-major-version 24) ;; For important compatibility libraries like cl-lib
  (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/")))
(package-initialize) ;; You might already have this line

使用命令 M-x package-list-packages 找到 org-page 安装即可。注意还有四五个依赖包, org-page 包安装页面会给出提示,包列表也都能找到,一起安装之。

Org-page Blog 项目配置

配置 Blog 项目的 org 源文件目录:

;; org-page 生成页面的配置
;; (add-to-list 'load-path "path/to/org-page")                  ;; only needed if you install org-page manually
(require 'org-page)
(setq op/repository-directory "D:/emacs/MyOrg/org-page/")       ;; the repository location
(setq op/site-domain "https://victor72.github.io/")             ;; your domain
;;; the configuration below you should choose one, not both
(setq op/personal-disqus-shortname "victor72githubio")          ;; your disqus commenting system
;;; (setq op/personal-duoshuo-shortname "your_duoshuo_shortname")  ;; your duoshuo commenting system

本地源 org 库初始化

  1. 首先,在想写 blog 的文件夹(D:/emacs/MyOrg/org-page)下用 git init (git的安装使用这里就不罗嗦了)建立一个 git repository ,这时得到一个空的库及其 .git 记录;
  2. 创建并进入 source 分支: git checkout -b source ;
  3. 新建三个基本文件:
    • blog 文件夹: 主要的 blog 文件放里面。
    • about.org 文件:在这里介绍自己。
    • index.org 文件:在这里写自己博客的首页。
  4. git add . ; git commit。

我偷懒,暂时直接下载使用了 Kelvin Hu 的博客源代码

本地 blog 输出

进入 emacs 执行 M-x op/do-publication 命令。交互过程中大概是先输入两个 “y”,然后输入生成的静态网页文件存放的位置,我是放在: D:/emacs/MyOrg/org-page2html/

至此告一段落,可以看到网页文件了。由于页面上的各种交叉链接地址,是按照将来发布的根目录为基准书写的。因此如果没有开通本地网页服务,暂时只能一个一个打开浏览。

待办事项

DONE 页面风格主题定制

  • 正常定制法

使用命令 M-x customize-group 再输入 org-page 即可。(这种定制法定制能力有限)

  • hack定制法

参看 themes 文件夹,里面的 template 文件夹使用了 mustache 模板 。而另外一个 source 文件夹有 css、js 等文件,这些东西能让你制作一个漂亮的界面了,毕竟标签不多。(但还需要学习!汗!)

关于 org-page 的正常定制法以及 custom 页面里各个选项的含义,还需进一步研究……

DONE 本地浏览

基于 emacs 的 simple-httpd 来进行站点本地测试。

(require 'simple-httpd)
(defun kd/test-org-page (&optional site)
  "test the org-page's main repository"
  (interactive (let ((sitet (read-string "测试静态站点名:")))
                 (list sitet)))
  (cond ((equal site "victor72")
         (op/do-publication t nil "~/MyOrg/victor72.github.io")
         (httpd-serve-directory "~/MyOrg/victor72.github.io")
         )

        ;;emacs-china
        ((equal site "emacs-china")
         (op/do-publication t nil "~/MyOrg/emacs-china.github.io")
         (httpd-serve-directory "~/MyOrg/emacs-china.github.io")
         )
        (t (message "error! no repository"))))

生成网页结束后,在 emacs 里头分别执行 M_x httpd-serve-directory ; M_x httpd-start 设置本地网页服务器根目录地址和启动服务。然后就可以在浏览器通过 http://127.0.0.1:8080 访问网站了。

DONE 页面目录定制

可以在 .emacs 文件中开 (setq org-export-with-toc t) 全局配置,也可以在单个文件中 #+OPTIONS: toc:t 打开,或 toc:nil 关闭。

DONE 评论插件

经验证,前述配置已经生效。

TODO 顶部导航尾与部信息的个性化

DONE 文档必须转换为 unix utf-8 编码。

在 windows 环境下,关于 gbk 与 utf-8 编码的冲突,暂时只出现于 emacs_love 主题文件夹中的 footer.mustache 文件。在关于添加评论插件代码处,用到了中文,gbk 编码下是乱码,改变之即解决问题。

DONE 关于站内 google 搜索问题

同样是 emacs_love 主题文件夹中 nav.mustache 文件,关于谷歌搜索插件代码处,谷歌检索地址过时,改为 https://www.google.com 即可。

Footnotes:

1

本来想用 Kelvin Hu(改名 kuangdash 了?) 较新的 NGO ,可是有个主题文件 ego-map.el 尚未实现,就退而求其次,没再折腾了。呵呵!!!

Comments

使用Disqus评论 使用多说评论
comments powered by Disqus