summaryrefslogtreecommitdiff
path: root/emacs/inits/27-gemini.el
blob: 85b885146cdd8a6523fc054752a43a6a6118a437 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
;; Time-stamp: <2024-07-13 15h03 CEST (471b3659)>

(use-package elpher
  :ensure
  :defer
  :config
  (setq elpher-default-url-type "gemini"))

(use-package visual-fill-column
  :ensure
  :defer)

(defvar gemlog-directory (expand-file-name "~/hobbies/l-3.space/"))
(defvar gemlog-file-name "%y%02m%02d")
(defvar gemlog-time-string "%Y-%02m-%02d %02Hh%02M %Z")
(defvar gemlog-time-zone "UTC")

(defun gemlog-new-entry ()
  (interactive)
  (let* ((title (read-string "Title: "))
         (number 1)
         (file (format "%s/log-%s-%d.gmi"
                       gemlog-directory
                       (format-time-string gemlog-file-name nil t)
                       number)))
    (while (file-exists-p file)
      (setq number (+ 1 number))
      (setq file (format "%s/log-%s-%d.gmi"
                         gemlog-directory
                         (format-time-string gemlog-file-name nil t)
                         number)))
    (find-file file)
    (setq-local time-stamp-time-zone gemlog-time-zone
                time-stamp-format gemlog-time-string)
    (insert "Time-stamp: <>") (newline) (newline)
    (insert "# " title) (newline) (newline)
    (time-stamp)
    (require 'gemini-mode)
    (gemini-mode)))

(defvar gemini-footnote-symbols '("⁰" "¹" "²" "³" "⁴" "⁵" "⁶" "⁷" "⁸" "⁹" "ᵃ" "ᵇ" "ᶜ" "ᵈ" "ᵉ" "ᶠ"))

(defun gemini-insert-footnote ()
  (interactive)
  (let ((symb (car gemini-footnote-symbols))
        (n 0))
    (while (and symb (save-excursion (beginning-of-buffer) (search-forward symb nil t)))
      (setq n (1+ n)
            symb (nth n gemini-footnote-symbols)))
    (if (not symb) (message "Ran out of footnote symbols. Customise `gemini-footnote-symbols'.")
      (insert symb)
      (end-of-buffer)
      (unless (= (point) (point-at-bol)) (newline))
      (insert symb " "))))

(use-package gemini-mode
  :ensure
  :defer
  :bind (:map gemini-mode-map
              ("C-c C-f" . gemini-insert-footnote))
  :hook (gemini-mode . (lambda ()
                         (setq time-stamp-time-zone gemlog-time-zone
                               time-stamp-format gemlog-time-string)
                         (setq-local indent-tabs-mode nil)
                         (auto-fill-mode -1)
                         (set-fill-column 80))))