blob: 6904eaf3f712f5769a924d86f696406cb4d9ac43 (
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
|
Time-stamp: <2020-12-06 22h30 UTC>
# Emacs + gemini ==> automatic footnotes
Here's a snippet i found i needed to write after laboriously using `C-x 8 RET' for the umpteenth time to insert footnote markers. Throw it in your config, bind it to a something⁰ and enjoy! The code should more-or-less speak for itself, but to be sure:
* it searches for the next free footnote symbol (as defined in `gemini-footnote-symbols')
* it inserts that symbol at point (the cursor)
* it goes to the end of the buffer and inserts the symbol, a space, and leaves you ready to write the footnote
Actually, in the process of writing this article, i noticed a possibly unfortunate gap in the logic: it doesn't distinguish between verbatim blocks (```) and the rest of the body. I can't tell how i feel about this, for now though, WONTFIX :)
```
(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 " "))))
```
⁰ I have it bound to `C-c C-f' in gemini-mode.
|