changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > org / publish.el

changeset 16: ab1f674742a8
parent: 27795b18326b
child: cf198cee80c6
author: ellis <ellis@rwest.io>
date: Mon, 27 Nov 2023 18:25:51 -0500
permissions: -rw-r--r--
description: fluff
1 ;;; publish.el --- the.compiler.company publishing script -*- lexical-binding: t; -*-
2 
3 ;; emacsclient -e '(load-file "publish.el")' '(publish)'
4 
5 ;;; Code:
6 (require 'ox-publish)
7 (require 'org-id)
8 ;; vendored
9 (require 'htmlize)
10 (defvar project-dir "~/dev/comp/org")
11 (defvar publish-dir "/mnt/w/compiler.company")
12 (defvar html-theme nil)
13 (defvar url "https://compiler.company")
14 (defvar html-nav "<div> <a href = \"https://compiler.company\">~/</a> ( <a href = \"https://compiler.company/blog\">blog</a> <a href = \"https://compiler.company/docs\">docs</a> <a href = \"https://vc.compiler.company/comp\">code</a> ) </div>")
15 
16 (defvar html-foot "<footer>updated %C</footer>")
17 
18 (setq org-html-style-default ""
19  org-html-scripts ""
20  org-html-htmlize-output-type 'css
21  org-export-htmlize-output-type 'css
22  org-html-doctype "html5"
23  org-html-html5-fancy t
24  org-html-validation-link nil
25  org-src-fontify-natively t
26  make-backup-files nil
27  debug-on-error t
28  org-id-link-to-org-use-id t)
29 
30 (setq org-publish-project-alist
31  `(("compiler.company" :components ("index" "blog" "docs"))
32  ("index"
33  :base-directory ,project-dir
34  :base-extension "org"
35  :recursive nil
36  :htmlized-source t
37  :footnote-section-p t
38  :html-footnotes-section t
39  :html-doctype "<!doctype html>"
40  :html-preamble ,html-nav
41  :publishing-directory ,publish-dir
42  :publishing-function org-html-publish-to-html
43  :html-postamble ,html-foot)
44  ("blog"
45  :base-directory ,(expand-file-name "blog" project-dir)
46  :base-extension "org"
47  :footnote-section-p t
48  :html-footnotes-section t
49  :html-doctype "<!doctype html>"
50  :publishing-directory ,(expand-file-name "blog" publish-dir)
51  :publishing-function org-html-publish-to-html
52  :htmlized-source t
53  :html-preamble ,html-nav
54  :html-postamble ,html-foot)
55  ("docs"
56  :base-directory ,(expand-file-name "docs" project-dir)
57  :base-extension "org"
58  :recursive t
59  :footnote-section-p t
60  :html-footnotes-section t
61  :html-doctype "<!doctype html>"
62  :publishing-directory ,(expand-file-name "docs" publish-dir)
63  :publishing-function org-html-publish-to-html
64  :htmlized-source t
65  :html-preamble ,html-nav
66  :html-postamble ,html-foot)))
67 
68 (defun org-custom-id-get (&optional pom create prefix)
69  "Get the CUSTOM_ID property of the entry at point-or-marker POM.
70  If POM is nil, refer to the entry at point. If the entry does
71  not have an CUSTOM_ID, the function returns nil. However, when
72  CREATE is non nil, create a CUSTOM_ID if none is present
73  already. PREFIX will be passed through to `org-id-new'. In any
74  case, the CUSTOM_ID of the entry is returned."
75  (interactive)
76 (org-with-point-at pom
77  (let ((id (org-entry-get nil "CUSTOM_ID"))
78  ;; use CUSTOM_ID for links
79  (org-id-link-to-org-use-id 'create-if-interactive-and-no-custom-id))
80  (cond
81  ((and id (stringp id) (string-match "\\S-" id))
82  id)
83  (create
84  (setq id (org-id-new prefix))
85  (org-entry-put pom "CUSTOM_ID" id)
86  (org-id-add-location id (buffer-file-name (buffer-base-buffer)))
87  id)))))
88 ;;;###autoload
89 (defun org-id-add-to-headlines-in-file ()
90  "Add CUSTOM_ID properties to all headlines in the
91  current file which do not already have one."
92  (interactive)
93  (org-map-entries (lambda () (org-custom-id-get (point) 'create))))
94 
95 ;;;###autoload
96 (defun publish (&optional sitemap static force async)
97  "publish `rwest-io' content.
98 If STATIC is t, also publish media and static files.
99 If FORCE is t, skip checking file mod date and just publish all files.
100 If ASYNC is t, call `org-publish' asynchronously.
101 If given a prefix (C-u), set all args to t"
102  (interactive)
103  (if current-prefix-arg
104  (setq static t
105  force t
106  async t))
107  (let ((default-directory project-dir))
108  (message (format "publishing from %s" default-directory))
109  (org-publish "compiler.company" force async)))