init.el.in 7.55 KB
Newer Older
1
(setq load-path (append '("@abs_top_srcdir@/elisp/") ; for hoa-mode.el
2
			load-path))
3
4
5

(setq debug-on-error t)

6
7
8
9
10
11
12
13
14
;;; Some combination of GNU TLS and Emacs fail to retrieve archive
;;; contents over https.
;;; https://www.reddit.com/r/emacs/comments/cdf48c/failed_to_download_gnu_archive/
;;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=34341
(if (and (version< emacs-version "26.3") (>= libgnutls-version 30600))
    (setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3"))
; work around obsolete ELPA signatures :-(
(setq package-check-signature 'nil)

15
16
17
18
(package-initialize)
(require 'cl)
(setq features-before features)

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
19
(require 'org-version)
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
(print (org-version nil t t))
(print (concat "Org " org-version))

; The Org version that ships with emacs is usually too old.
(when (version< org-version "9.1")
  (warn "Org-mode is too old; attempting to download a more recent version")
  ;; we need to unload any bits of org that were loaded before calling
  ;; install package, otherwise the byte code might mix the two versions.
  (dolist (feature (set-difference features features-before))
    (when (and (featurep feature)
               (let ((feature-name (symbol-name feature)))
                 (or (string-prefix-p "org" feature-name)
                     (string-prefix-p "ob" feature-name))))
      (message "unloading feature %s" feature)
      (unload-feature feature t)))
  ;; install org-plus-contrib, not org, as the former includes htmlize
  (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
  (package-refresh-contents)
  (let ((org-p-c (cadr (assq 'org-plus-contrib package-archive-contents))))
    (package-install org-p-c)))

41
42
43
44
45
46
47
48
49
50
51
(let ((have-htmlize (require 'htmlize nil t))
      (have-ess (require 'ess nil t)))
  (unless (and have-htmlize have-ess)
    (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
    (package-refresh-contents)
    (unless have-htmlize
      (let ((htmlize (cadr (assq 'htmlize package-archive-contents))))
        (package-install htmlize)))
    (unless have-ess
      (let ((ess (cadr (assq 'ess package-archive-contents))))
        (package-install ess)))))
52
53
54

(require 'ox-publish)
(require 'org-install)
55
(require 'hoa-mode)
56
57

(setq org-export-htmlize-output-type 'css)
58
(setq org-html-htmlize-output-type 'css)
59
60
61
; the .org-timestamp directory does not always exist, is not always
; created by org, and that causes issues on our buildfarm.
(setq org-publish-use-timestamps-flag nil)
62
63
64
;; The default value of writing to ~/.org-timestamps causes race
;; conditions when doing concurrent builds.
(setq org-publish-timestamp-directory "@abs_top_builddir@/.org-timestamps/")
65

66
67
68
;; Prevent tabs from being inserted when org-mode reindent some code.
(setq-default indent-tabs-mode nil)

69
70
(org-babel-do-load-languages
 'org-babel-load-languages
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
71
 `((,(if (version< org-version "8.3") 'sh 'shell) . t)
72
   (dot . t)
73
   (python . t)
74
   (plantuml . t)
75
   (R . t)
76
   (C . t)))
77
(setq org-confirm-babel-evaluate nil)
78
(setq org-plantuml-jar-path "@abs_top_builddir@/doc/org/plantuml.jar")
79
(setq org-babel-temporary-directory "@abs_top_builddir@/doc/org/tmp")
80
81
82
;;; the directory might already exist from a previously aborted run.
(if (file-directory-p org-babel-temporary-directory)
    (delete-directory org-babel-temporary-directory t))
83
(make-directory org-babel-temporary-directory t)
84
(setq org-babel-python-command "@PYTHON@")
85
(setq org-babel-C++-compiler "./g++wrap")
86
(setq shell-file-name "@SHELL@")
87
(setq ess-ask-for-ess-directory nil)
88

89
90
91
(setq org-babel-default-header-args:plantuml
      '((:results . "file")
        (:exports . "results")
92
93
        ;; Prevent the plantuml logo to appear on top of whatever you
        ;; are doing when the project compiles in the background.
94
        (:java . "-Djava.awt.headless=true")))
95

96
(setenv "PATH"
97
	(concat "@abs_top_builddir@/bin" path-separator (getenv "PATH")))
98
(setenv "SPOT_UNINSTALLED" "1")
99
(setenv "PYTHONPATH"
100
101
102
103
104
	(concat "@abs_top_builddir@/python/.libs:"
		"@abs_top_builddir@/python:"
		"@abs_top_srcdir@/python:"
		"@abs_top_builddir@/python/spot/.libs:"
		"@abs_top_builddir@/python/spot:"
105
		"@abs_top_builddir@/spot/ltsmin/.libs"
106
		"@abs_top_srcdir@/python/spot:"
107
108
		(getenv "PYTHONPATH")))
(setenv "DYLD_LIBRARY_PATH"
109
	(concat "@abs_top_builddir@/python/.libs:@abs_top_builddir@/spot/.libs:@abs_top_builddir@/buddy/src/.libs:"
110
		(getenv "DYLD_LIBRARY_PATH")))
111
(setenv "SPOT_DOTDEFAULT" "Brf(Lato)C(#ffffa0)")
112
(setenv "SPOT_DOTEXTRA" "node[fontsize=12] fontsize=12 stylesheet=\"spot.css\" edge[arrowhead=vee, arrowsize=.7, fontsize=12]")
113

114
115
116
117
118
(setq org-export-html-home/up-format
"<div id=\"org-div-home-and-up\" style=\"text-align:center;white-space:nowrap;\">
 <a accesskey=\"h\" href=\"%s\">UP</a> | <a accesskey=\"H\" href=\"%s\">HOME</a>
</div>")

119
(setq org-export-html-postamble nil)
120
121
(setq org-html-table-header-tags
      '("<th scope=\"%s\"%s><div><span>" . "</span></div></th>"))
122

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
(defun spot-sitemap-format-entry (entry style project)
  "Export a sitemap entry in a why that we can order them meaningfully.
If file ENTRY has HTML_LINK_UP pointing to file up.html, and file
up.html points to index.html, then the result is:
      index.org/up.org/entry.org/ [[entry.org][TITLE]]"
  (let ((linkup (org-publish-find-property entry :html-link-up project 'html))
        (trail (concat entry "/ ")))
    (while (and linkup (string-match "^\\(.*\\)\.html$" linkup))
      (let ((match (concat (match-string 1 linkup) ".org")))
        (if (string= match entry)
            (setq linkup nil)
          (setq linkup (org-publish-find-property match :html-link-up
                                                  project 'html)
                trail (concat match "/" trail)))))
    (concat trail (org-publish-sitemap-default-entry entry style project))))

(defun spot-sitemap-reorder (entries)
  (sort entries (lambda (a b) (string< (car a) (car b)))))

(defun spot-publish-sitemap (title thelist)
  "Build Spot's sitemap.

  This is done by sorting all lines, and then replacing
  - index.org/up.org/entry.org/ [[entry.org][TITLE]]
  by
  - [[entry.org][TITLE]]
  but indented according to the number of 'fake directory' parts."
  (let ((body (org-list-to-org (cons 'unordered
                                 (spot-sitemap-reorder (cdr thelist))))))
    (while
        (let* ((res (replace-regexp-in-string "\\([:space:]*\\)- [^/[:space:]]+/" "  \\1- " body))
               (cmp (string= res body)))
          (setq body res)
          (not cmp)))
    (concat "#+TITLE: " title
            "\n#+SETUPFILE: setup.org\n#+HTML_LINK_UP: index.html\n\n"
            body)))
160

161
(setq org-publish-project-alist
162
      '(("spot-html"
163
164
165
166
	:base-directory "@abs_top_srcdir@/doc/org/"
	:base-extension "org"
	:publishing-directory "@abs_top_srcdir@/doc/userdoc/"
	:recursive t
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
167
168
169
	:exclude "setup.org"
	:auto-sitemap t
	:sitemap-title "Sitemap for Spot"
170
        :sitemap-function spot-publish-sitemap
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
171
        :sitemap-format-entry spot-sitemap-format-entry
172
	:publishing-function org-html-publish-to-html
173
	:html-head "<link rel=\"stylesheet\" type=\"text/css\" href=\"spot.css\" />"
174
175
176
	:auto-preamble t)
       ("spot-static"
	:base-directory "@abs_top_srcdir@/doc/org/"
177
	:base-extension "css\\|js\\|png\\|svg\\|jpg\\|gif\\|pdf"
178
179
180
181
182
183
	:publishing-directory "@abs_top_srcdir@/doc/userdoc/"
	:recursive t
	:publishing-function org-publish-attachment)
       ("spot-all" :components ("spot-html" "spot-static"))))

(org-publish-all t)
184
185
;;; org-babel-remove-temporary-directory does not correctly remove
;;; nested directories and we have some files in tmp/.libs/ because of
186
187
188
;;; libtool.  So we have to clean that ourselves.
(if (file-directory-p org-babel-temporary-directory)
    (delete-directory org-babel-temporary-directory t))