changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate emacs/lib/ulang.el

changeset 698: 96958d3eb5b0
parent: cad61259ba57
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
587
Richard Westhaver <ellis@rwest.io>
parents: 586
diff changeset
1
 ;;; ulang.el --- ulang compliance lib -*- lexical-binding:t -*-
50
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
2
 
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
3
 ;; Copyright (C) 2023  
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
4
 
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
5
 ;; Author:  <ellis@zor>
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
6
 ;; Keywords: comm
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
7
 
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
8
 ;; This program is free software; you can redistribute it and/or modify
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
9
 ;; it under the terms of the GNU General Public License as published by
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
10
 ;; the Free Software Foundation, either version 3 of the License, or
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
11
 ;; (at your option) any later version.
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
12
 
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
13
 ;; This program is distributed in the hope that it will be useful,
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
14
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
15
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
16
 ;; GNU General Public License for more details.
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
17
 
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
18
 ;; You should have received a copy of the GNU General Public License
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
19
 ;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
20
 
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
21
 ;;; Commentary:
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
22
 
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
23
 ;; 
623
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
24
 
50
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
25
 
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
26
 ;;; Code:
57
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
27
 (require 'org)
651
af486e0a40c9 multi-binaries, working on removing x.lisp
Richard Westhaver <ellis@rwest.io>
parents: 648
diff changeset
28
 (require 'org-element)
59
ce1a5c531abf el cleanup
ellis <ellis@rwest.io>
parents: 57
diff changeset
29
 (require 'ox)
623
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
30
 
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
31
 (defgroup ulang nil
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
32
   "CC Universal Language.")
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
33
 
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
34
 (defvar ulang-link-history nil)
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
35
 (defvar ulang-file-history nil)
586
7ce855f76e1d net/fetch upgrades, fixes, net/err -> net/condition
Richard Westhaver <ellis@rwest.io>
parents: 428
diff changeset
36
 
631
0b82a2893d26 inbox compaction
Richard Westhaver <ellis@rwest.io>
parents: 630
diff changeset
37
 ;; see org-special-properties
0b82a2893d26 inbox compaction
Richard Westhaver <ellis@rwest.io>
parents: 630
diff changeset
38
 (defvar ulang-special-properties
630
f4a464cc1628 skel/vm work, added json benchmark
Richard Westhaver <ellis@rwest.io>
parents: 628
diff changeset
39
   '("VERSION"))
f4a464cc1628 skel/vm work, added json benchmark
Richard Westhaver <ellis@rwest.io>
parents: 628
diff changeset
40
 
50
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
41
 ;;;###autoload
623
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
42
 (defun dblock-insert-links (regexp)
57
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
43
   "Create dblock to insert links matching REGEXP."
631
0b82a2893d26 inbox compaction
Richard Westhaver <ellis@rwest.io>
parents: 630
diff changeset
44
   (interactive (list (read-regexp "Insert links matching: " nil ulang-link-history)))
57
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
45
   (org-create-dblock (list :name "links"
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
46
                            :regexp regexp
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
47
                            :id-only nil))
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
48
   (org-update-dblock))
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
49
 
623
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
50
 (org-dynamic-block-define "links" 'dblock-insert-links)
57
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
51
 
638
6c0e4a44c082 dblocks
Richard Westhaver <ellis@rwest.io>
parents: 631
diff changeset
52
 ;; (org-export-translate-to-lang (list '("Table of Contents" "Index")) "ulang")
623
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
53
 ;; (setq org-export-global-macros nil)
57
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
54
 
604
74a55d5decce emacs org libraries and upgrades
Richard Westhaver <ellis@rwest.io>
parents: 596
diff changeset
55
 ;; todo keywords
618
5e57683a0c28 rocksdb updates and tests, emacs org config
Richard Westhaver <ellis@rwest.io>
parents: 611
diff changeset
56
 (setq org-stuck-projects '("+PROJECT/-DONE" ("NEXT") nil ""))
604
74a55d5decce emacs org libraries and upgrades
Richard Westhaver <ellis@rwest.io>
parents: 596
diff changeset
57
 
587
Richard Westhaver <ellis@rwest.io>
parents: 586
diff changeset
58
 (setq org-todo-keywords
626
cc13027df6fa ulang and cli updates
Richard Westhaver <ellis@rwest.io>
parents: 623
diff changeset
59
       '((sequence "TBD(0!)" "TODO(t!)" "NEXT(n!)" "WIP(i!)" "|" "DONE(d!)")
cc13027df6fa ulang and cli updates
Richard Westhaver <ellis@rwest.io>
parents: 623
diff changeset
60
         (sequence "HOLD(H@/!)" "WIP(!)" "|")
cc13027df6fa ulang and cli updates
Richard Westhaver <ellis@rwest.io>
parents: 623
diff changeset
61
         (sequence "WAIT(W@/!)" "WIP(!)" "|")
630
f4a464cc1628 skel/vm work, added json benchmark
Richard Westhaver <ellis@rwest.io>
parents: 628
diff changeset
62
         (sequence "RESEARCH(s!)" "WIP(!)" "REPORT(c!)" "|")
619
35a579313b80 init ini and vc work
Richard Westhaver <ellis@rwest.io>
parents: 618
diff changeset
63
         (sequence "OUTLINE(O!)" "DRAFT(M!)" "REVIEW(V!)" "|")
630
f4a464cc1628 skel/vm work, added json benchmark
Richard Westhaver <ellis@rwest.io>
parents: 628
diff changeset
64
         (sequence "FIXME(f!)" "WIP(!)" "TEST(T!)" "|")
626
cc13027df6fa ulang and cli updates
Richard Westhaver <ellis@rwest.io>
parents: 623
diff changeset
65
         (type "FIND(q!)" "READ(r@!)" "WATCH(A@!)" "HACK(h!)"
cc13027df6fa ulang and cli updates
Richard Westhaver <ellis@rwest.io>
parents: 623
diff changeset
66
               "CODE(c!)" "BENCH(b!)" "DEPLOY(D!)" "RUN(X!)"
630
f4a464cc1628 skel/vm work, added json benchmark
Richard Westhaver <ellis@rwest.io>
parents: 628
diff changeset
67
               "REFILE(w!)" "LOG(L!)" "GOTO(g!)" "|")
596
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
68
         (type "PROJECT(p!)" "PRODUCT(P!)" "SPRINT(S!)" "RELEASE(R!)" "|")
626
cc13027df6fa ulang and cli updates
Richard Westhaver <ellis@rwest.io>
parents: 623
diff changeset
69
         (sequence "|" "DONE(d!)" "NOPE(x@!)")))
587
Richard Westhaver <ellis@rwest.io>
parents: 586
diff changeset
70
 
Richard Westhaver <ellis@rwest.io>
parents: 586
diff changeset
71
 (setq org-todo-keyword-faces
Richard Westhaver <ellis@rwest.io>
parents: 586
diff changeset
72
       '(("PROJECT" . (:foreground "lightseagreen" :weight bold))
596
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
73
         ("PRODUCT" . (:foreground "olivedrab" :weight bold))
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
74
         ("RELEASE" . (:foreground "maroon3" :weight bold))
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
75
         ("RESEARCH" . (:foreground "maroon2" :weight bold))
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
76
         ("HACK" . (:foreground "maroon3" :weight bold))
630
f4a464cc1628 skel/vm work, added json benchmark
Richard Westhaver <ellis@rwest.io>
parents: 628
diff changeset
77
         ("TBD" . (:foreground "brown" :weight bold))
596
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
78
         ("CODE" . (:foreground "bisque" :weight bold :background "midnightblue"))
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
79
         ("HOLD" . (:foreground "red1" :weight bold :background "yellow1"))
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
80
         ("WAIT" . (:foreground "red4" :weight bold :background "yellow1"))
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
81
         ("WIP" . (:foreground "darkorchid2" :weight bold))
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
82
         ("NOPE" . (:foreground "hotpink" :weight bold :background "darkgreen"))))
587
Richard Westhaver <ellis@rwest.io>
parents: 586
diff changeset
83
 
604
74a55d5decce emacs org libraries and upgrades
Richard Westhaver <ellis@rwest.io>
parents: 596
diff changeset
84
 ;; link abbrevs
57
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
85
 (setq org-link-abbrev-alist
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
86
       '(("vc" . "https://vc.compiler.company/%s")
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
87
         ("comp" . "https://compiler.company/%s")
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
88
 	("cdn" . "https://cdn.compiler.company/%s")
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
89
         ("packy" . "https://packy.compiler.company/%s")
596
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
90
         ("yt" . "https://youtube.com/watch?v=%s")
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
91
         ("wikipedia" . "https://en.wikipedia.org/wiki/%s")
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
92
         ("reddit" . "https://reddit.com/%s")
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
93
         ("hn" . "https://news.ycombinator.com/%s")
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 588
diff changeset
94
         ("so" . "https://stackoverflow.com/%s")))
57
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
95
 
588
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
96
 ;;; IDs
659
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
97
 
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
98
 (defun org-title-to-filename (title)
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
99
   "Convert TITLE to a reasonable filename."
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
100
   ;; Based on the slug logic in org-roam, but org-roam also uses a
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
101
   ;; timestamp.
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
102
   (setq title (downcase title))
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
103
   (setq title (s-replace-regexp "[^a-zA-Z0-9]+" "-" title))
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
104
   (setq title (s-replace-regexp "-+" "-" title))
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
105
   (setq title (s-replace-regexp "^-" "" title))
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
106
   (setq title (s-replace-regexp "-$" "" title))
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
107
   title)
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
108
 
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
109
 (defun org-get-custom-id-list ()
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
110
   (flatten
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
111
    (org-map-entries
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
112
     (lambda ()
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
113
       (org-entry-get nil "CUSTOM_ID")))))
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
114
 
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
115
 (defun org-generate-custom-id (&optional id-list)
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
116
   (let* ((custom-id (org-entry-get nil "CUSTOM_ID"))
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
117
          (heading (org-heading-components))
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
118
          (level (nth 0 heading))            
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
119
          (todo (nth 2 heading))                       
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
120
          (headline (nth 4 heading))
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
121
          (slug (org-title-to-filename headline))
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
122
          (duplicate-id (when id-list (member slug id-list))))
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
123
     (when (not duplicate-id)
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
124
       (message "Adding CUSTOM_ID %s to %s" slug headline)
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
125
       (org-entry-put nil "CUSTOM_ID" slug))))
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
126
 
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
127
 (defun org-generate-custom-ids ()                              
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
128
   "Generate CUSTOM_ID for any headings that are missing one"   
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
129
     (save-excursion                                            
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
130
       (org-with-wide-buffer                                    
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
131
        (let ((existing-ids (org-get-custom-id-list)))          
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
132
          (org-map-entries                                      
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
133
           (lambda ()                                           
cad61259ba57 org-generate-custom-ids
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
134
             (org-generate-custom-id existing-ids)))))))
588
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
135
 
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
136
 ;;;###autoload
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
137
 (defun org-id-add-to-headlines-in-file ()
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
138
   "Add ID properties to all headlines in the
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
139
    current file which do not already have one."
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
140
   (interactive)
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
141
   (org-map-entries (lambda () (org-id-get (point) 'create))))
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
142
 
623
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
143
 (defun org-id-add-to-headlines-in-files (&optional files)
588
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
144
   (interactive)
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
145
   (with-temp-buffer
623
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
146
     (dolist (f (or files org-agenda-files))
588
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
147
       (find-file f)
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
148
       (org-id-add-to-headlines-in-file)
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
149
       (save-buffer))))
0552341ac196 refactor org-id stuff to ulang, pkgbuild notes
Richard Westhaver <ellis@rwest.io>
parents: 587
diff changeset
150
 
623
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
151
 (defun org-id-add-to-headlines-in-directory (&optional dir)
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
152
   (interactive)
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
153
   (let ((dir (or dir org-directory)))
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
154
     (org-id-add-to-headlines-in-files
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
155
      (directory-files-recursively dir "[.]org$"))))
a304c9713a51 init graph.el
Richard Westhaver <ellis@rwest.io>
parents: 619
diff changeset
156
 
57
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 52
diff changeset
157
 (message "Initialized ULANG.")
50
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
158
 
631
0b82a2893d26 inbox compaction
Richard Westhaver <ellis@rwest.io>
parents: 630
diff changeset
159
 ;;; Commands
0b82a2893d26 inbox compaction
Richard Westhaver <ellis@rwest.io>
parents: 630
diff changeset
160
 
0b82a2893d26 inbox compaction
Richard Westhaver <ellis@rwest.io>
parents: 630
diff changeset
161
 ;; (org-property-inherit-p "LOCATION")
639
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
162
 
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
163
 ;; currently does not support locations with spaces.. need to walk
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
164
 ;; ancestors ourselves to do so. for now only URIs and pathnames are
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
165
 ;; supported.
640
642b3b82b20d thrift fixes, org-get-with-inheritance init
Richard Westhaver <ellis@rwest.io>
parents: 639
diff changeset
166
 (defun org-get-with-inheritance (property &optional literal-nil epom)
642b3b82b20d thrift fixes, org-get-with-inheritance init
Richard Westhaver <ellis@rwest.io>
parents: 639
diff changeset
167
   "Like `org-entry-get-with-inheritance' but in additional to properties we
642b3b82b20d thrift fixes, org-get-with-inheritance init
Richard Westhaver <ellis@rwest.io>
parents: 639
diff changeset
168
 also check file keywords (aka in-buffer settings).
642b3b82b20d thrift fixes, org-get-with-inheritance init
Richard Westhaver <ellis@rwest.io>
parents: 639
diff changeset
169
 
642b3b82b20d thrift fixes, org-get-with-inheritance init
Richard Westhaver <ellis@rwest.io>
parents: 639
diff changeset
170
 For example, a PROPERTY value of 'LOCATION' would check all property
642b3b82b20d thrift fixes, org-get-with-inheritance init
Richard Westhaver <ellis@rwest.io>
parents: 639
diff changeset
171
 values in addition to the keyword '#+LOCATION:'."
642b3b82b20d thrift fixes, org-get-with-inheritance init
Richard Westhaver <ellis@rwest.io>
parents: 639
diff changeset
172
   (interactive (list nil nil))
641
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
173
   (let* ((property (or property (org-read-property-name)))
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
174
          (kw (when-let ((val (org-collect-keywords '("LOCATION") nil)))
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
175
                (cadar val)))
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
176
          ;; most of the work passed through to the property handler
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
177
          (props (org-entry-get-with-inheritance property literal-nil epom)))
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
178
     (if kw
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
179
         (append (list kw) (if (listp props) props (list props)))
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
180
       props)))
640
642b3b82b20d thrift fixes, org-get-with-inheritance init
Richard Westhaver <ellis@rwest.io>
parents: 639
diff changeset
181
 
639
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
182
 (defun org-get-location (point)
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
183
   "Get the value of property LOCATION at POINT."
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
184
   (interactive "d")
641
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
185
   (let ((path (org-get-with-inheritance "LOCATION" nil point)))
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
186
     ;; when the second path component is an absolute path, skip the first
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
187
     (when (and (< 1 (length path)) (file-name-absolute-p (print (cadr path))))
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
188
       (setq path (cdr path)))
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
189
     (message "%s"
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
190
              (apply 'join-paths
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
191
                     (flatten
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
192
                      (mapcar
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
193
                       (lambda (x) (split-string x " "))
48bcbca019e6 org-project-info dblock update
Richard Westhaver <ellis@rwest.io>
parents: 640
diff changeset
194
                       path))))))
639
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
195
 
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
196
 (defun org-set-location (value)
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
197
   "Set the value of property LOCATION. If point is before first heading
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
198
 instead set or replace the location file keyword."
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
199
   (interactive (list nil))
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
200
   (let ((val (or value (org-read-property-value "LOCATION" nil nil))))
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
201
     (if (org-before-first-heading-p)
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
202
         (save-excursion
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
203
           (beginning-of-buffer)
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
204
           (let ((start (point)))
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
205
             (when (re-search-forward (rx bol "#+LOCATION:" (+ space) (group (* (not space))) eol) nil t)
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
206
               (setq start (match-beginning 0))
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
207
               (goto-char start)
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
208
               (delete-line))
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
209
             (insert "#+LOCATION: " val "\n")))
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
210
       (org-set-property "LOCATION" value))))
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
211
 
648
926d95e5fdc7 cli/multi and slime-cape fixes
Richard Westhaver <ellis@rwest.io>
parents: 641
diff changeset
212
 (defun org-follow-location (point)
631
0b82a2893d26 inbox compaction
Richard Westhaver <ellis@rwest.io>
parents: 630
diff changeset
213
   "Open the location specified by the LOCATION property of the org heading
0b82a2893d26 inbox compaction
Richard Westhaver <ellis@rwest.io>
parents: 630
diff changeset
214
 or file at point."
648
926d95e5fdc7 cli/multi and slime-cape fixes
Richard Westhaver <ellis@rwest.io>
parents: 641
diff changeset
215
   (interactive "d")
926d95e5fdc7 cli/multi and slime-cape fixes
Richard Westhaver <ellis@rwest.io>
parents: 641
diff changeset
216
   (let ((loc (org-get-location point)))
631
0b82a2893d26 inbox compaction
Richard Westhaver <ellis@rwest.io>
parents: 630
diff changeset
217
     (cond
0b82a2893d26 inbox compaction
Richard Westhaver <ellis@rwest.io>
parents: 630
diff changeset
218
      ((string-match-p org-link-any-re loc) (org-link-open-from-string loc))
0b82a2893d26 inbox compaction
Richard Westhaver <ellis@rwest.io>
parents: 630
diff changeset
219
      ;; TODO 2024-08-29: handle other location types (physical, etc)
0b82a2893d26 inbox compaction
Richard Westhaver <ellis@rwest.io>
parents: 630
diff changeset
220
      (t (find-file loc t)))))
0b82a2893d26 inbox compaction
Richard Westhaver <ellis@rwest.io>
parents: 630
diff changeset
221
 
639
32375ed43c74 org-set-location
Richard Westhaver <ellis@rwest.io>
parents: 638
diff changeset
222
 (provide 'ulang)
50
e62a6a0d5997 organ/lexer, ulang support, gui and web stuff
ellis <ellis@rwest.io>
parents:
diff changeset
223
 ;;; ulang.el ends here