cb42d19a069aab639f11a087fa22f9f262946449
[blog.git] / blog.el
1 ;;; blog.el --- Config file used to export blog      -*- lexical-binding: t; -*-
2
3 ;; Copyright (C) 2017  Peng Li
4
5 ;; Author: Peng Li <seudut@gmail.com>
6 ;; Keywords: lisp
7
8 ;; This program is free software; you can redistribute it and/or modify
9 ;; it under the terms of the GNU General Public License as published by
10 ;; the Free Software Foundation, either version 3 of the License, or
11 ;; (at your option) any later version.
12
13 ;; This program is distributed in the hope that it will be useful,
14 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 ;; GNU General Public License for more details.
17
18 ;; You should have received a copy of the GNU General Public License
19 ;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
21 ;;; Commentary:
22
23 ;; This is emacs config used to export Blog Org files in batch mode.
24
25 ;;; Code:
26
27 (require 'package)
28 (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
29 (package-initialize)
30
31 (setq debug-on-error t)
32
33 ;; package initialise
34 (unless (package-installed-p 'htmlize)
35   (package-refresh-contents)
36   (package-install 'htmlize))
37
38
39 ;; constants
40 ;; (defconst root-dir "~/Private/blog/")
41 (defconst root-dir (file-name-directory (or load-file-name buffer-file-name)))
42 (defvar publish-dir (concat root-dir "_site/"))
43 (defconst css-file "../css/worg.css")
44 (defvar force-publish nil)
45 ;; (defconst css-file (concat root-dir "css/worg.css"))
46
47 (let ((aa (pop command-line-args-left)))
48   (if (>  (length aa) 0)
49       (setq publish-dir aa)))
50
51
52 (let ((force (pop command-line-args-left)))
53   (if (string= force "true")
54       (setq force-publish t)))
55
56
57 ;; (setq publish-dir (or (pop command-line-args-left) publish-dir))
58 (message publish-dir)
59
60 (require 'org)
61 (require 'ox-publish)
62 (require 'htmlize)
63
64 (message "Org-mode version %s" (org-version))
65 (message "publish directory is %s" publish-dir)
66 (message "force %s" force-publish)
67
68 ;; To prevent inline-css when exporting html. will use external css
69 (setq org-html-htmlize-output-type 'css)
70
71
72 (setq blog-extra-head
73       (concat
74        ;; "<link rel='stylesheet' href='" css-file "' />\n"
75        "<link rel='stylesheet' href='../css/main.css' />\n"
76        "<link rel='stylesheet' href='../css/code.css' />"
77        ))
78
79 (setq blog-header
80       (concat
81        " <header id= 'banner' > "
82        "<h1><a href= '/' >Peng Li</a></h1>"
83        "<hr>"
84        "<nav><ul>"
85        ;; "<li><a href= '/contact.html' >Contact</a></li>"
86        "<li><a href= '/blog.html' >Blog</a></li>"
87        ;; "<li><a href= '/teaching.html' >Teaching</a></li>"
88        ;; "<li><a href= '/research.html' >Research</a></li>"
89        "<li><a href= '/' >About Me</a></li>"
90        "</ul></nav>"
91        "</header>"))
92
93 ;; don't know why setting this null in `org-publish-project-alist' doesn't work
94 ;; (setf org-html-home/up-format "")
95
96 (setq org-publish-project-alist
97       `(
98         ;; ("org-notes"
99         ;;  :base-directory ,root-dir
100         ;;  :base-extension "org"
101         ;;  :publishing-directory ,publish-dir
102         ;;  :recursive t
103         ;;  :publishing-function org-html-publish-to-html
104         ;;  :headline-levels 4
105         ;;  :section-numbers nil
106         ;;  :auto-preamble t
107         ;;  :auto-sitemap t          ;Generate sitmap.org automagicaly...
108         ;;  :sitemap-filename "sitemap.org" ;... call it sitemap.org (it's the default )...
109         ;;  :sitemap-title "Sitemap"
110
111         ;;  :html-table-of-contents nil
112         ;;  :html-postamble nil ;dont export creator auto validation info in html postamble div
113         ;;  :html-link-home "/"
114         ;;  :html-head  ,(concat  "<link rel='stylesheet' href='" css-file  "' />")
115         ;;  :html-head-include-default-style nil
116         ;;  :html-head-include-scripts nil)
117         ("blog-pages"
118          ;; publishing
119          :base-directory ,root-dir
120          :base-extension "org"
121          :publishing-directory ,publish-dir
122          :recursive nil
123          :publishing-function org-html-publish-to-html
124          
125          ;; html style
126          :htlm-link-home "/"
127          ;; disable home/up div
128          :html-home/up-format ""
129          :html-link-home ""
130          :html-link-up ""
131          
132          :html-head  ,blog-extra-head
133          :html-postamble nil)
134
135         ("blog-posts"
136          ;; publishing
137          :base-directory ,(concat root-dir "/posts")
138          :base-extension "org"
139          :publishing-directory ,(concat publish-dir "/posts")
140          :recursive t
141          :publishing-function org-html-publish-to-html
142
143          ;; html style
144          :html-link-home "/"
145          ;; disable Home/Up
146          :html-home/up-format ""
147          :html-link-up ""
148          :html-link-home ""
149          ;; Add css file and preamble
150          :html-head ,blog-extra-head
151          :html-preamble ,blog-header
152          :html-postamble "")
153         
154         ("blog-css"
155          :base-directory ,(concat root-dir "/css")
156          :base-extension ".*"
157          :publishing-directory ,(concat publish-dir "/css")
158          :publishing-function org-publish-attachment
159          :recursive t)
160         ("blog-cgi"
161          :base-directory ,(concat root-dir "/cgi-bin")
162          :base-extension ".*"
163          :publishing-directory ,(concat publish-dir "/cgi-bin")
164          :publishing-function org-publish-attachment
165          :recursive t)
166         ("blog" :components ("blog-pages" "blog-posts" "blog-css" "blog-cgi"))))
167
168 (org-publish-project "blog" force-publish)
169
170 ;; (provide 'blog)
171 (kill-emacs 0)
172 ;;; blog.el ends here