changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / emacs/lib/ulang.el

changeset 596: 46e9425cf3c2
parent: 0552341ac196
child: 74a55d5decce
author: Richard Westhaver <ellis@rwest.io>
date: Thu, 15 Aug 2024 21:54:36 -0400
permissions: -rw-r--r--
description: howd that get there
1 ;;; ulang.el --- ulang compliance lib -*- lexical-binding:t -*-
2 
3 ;; Copyright (C) 2023
4 
5 ;; Author: <ellis@zor>
6 ;; Keywords: comm
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 <https://www.gnu.org/licenses/>.
20 
21 ;;; Commentary:
22 
23 ;;
24 ;; (setq org-export-global-macros nil)
25 
26 ;;; Code:
27 (require 'org)
28 (require 'ox)
29 
30 (defvar ulang-links-history nil)
31 (defvar ulang-files-history nil)
32 
33 ;;;###autoload
34 (defun ulang-dblock-insert-links (regexp)
35  "Create dblock to insert links matching REGEXP."
36  (interactive (list (read-regexp "Insert links matching: " nil ulang-links-history)))
37  (org-create-dblock (list :name "links"
38  :regexp regexp
39  :id-only nil))
40  (org-update-dblock))
41 
42 (org-dynamic-block-define "links" 'ulang-dblock-insert-links)
43 
44 (org-export-translate-to-lang (list '("Table of Contents" "Index")) "ulang")
45 
46 (setq org-todo-keywords
47  '((type "TBD(0!)" "TODO(t!)" "|")
48  (type "WIP(w!)" "|")
49  (type "HOLD(H@!)" "WAIT(/j@!)" "|")
50  (sequence "FIND(q!)" "READ(r@!)" "WATCH(W@!)" "|")
51  (sequence "RESEARCH(s!)" "RECORD(e!)" "|")
52  (sequence "OUTLINE(O!)" "RESEARCH(A!)" "DRAFT(M!)" "REVIEW(V!)" "|")
53  (type "FIXME(i!)" "TEST(t!)" "BENCH(b!)" "DEPLOY(D!)" "RUN(X!)" "LOG(L!)" "|")
54  (type "KLUDGE(k@!)" "HACK(h!)" "NOTE(n!)" "CODE(c!)" "LINK(l!)" "|")
55  (type "PROJECT(p!)" "PRODUCT(P!)" "SPRINT(S!)" "RELEASE(R!)" "|")
56  (type "GOTO(g!)" "|")
57  (sequence "|" "DONE(d!)" "NOPE(x@!)" "FOUND(f@!)" "FIXED(F!)")))
58 
59 (setq org-todo-keyword-faces
60  '(("PROJECT" . (:foreground "lightseagreen" :weight bold))
61  ("PRODUCT" . (:foreground "olivedrab" :weight bold))
62  ("RELEASE" . (:foreground "maroon3" :weight bold))
63  ("RESEARCH" . (:foreground "maroon2" :weight bold))
64  ("HACK" . (:foreground "maroon3" :weight bold))
65  ("TBD" . (:foreground "darkred2" :weight bold))
66  ("NOTE" . (:foreground "tomato2" :weight bold))
67  ("CODE" . (:foreground "bisque" :weight bold :background "midnightblue"))
68  ("HOLD" . (:foreground "red1" :weight bold :background "yellow1"))
69  ("WAIT" . (:foreground "red4" :weight bold :background "yellow1"))
70  ("WIP" . (:foreground "darkorchid2" :weight bold))
71  ("NOPE" . (:foreground "hotpink" :weight bold :background "darkgreen"))))
72 
73 (setq org-link-abbrev-alist
74  '(("vc" . "https://vc.compiler.company/%s")
75  ("comp" . "https://compiler.company/%s")
76  ("cdn" . "https://cdn.compiler.company/%s")
77  ("packy" . "https://packy.compiler.company/%s")
78  ("yt" . "https://youtube.com/watch?v=%s")
79  ("wikipedia" . "https://en.wikipedia.org/wiki/%s")
80  ("reddit" . "https://reddit.com/%s")
81  ("hn" . "https://news.ycombinator.com/%s")
82  ("so" . "https://stackoverflow.com/%s")))
83 
84 ;;; IDs
85 (defun org-custom-id-get (&optional pom create prefix)
86  "Get the CUSTOM_ID property of the entry at point-or-marker POM.
87  If POM is nil, refer to the entry at point. If the entry does
88  not have an CUSTOM_ID, the function returns nil. However, when
89  CREATE is non nil, create a CUSTOM_ID if none is present
90  already. PREFIX will be passed through to `org-id-new'. In any
91  case, the CUSTOM_ID of the entry is returned."
92  (interactive)
93 (org-with-point-at pom
94  (let ((id (org-entry-get nil "CUSTOM_ID"))
95  ;; use CUSTOM_ID for links
96  (org-id-link-to-org-use-id 'create-if-interactive-and-no-custom-id))
97  (cond
98  ((and id (stringp id) (string-match "\\S-" id))
99  id)
100  (create
101  (setq id (org-id-new prefix))
102  (org-entry-put pom "CUSTOM_ID" id)
103  (org-id-add-location id (buffer-file-name (buffer-base-buffer)))
104  id)))))
105 
106 ;;;###autoload
107 (defun org-id-add-to-headlines-in-file ()
108  "Add ID properties to all headlines in the
109  current file which do not already have one."
110  (interactive)
111  (org-map-entries (lambda () (org-id-get (point) 'create))))
112 
113 (defun org-custom-id-add-to-headlines-in-file ()
114  "Add CUSTOM_ID properties to all headlines in the
115  current file which do not already have one."
116  (interactive)
117  (org-map-entries (lambda () (org-custom-id-get (point) 'create))))
118 
119 (defun org-id-add-to-headlines-in-agenda-files ()
120  (interactive)
121  (with-temp-buffer
122  (dolist (f org-agenda-files)
123  (find-file f)
124  (org-id-add-to-headlines-in-file)
125  (save-buffer))))
126 
127 (message "Initialized ULANG.")
128 
129 (provide 'ulang)
130 ;;; ulang.el ends here