changelog shortlog graph tags branches files raw help

Mercurial > org > meta / changeset: ulang

changeset 9: 995df3d48af0
parent 8: 06698c6708de
child 10: 65bf0057ca35
author: Richard Westhaver <ellis@rwest.io>
date: Sat, 07 Sep 2024 22:38:02 -0400
files: babel.org glossary.org ulang.org
description: ulang
     1.1--- a/babel.org	Wed Sep 04 16:59:32 2024 -0400
     1.2+++ b/babel.org	Sat Sep 07 22:38:02 2024 -0400
     1.3@@ -2,7 +2,7 @@
     1.4 #+author: Richard Westhaver
     1.5 #+description: Core Library of Babel
     1.6 #+setupfile: ../clean.theme
     1.7-#+property: header-args :exports both :eval no
     1.8+#+property: header-args :exports both :eval no-export
     1.9 Welcome to the CC [[https://www.gnu.org/software/emacs/manual/html_node/org/Library-of-Babel.html][Library of Babel]]. This file contains a collection of
    1.10 code blocks which may be used by authors throughout our public
    1.11 documentation.
    1.12@@ -113,24 +113,30 @@
    1.13 systemctl list-units --state=running | grep -v systemd | awk '{print $1}' | grep service
    1.14 #+end_src
    1.15 
    1.16-* wc-dir-lines                                                           :fs:
    1.17+* wc-lines                                                               :fs:
    1.18 :PROPERTIES:
    1.19 :ID:       70008815-9634-48ca-b672-b8dcf2a44074
    1.20 :END:
    1.21-#+name: wc-dir-lines
    1.22-#+begin_src shell :var dir="."
    1.23-cd $dir && cat * | wc -l
    1.24+#+name: wc-lines
    1.25+#+begin_src shell :dir "."
    1.26+cat * | wc -l
    1.27 #+end_src
    1.28 
    1.29-* wc-dir-words                                                           :fs:
    1.30+#+RESULTS: wc-lines
    1.31+: 1574
    1.32+
    1.33+* wc-words                                                               :fs:
    1.34 :PROPERTIES:
    1.35 :ID:       be755790-f367-4654-87e5-cd2927bfef45
    1.36 :END:
    1.37-#+name: wc-dir-words
    1.38-#+begin_src shell :var dir="."
    1.39-cd $dir && cat * | wc -w
    1.40+#+name: wc-words
    1.41+#+begin_src shell :dir "."
    1.42+cat * | wc -w
    1.43 #+end_src
    1.44 
    1.45+#+RESULTS: wc-words
    1.46+: 5944
    1.47+
    1.48 * buffer-name                                                          :util:
    1.49 :PROPERTIES:
    1.50 :ID:       7e9f492e-224a-4cf5-b36d-828ccedc630a
    1.51@@ -139,38 +145,45 @@
    1.52 #+begin_src emacs-lisp
    1.53 (buffer-name)
    1.54 #+end_src
    1.55-* tokei-dir-lines                                                        :fs:
    1.56+
    1.57+* lines                                                                  :fs:
    1.58 :PROPERTIES:
    1.59 :ID:       670e9855-f8d2-43eb-86af-3ef7292f90b9
    1.60 :END:
    1.61-#+name: tokei-dir-lines
    1.62-#+begin_src shell :var src="" :results output replace
    1.63-  cd ~/comp/$src
    1.64+#+name: lines
    1.65+#+begin_src shell :dir "." :results table replace
    1.66   input=`tokei -C -o json`
    1.67   echo $input | jq -r '.["Total"] | .code, .comments, .blanks'
    1.68 #+end_src
    1.69 
    1.70-* tokei-dir-langs                                                        :fs:
    1.71+#+RESULTS: lines
    1.72+| 1584 |
    1.73+|    1 |
    1.74+|  127 |
    1.75+
    1.76+* langs                                                                  :fs:
    1.77 :PROPERTIES:
    1.78 :ID:       ff9682f0-bb64-427f-a87d-e0c655f9fdc9
    1.79 :END:
    1.80-#+name: tokei-dir-langs
    1.81-#+begin_src shell :var src="org" :results output replace
    1.82-  cd ~/comp/$src
    1.83+#+name: langs
    1.84+#+begin_src shell :dir "." :results output table replace
    1.85   input=`tokei -C -o json`
    1.86   echo $input | jq -r '.["Total"].children | keys[]'
    1.87 #+end_src
    1.88 
    1.89+#+RESULTS: langs
    1.90+: Org
    1.91+
    1.92 * sum-str-nums                                                         :util:
    1.93 :PROPERTIES:
    1.94 :ID:       d3c4ac69-337f-430b-a4db-760504f099ea
    1.95 :END:
    1.96 #+name: sum-str-nums
    1.97-#+begin_src emacs-lisp :var s=tokei-dir-lines()
    1.98+#+begin_src emacs-lisp :var str=lines()
    1.99   (let ((tot 0))
   1.100     (cl-loop
   1.101      with tot = 0
   1.102-     for i in (split-string s) do
   1.103+     for i in (split-string str) do
   1.104      (setf tot (+ tot (string-to-number i)))
   1.105      finally return tot))
   1.106 #+end_src
   1.107@@ -236,21 +249,193 @@
   1.108 
   1.109 #+end_src
   1.110 
   1.111-* make-files-tbl                                                     :org:fs:
   1.112+* trim                                                                 :util:
   1.113+#+name: trim
   1.114+#+begin_src bash :var str=""
   1.115+  # remove leading whitespace characters
   1.116+  str="${str#"${str%%[![:space:]]*}"}"
   1.117+  # remove trailing whitespace characters
   1.118+  str="${str%"${str##*[![:space:]]}"}"
   1.119+  printf '%s' "$str"
   1.120+#+end_src
   1.121+
   1.122+#+RESULTS: trim
   1.123+: a b c
   1.124+
   1.125+* skel-show
   1.126+#+name: skel-show
   1.127+#+begin_src shell :dir "~/comp/core" :var key=":id" :results replace
   1.128+  echo $(skel show $key)
   1.129+#+end_src
   1.130+
   1.131+#+RESULTS: skel-show
   1.132+: 15bc-b763-ec92-1cf5
   1.133+
   1.134+#+RESULTS:
   1.135+: (core lisp rust emacs c)
   1.136+* project-root                                                      :project:
   1.137+#+name: project-root
   1.138+#+begin_src emacs-lisp :var project=(project-current)
   1.139+  (project-root project)
   1.140+#+end_src
   1.141+
   1.142+#+RESULTS: project-root
   1.143+: ~/comp/org/meta/
   1.144+
   1.145+* project-name                                                      :project:
   1.146+#+name: project
   1.147+#+begin_src emacs-lisp :var project="."
   1.148+  (project-name (project-current nil project))
   1.149+#+end_src
   1.150+
   1.151+#+RESULTS: project
   1.152+: meta
   1.153+
   1.154+* project-vc                                                        :project:
   1.155+#+name: project-vc
   1.156+#+begin_src emacs-lisp :var project=(project-current)
   1.157+  (cadr project)
   1.158+#+end_src
   1.159+
   1.160+#+RESULTS: project-vc
   1.161+: Hg
   1.162+
   1.163+* project-list                                                      :project:
   1.164+#+name: project-list
   1.165+#+begin_src emacs-lisp
   1.166+  project--list
   1.167+#+end_src
   1.168+
   1.169+#+RESULTS: project-list
   1.170+| ~/comp/core/                    |
   1.171+| ~/comp/org/meta/                |
   1.172+| ~/.emacs.d/elpa/corfu-terminal/ |
   1.173+| ~/comp/core                     |
   1.174+| ~/comp/scratch/zig-pg/          |
   1.175+| ~/comp/scratch/wam/             |
   1.176+| ~/comp/scratch/vdeplug4/        |
   1.177+| ~/comp/scratch/tmux/            |
   1.178+| ~/comp/scratch/scryer-prolog/   |
   1.179+| ~/comp/scratch/screamer/        |
   1.180+| ~/comp/scratch/rerun/           |
   1.181+| ~/comp/scratch/r8k/             |
   1.182+| ~/comp/scratch/qemu/            |
   1.183+| ~/comp/scratch/octatrack/       |
   1.184+| ~/comp/scratch/nu_plugin_quic/  |
   1.185+| ~/comp/scratch/mpk/             |
   1.186+| ~/comp/scratch/lemmy/           |
   1.187+| ~/comp/scratch/io-uring/        |
   1.188+| ~/comp/scratch/infodb/          |
   1.189+| ~/comp/scratch/hy/              |
   1.190+| ~/comp/scratch/hg/              |
   1.191+| ~/comp/scratch/hackrf/          |
   1.192+| ~/comp/scratch/gengat/          |
   1.193+| ~/comp/scratch/fin/             |
   1.194+| ~/comp/scratch/egui/            |
   1.195+| ~/comp/scratch/egui-video/      |
   1.196+| ~/comp/scratch/dev/             |
   1.197+| ~/comp/scratch/davfs2/          |
   1.198+| ~/comp/scratch/crust-0/         |
   1.199+| ~/comp/scratch/cepl.examples/   |
   1.200+| ~/comp/scratch/cc-install/      |
   1.201+| ~/comp/scratch/blok/            |
   1.202+| ~/comp/scratch/archiso/         |
   1.203+| ~/comp/scratch/arch-boxes/      |
   1.204+| ~/comp/scratch/                 |
   1.205+| ~/comp/pod/                     |
   1.206+| ~/comp/org/notes/               |
   1.207+| ~/comp/org/docs/                |
   1.208+| ~/comp/org/blog/                |
   1.209+| ~/comp/org/archive/             |
   1.210+| ~/comp/org/                     |
   1.211+| ~/comp/infra/.stash/src/emacs/  |
   1.212+| ~/comp/infra/                   |
   1.213+| ~/comp/home/                    |
   1.214+| ~/comp/etc/                     |
   1.215+| ~/comp/demo/                    |
   1.216+| ~/comp/box/                     |
   1.217+| ~/.emacs.d/elpa/org-glossary/   |
   1.218+| ~/comp/org/plan/                |
   1.219+| ~/.emacs.d/elpa/eglot-x/        |
   1.220+
   1.221+* project-details                                                   :project:
   1.222+#+name: project-details
   1.223+#+begin_src emacs-lisp :var project="."
   1.224+  (let* ((project (project-current nil project))
   1.225+         (name (project-name project))
   1.226+         (root (project-root project))
   1.227+         (vc-type (downcase (symbol-name (cadr project))))
   1.228+         (age (org-sbe hg-log-age ''(dir root)))
   1.229+         (rev (org-sbe hg-rev ''(dir root)))
   1.230+         (num (org-sbe hg-id-num ''(dir root)))
   1.231+         (tags (org-sbe skel-show (key "':tags'") ''(dir root)))
   1.232+         (id (org-sbe skel-show (key "':id'") ''(dir root)))
   1.233+         (version (org-sbe skel-show (key "':version'") ''(dir root)))
   1.234+         (description (org-sbe skel-show (key "':description'") ''(dir root)))
   1.235+         (vc (format ":%s [[https://vc.compiler.company/%s][vc.compiler.company/%s]] :rev %s"
   1.236+                     vc-type name name
   1.237+                     (format "[[https://vc.compiler.company/%s/rev/%s][%s:%s]]" name rev rev num)))
   1.238+         (langs (mapcar (lambda (x) (downcase (format "%s" x))) (flatten (read (org-sbe langs ''(dir root))))))
   1.239+         (line-counts (flatten (read (org-sbe lines ''(dir root)))))
   1.240+         (line-sum (cl-reduce '+ line-counts))
   1.241+         (lines (format "%s :λ %s :# %s :_ %s" line-sum (pop line-counts) (pop line-counts) (pop line-counts))))
   1.242+    `(hline
   1.243+      (name ,name)
   1.244+      (version ,version)
   1.245+      (description ,description)
   1.246+      (skel-id ,id)
   1.247+      (root ,root)
   1.248+      (vc ,vc)
   1.249+      (tags ,tags)
   1.250+      (updated ,age)
   1.251+      (langs ,langs)
   1.252+      (lines ,lines)
   1.253+      hline))
   1.254+#+end_src
   1.255+
   1.256+#+RESULTS: project-details
   1.257+|-------------+---------------------------------------------------|
   1.258+| name        | meta                                              |
   1.259+| version     | 0.1.0                                             |
   1.260+| description | The Compiler Company Core                         |
   1.261+| skel-id     | 15bc-b763-ec92-1cf5                               |
   1.262+| root        | ~/comp/org/meta/                                  |
   1.263+| vc          | :hg [[https://vc.compiler.company/meta][vc.compiler.company/meta]] :rev [[https://vc.compiler.company/meta/rev/06698c6708de][06698c6708de:8+]] |
   1.264+| tags        | (core lisp rust emacs c)                          |
   1.265+| updated     | 3 days ago                                        |
   1.266+| langs       | (org)                                             |
   1.267+| lines       | 1768 :λ 1632 :# 3 :_ 133                          |
   1.268+|-------------+---------------------------------------------------|
   1.269+
   1.270+* files                                                                  :fs:
   1.271 :PROPERTIES:
   1.272 :ID:       e2ff9dcf-8340-48b8-a1a6-e0036cbcc495
   1.273 :END:
   1.274-#+name: ls-files
   1.275-#+begin_src sh :results silent :var dir=(expand-file-name "~/comp") name="org"
   1.276-  ls -lh $dir/$name --time-style=long-iso \
   1.277+#+name: format-files
   1.278+#+begin_src python :var tab="" :results table :colnames yes :hlines yes :exports results :eval no-export
   1.279+return tab
   1.280+#+end_src
   1.281+
   1.282+#+name: files
   1.283+#+begin_src sh :results replace table :dir "." :colnames yes :hlines yes :post format-files-tbl(*this*)
   1.284+  ls -lh $PWD --time-style=long-iso \
   1.285     |awk '{if (NR!=1) print $8, $5, $6"-"$7}' \
   1.286     |awk 'BEGIN{print "file size updated"}{print $0}'
   1.287 #+end_src
   1.288 
   1.289-#+name: make-files-tbl
   1.290-#+begin_src python :var tab=ls-files() :results table :colnames yes :hlines yes :exports results :eval no-export
   1.291-return tab
   1.292-#+end_src
   1.293+#+RESULTS: files
   1.294+| file          | size |          updated |
   1.295+|---------------+------+------------------|
   1.296+| babel.org     | 24K  | 2024-09-07-19:45 |
   1.297+| business.org  | 803  | 2024-08-19-21:19 |
   1.298+| glossary.org  | 1.2K | 2024-09-06-15:35 |
   1.299+| mindset.org   | 119  | 2024-08-15-21:20 |
   1.300+| pitch.org     | 1.6K | 2024-08-11-17:16 |
   1.301+| readme.org    | 1.1K | 2024-08-27-21:13 |
   1.302+| style.org     | 3.2K | 2024-08-21-16:18 |
   1.303+| tech.org      | 3.6K | 2024-08-21-18:16 |
   1.304+| ulang.org     | 12K  | 2024-09-06-16:12 |
   1.305+| workflows.org | 7.5K | 2024-09-03-16:59 |
   1.306 
   1.307 * env-table                                                              :os:
   1.308 :PROPERTIES:
   1.309@@ -297,11 +482,11 @@
   1.310 		 (format "Org v%s" (org-version))))
   1.311 #+end_src
   1.312 
   1.313-* vc-log                                                                 :vc:
   1.314+* vc-buffer-log                                                          :vc:
   1.315 :PROPERTIES:
   1.316 :ID:       b2d9f6f0-2ac7-4e45-abbe-b32cc2d0f7aa
   1.317 :END:
   1.318-#+name: vc-log
   1.319+#+name: vc-buffer-log
   1.320 #+header: :var limit=-1
   1.321 #+header: :var buf=(buffer-name (current-buffer))
   1.322 #+begin_src emacs-lisp
   1.323@@ -331,35 +516,86 @@
   1.324 :ID:       8119cf43-f2e7-4829-939c-fc4e8531ae6c
   1.325 :END:
   1.326 #+name: hg-rev
   1.327-#+begin_src sh :var src="org"
   1.328-cd ~/comp/$src && hg log -l 1 --template '{node|short}'
   1.329+#+begin_src sh :dir "."
   1.330+hg log -l 1 --template '{node|short}'
   1.331 #+end_src
   1.332 
   1.333 #+RESULTS: hg-rev
   1.334-: 2b6f731f3684
   1.335-
   1.336+: 06698c6708de
   1.337 * hg-id-num                                                              :vc:
   1.338 :PROPERTIES:
   1.339 :ID:       9602faee-5522-445b-a568-be603e20a978
   1.340 :END:
   1.341 #+name: hg-id-num
   1.342-#+begin_src shell :var src="org"
   1.343-cd ~/comp/$src && hg id -n
   1.344+#+begin_src shell :dir "."
   1.345+hg id -n
   1.346 #+end_src
   1.347 
   1.348 #+RESULTS: hg-id-num
   1.349-: 36+
   1.350+: 8+
   1.351 
   1.352 * hg-log-age                                                             :vc:
   1.353 :PROPERTIES:
   1.354 :ID:       8492f4fb-51a6-4221-8705-a15eb5a50ed4
   1.355 :END:
   1.356 #+name: hg-log-age
   1.357-#+begin_src shell :var src="."
   1.358-  cd ~/comp/$src && hg log -l1 --template "{date|age}"
   1.359+#+begin_src shell :dir "."
   1.360+  hg log -l1 --template "{date|age}"
   1.361 #+end_src
   1.362 
   1.363 #+RESULTS: hg-log-age
   1.364+: 3 days ago
   1.365+
   1.366+* hg-churn                                                               :vc:
   1.367+#+name: hg-churn
   1.368+#+begin_src shell :dir "~/comp/core" :results output
   1.369+  hg churn -f "%Y-%m" -s
   1.370+#+end_src
   1.371+
   1.372+#+RESULTS: hg-churn
   1.373+#+begin_example
   1.374+2023-10  36394 ************************************
   1.375+2023-11  12777 ************
   1.376+2023-12  61624 *************************************************************
   1.377+2024-01   4923 ****
   1.378+2024-02   5701 *****
   1.379+2024-03  27292 ***************************
   1.380+2024-04  23322 ***********************
   1.381+2024-05  24141 ***********************
   1.382+2024-06  17608 *****************
   1.383+2024-07   9757 *********
   1.384+2024-08  16177 ****************
   1.385+2024-09   2430 **
   1.386+#+end_example
   1.387+
   1.388+* hg-status
   1.389+#+name: hg-status
   1.390+#+begin_src shell :dir "."
   1.391+hg status
   1.392+#+end_src
   1.393+
   1.394+#+RESULTS: hg-status
   1.395+| M | babel.org    |
   1.396+| M | glossary.org |
   1.397+| M | ulang.org    |
   1.398+
   1.399+* homer
   1.400+#+begin_src shell
   1.401+homer
   1.402+#+end_src
   1.403+
   1.404+#+RESULTS:
   1.405+| :PUSH | /home/ellis/.stash/scripts/wg-gen-keys.sh                   |
   1.406+| :PUSH | /home/ellis/.stash/scripts/upgrade.sh                       |
   1.407+| :PUSH | /home/ellis/.stash/scripts/sc.sh                            |
   1.408+| :PUSH | /home/ellis/.stash/scripts/rec.sh                           |
   1.409+| :PUSH | /home/ellis/.stash/scripts/port-scan.sh                     |
   1.410+| :PUSH | /home/ellis/.stash/scripts/podman-machine-default-update.sh |
   1.411+| :PUSH | /home/ellis/.stash/scripts/pacman-pkgsearch.sh              |
   1.412+| :PUSH | /home/ellis/.stash/scripts/nfs-export.sh                    |
   1.413+| :PUSH | /home/ellis/.stash/scripts/new-mail.sh                      |
   1.414+| :PUSH | /home/ellis/.stash/scripts/genfstab.sh                      |
   1.415+| :PUSH | /home/ellis/.stash/scripts/gen-libera-cert.sh               |
   1.416 
   1.417 * sh-ob-tangle                                                          :org:
   1.418 :PROPERTIES:
     2.1--- a/glossary.org	Wed Sep 04 16:59:32 2024 -0400
     2.2+++ b/glossary.org	Sat Sep 07 22:38:02 2024 -0400
     2.3@@ -38,3 +38,4 @@
     2.4 - PCL :: Practical Common Lisp
     2.5 - LOL :: Let Over Lambda
     2.6 - LOB :: Library of Babel
     2.7+- PPCRE :: Portable Perl-Compatible Regular Expressions
     3.1--- a/ulang.org	Wed Sep 04 16:59:32 2024 -0400
     3.2+++ b/ulang.org	Sat Sep 07 22:38:02 2024 -0400
     3.3@@ -6,8 +6,15 @@
     3.4 :PROPERTIES:
     3.5 :ID:       e63d129f-9024-4cd8-9e2c-77f4bc614663
     3.6 :END:
     3.7-This document describes a *U-Language* as described by the late great
     3.8-[[https://iep.utm.edu/haskell-brooks-curry/][Haskell Curry]]:
     3.9+
    3.10+This document is for contributors and curious readers. It is a loose
    3.11+specification which describes the fundamental rules of how we write in
    3.12+prose, documentation, and other contexts.
    3.13+
    3.14+All sources we write attempt to comply to this specification but it is
    3.15+never /strictly/ enforced. If there is a reason to not comply with a
    3.16+rule, it is already broken.
    3.17+
    3.18 #+begin_quote
    3.19 Every investigation, including the present one, has to be communicated
    3.20 from one person to another by means of language. It is expedient to
    3.21@@ -16,27 +23,20 @@
    3.22 its features. We shall call the language being used the
    3.23 U-Language. [...] There would be no point in calling attention to it,
    3.24 if it were not for the fact that language is more intimately related
    3.25-to our job than of most others.
    3.26+to our job than of most others. -- [[https://iep.utm.edu/haskell-brooks-curry/][Haskell Curry]]
    3.27 #+end_quote
    3.28 
    3.29-In this document, we will be calling attention to our own language -
    3.30-examining it, and describing how it works.
    3.31+In this document, we will be calling attention to our own
    3.32+language - examining it, and describing how it works.
    3.33 
    3.34 Our job is to solve problems. Hard problems preferred. So we ought to
    3.35 pay close attention to the language we use because it brings the
    3.36 reader and writer /closer/ to the problem at hand.
    3.37 
    3.38-For starters, we are primarily concerned with /written languages/ like
    3.39-the one you're reading now. We will skip past the obvious details -
    3.40-English is our primary form of communication for example. The line you
    3.41-are reading currently is a sentence which is part of a paragraph.
    3.42-
    3.43-- This document is for authors and curious readers. It is a loose
    3.44-  specification, but also serves as introductory material into our
    3.45-  communication style and design philosophy.
    3.46-- All sources we write attempt to comply to this standard but it is
    3.47-  not strictly enforced. If there is a reason to not comply with a
    3.48-  rule, it is already broken.
    3.49+We are primarily concerned with /written languages/ like the one
    3.50+you're reading now. We will skip past the obvious details - English is
    3.51+our primary form of communication for example. The line you are
    3.52+reading currently is a sentence which is part of a paragraph.
    3.53 
    3.54 ** Org Mode
    3.55 :PROPERTIES:
    3.56@@ -57,14 +57,16 @@
    3.57 :ID:       236227a5-b30c-4548-8cad-360428d74d67
    3.58 :END:
    3.59 Our *U-Language* is colloquially termed *ulang*. Each section of this
    3.60-document describes a feature of our ulang. 
    3.61+document describes an Org syntax component and how it is used in our
    3.62+writing.
    3.63 ** Emphasis
    3.64 :PROPERTIES:
    3.65 :ID:       88bf1177-b5b7-4945-8bdc-5229803e617e
    3.66 :END:
    3.67-We derive all text emphasis syntax for rich contents from [[https://orgmode.org/manual/Emphasis-and-Monospace.html][Org Mode]].
    3.68+[[https://orgmode.org/manual/Emphasis-and-Monospace.html][Text Emphasis]] in Org covers the range you would expect from any other
    3.69+markup:
    3.70 #+name: org-emphasis
    3.71-#+begin_src org
    3.72+#+begin_src org :results replace
    3.73   - *bold*
    3.74   - /italic/
    3.75   - _underlined_
    3.76@@ -72,23 +74,49 @@
    3.77   - ~code~
    3.78   - +strike-through+
    3.79 #+end_src
    3.80+
    3.81+#+RESULTS: org-emphasis
    3.82 - *bold*
    3.83 - /italic/
    3.84 - _underlined_
    3.85 - =verbatim=
    3.86 - ~code~
    3.87 - +strike-through+
    3.88-
    3.89-Text emphasis markers may be embedded in any syntax as long as it does
    3.90-not cause any conflicts with the host language.
    3.91+\
    3.92+- Text emphasis markers /may/ appear in code comments as long as they do
    3.93+  not cause any conflicts with the host language, although they /should/
    3.94+  be restricted to the =Commentary= section.
    3.95+- ~code~ may sometimes be written instead with =verbatim= emphasis -
    3.96+  the distinction is only important for specific export backends which
    3.97+  support it - see [[https://emacs.stackexchange.com/a/77822][this thread]] for details.
    3.98 ** Links
    3.99 :PROPERTIES:
   3.100 :ID:       7ecaec5d-c656-44e1-8fad-185915655cee
   3.101 :END:
   3.102-*** Link Types
   3.103+Org [[https://orgmode.org/guide/Hyperlinks.html][Links]] are wrapped in brackets like so:
   3.104+
   3.105+#+name: org-links
   3.106+#+begin_src org
   3.107+  [[LINK][DESCRIPTION]]
   3.108+  ;; or without description
   3.109+  [[LINK]]
   3.110+#+end_src
   3.111+
   3.112+- LINK is a URI like https://google.com
   3.113+- DESCRIPTION is optional
   3.114+
   3.115+*** Internal Links
   3.116+:PROPERTIES:
   3.117+:ID:       a867de82-8558-4277-b9d6-b5d3226f73d1
   3.118+:END:
   3.119+[[https://orgmode.org/manual/Internal-Links.html][Internal Links]]
   3.120+*** External Links
   3.121 :PROPERTIES:
   3.122 :ID:       6aedc026-36d0-4763-adc8-8ae1a79f1b3e
   3.123 :END:
   3.124+Org has built-in support for many different types of [[https://orgmode.org/guide/Hyperlinks.html#External-Links-1][External Links]],
   3.125+which are URL-like locators. We also define some custom link types
   3.126+which are used throughout our documentation /and/ code.
   3.127 
   3.128 ** Headings
   3.129 :PROPERTIES:
   3.130@@ -131,7 +159,7 @@
   3.131   println!("H1");
   3.132 #+end_src
   3.133 
   3.134-** Keywords
   3.135+** Todo Keywords
   3.136 :PROPERTIES:
   3.137 :ID: 2cadda9a-22a3-4b42-ad4e-d7a774f74cba
   3.138 :END:
   3.139@@ -140,6 +168,8 @@
   3.140 Item]], but may also be [[https://orgmode.org/manual/TODO-Extensions.html][extended]] to support a variety of stateful item
   3.141 types beyond just simple tasks.
   3.142 
   3.143+We /do not/ specify any
   3.144+
   3.145 The following keywords form the simple set of task states.
   3.146 
   3.147 - TBD
   3.148@@ -211,13 +241,139 @@
   3.149 :PROPERTIES:
   3.150 :ID:       3944c851-e46c-4d75-b8f5-07b5c052177a
   3.151 :END:
   3.152-We reference two different types of identifiers in documentation:
   3.153-- UUID :: =ID= property
   3.154-- User-defined :: =CUSTOM_ID= property
   3.155+Org supports two built-in identifier properties:
   3.156+- ID :: Unique, machine-generated
   3.157+- CUSTOM_ID :: User-defined
   3.158+
   3.159+These IDs don't add any information for the reader - the IDs are used
   3.160+to index and associate headings. All headings are assigned an ID
   3.161+automatically which should never be changed.
   3.162+
   3.163+CUSTOM_IDs are for convenience and extensions, but are rarely
   3.164+necessary given the many ways of identifying a headline.
   3.165+** File Keywords
   3.166+:PROPERTIES:
   3.167+:ID:       27141c7a-e903-4909-890f-b496716a48ba
   3.168+:END:
   3.169+File keywords, also known as [[https://orgmode.org/manual/In_002dbuffer-Settings.html][In-Buffer Settings]] are similar to
   3.170+properties in the sense that they are key/value pairs, but they only
   3.171+appear at the top of a file before any content and use a different
   3.172+syntax.
   3.173+
   3.174+#+begin_src org
   3.175+  ,#+title: some file title
   3.176+  ,#+author: some user
   3.177+  ,#+PROPERTY DESCRIPTION assigning a property via file keyword
   3.178+  some content
   3.179+  ,* a headline
   3.180+  :PROPERTIES:
   3.181+  :DESCRIPTION: just a property, not a file keyword
   3.182+  :END:
   3.183+#+end_src
   3.184+
   3.185+** Tables
   3.186+:PROPERTIES:
   3.187+:ID:       be4c4c52-4353-45df-b2ab-1e72f392008d
   3.188+:END:
   3.189+Org [[https://orgmode.org/manual/Tables.html][Tables]] offer some pretty advanced spreadsheet capabilities which
   3.190+we won't delve into here. Plain tables can be identified in documents by lines
   3.191+starting with the =|= character:
   3.192+#+begin_src org :results replace
   3.193+  | col1 | col2 | col3 |
   3.194+  |------+------+------|
   3.195+  |    1 | foo  | bar  |
   3.196+#+end_src
   3.197+
   3.198+#+RESULTS:
   3.199+| col1 | col2 | col3 |
   3.200+|------+------+------|
   3.201+|    1 | foo  | bar  |
   3.202+
   3.203+** Blocks
   3.204+:PROPERTIES:
   3.205+:ID:       d5a09bc6-07de-4812-ab2e-f5ead1e0d8a7
   3.206+:END:
   3.207+Org [[https://orgmode.org/manual/Blocks.html][Blocks]] consist of a body wrapped in a pair of lines which look
   3.208+like [[id:27141c7a-e903-4909-890f-b496716a48ba][File Keywords]] prepended with =BEGIN_= and =END_=.
   3.209+
   3.210+Simple blocks such as =example= and =center= only have a special
   3.211+meaning during publishing:
   3.212+#+begin_src org :results replace drawer
   3.213+  ,#+begin_example
   3.214+  this is an example block
   3.215+  ,#+end_example
   3.216+
   3.217+  ,#+begin_center
   3.218+  this is a centered block
   3.219+  ,#+end_center
   3.220+#+end_src
   3.221 
   3.222-Most of the time these IDs don't add any information for the reader -
   3.223-the UUIDs are used to index and graph documents, CUSTOM_IDs are for
   3.224-convenience and extensions, but are rarely necessary given the many
   3.225-ways of identifying a headline.
   3.226+#+RESULTS:
   3.227+:results:
   3.228+#+begin_example
   3.229+this is an example block
   3.230+#+end_example
   3.231+
   3.232+#+begin_center
   3.233+this is a centered block
   3.234+#+end_center
   3.235+:end:
   3.236+*** Code Blocks
   3.237+:PROPERTIES:
   3.238+:ID:       0784d230-95b0-4135-a52f-6be4e2d5d80a
   3.239+:END:
   3.240+[[https://orgmode.org/manual/Working-with-Source-Code.html][Code Blocks]] are used to embed source code into a document. They always
   3.241+start with =#+BEGIN_SRC= and end with =#+END_SRC=:
   3.242+
   3.243+#+begin_src org :results replace drawer
   3.244+  ,#+begin_src emacs-lisp
   3.245+    (message "an emacs-lisp code block inside an org document")
   3.246+  ,#+end_src
   3.247+#+end_src
   3.248+
   3.249+#+RESULTS:
   3.250+:results:
   3.251+#+begin_src emacs-lisp
   3.252+  (message "an emacs-lisp code block inside an org document")
   3.253+#+end_src
   3.254+:end:
   3.255+
   3.256+You can embed virtually any type of source code in side a code block,
   3.257+execute it in-place, and control how both the source code and results
   3.258+are presented in the document. Source code blocks may also be
   3.259+collected in a [[file:babel.org][Library of Babel]] and re-used across many documents.
   3.260 
   3.261-All headings are assigned an ID automatically and are never changed.
   3.262+*** Dynamic Blocks
   3.263+:PROPERTIES:
   3.264+:ID:       8898387c-2c84-4f56-80ee-d03daebd0990
   3.265+:END:
   3.266+[[https://orgmode.org/manual/Dynamic-Blocks.html][Dynamic Blocks]] as the name implies are blocks with contents that are
   3.267+dynamically updated. These blocks always begin with =#+BEGIN:=
   3.268+followed by a space, the name of the dynamic block and any parameter
   3.269+values, and end with =#+END:=. The dynamic block name is taken from
   3.270+the name of a function which matches =org-dblock-write:NAME=. This
   3.271+function is called with the parameter values and replaces the body of
   3.272+the block.
   3.273+
   3.274+The only built-in dynamic block is the =clocktable=:
   3.275+#+begin_src org :results replace drawer
   3.276+  ,#+BEGIN: clocktable
   3.277+  ,#+CAPTION: Clock summary at [2024-09-06 Fri 15:23]
   3.278+  | Headline     | Time   |
   3.279+  |--------------+--------|
   3.280+  | *Total time* | *0:00* |
   3.281+  ,#+END:
   3.282+#+end_src
   3.283+
   3.284+#+RESULTS:
   3.285+:results:
   3.286+#+BEGIN: clocktable
   3.287+#+CAPTION: Clock summary at [2024-09-06 Fri 15:23]
   3.288+| Headline     | Time   |
   3.289+|--------------+--------|
   3.290+| *Total time* | *0:00* |
   3.291+#+END:
   3.292+:end:
   3.293+
   3.294+Dynamic blocks are designed for user extension and are a powerful tool
   3.295+to programatically summarize information.