org-mode publishing

在主观愿望与客观条件的双重压迫下,我开始尝试org-mode publishing作为内容发布的一种方式,目前仍处于探索中。源代码在http://www.wanglianghome.org/svn/org/,发布的内容参见http://www.wanglianghome.org/org/。不可否认,org有点多,但我没想到更好的。页面很丑,我又缺乏美化的专业知识,也只能慢慢来了。

由于org-mode的发布功能很强大,makefile就写得比较简单。没有选择直接发布到远程服务器是因为网络速度限制,对实现频繁发布、预览有困难,因此首先选择发布到本地,检查无误之后,再一并同步到远程服务器。由于使用了rsync,可以将网络流量进一步减少。

org-publish这个函数的说明和实现都很简单,试了好久才明白怎么用,具体参见http://www.wanglianghome.org/svn/org/trunk/publish.el

另外就是同步到远程服务器每次都要输入密码很麻烦,我选择重用SSH连接的方式,避免了密码输入。

Website backup task

我会在每个月最后一天备份网站,如果最后一天是周五或者周末,那么就在这一周的周四备份。由于记性不大好,所以需要有个提醒。之前一直用RTM,可惜我这个规则有点复杂,没法在RTM里面描述,导致经常要修改任务日期,有点麻烦。有时候稍不留神就错过了。

今天终于无法忍受,改用Org Mode了。方法就是使用一个超眩的任务日期,如下:

** DONE 备份网站
   SCHEDULED: <%%(wl-diary-website-backup-day)>

wl-diary-website-backup-day的实现如下:

(defun wl-diary-website-backup-day (&optional mark)
  (let* ((day (calendar-extract-day date))
         (month (calendar-extract-month date))
         (year (calendar-extract-year date))
         (lastday (calendar-last-day-of-month month year))
         (lastdayname (calendar-day-of-week (list month lastday year))))
    (and (or (and (= day lastday)
                  (memq lastdayname '(1 2 3 4)))
             (and (< (- lastday day) 7)
                  (memq lastdayname '(0 5 6))
                  (= (calendar-day-of-week date) 4)))
         (cons mark ""))))