changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > org > meta / ulang.org

changeset 7: 4728f14839e4
parent: f747ffac7f40
child: 995df3d48af0
author: Richard Westhaver <ellis@rwest.io>
date: Tue, 27 Aug 2024 21:35:44 -0400
permissions: -rw-r--r--
description: publishing updates
1 #+title: Universal Language
2 #+author: Richard Westhaver
3 #+email: ellis@rwest.io
4 #+setupfile: ../clean.theme
5 * Introduction
6 :PROPERTIES:
7 :ID: e63d129f-9024-4cd8-9e2c-77f4bc614663
8 :END:
9 This document describes a *U-Language* as described by the late great
10 [[https://iep.utm.edu/haskell-brooks-curry/][Haskell Curry]]:
11 #+begin_quote
12 Every investigation, including the present one, has to be communicated
13 from one person to another by means of language. It is expedient to
14 begin our study by calling attention to this obvious fact, by giving a
15 name to the language being used, and by being explicit about a few of
16 its features. We shall call the language being used the
17 U-Language. [...] There would be no point in calling attention to it,
18 if it were not for the fact that language is more intimately related
19 to our job than of most others.
20 #+end_quote
21 
22 In this document, we will be calling attention to our own language -
23 examining it, and describing how it works.
24 
25 Our job is to solve problems. Hard problems preferred. So we ought to
26 pay close attention to the language we use because it brings the
27 reader and writer /closer/ to the problem at hand.
28 
29 For starters, we are primarily concerned with /written languages/ like
30 the one you're reading now. We will skip past the obvious details -
31 English is our primary form of communication for example. The line you
32 are reading currently is a sentence which is part of a paragraph.
33 
34 - This document is for authors and curious readers. It is a loose
35  specification, but also serves as introductory material into our
36  communication style and design philosophy.
37 - All sources we write attempt to comply to this standard but it is
38  not strictly enforced. If there is a reason to not comply with a
39  rule, it is already broken.
40 
41 ** Org Mode
42 :PROPERTIES:
43 :ID: 98a02bb2-3f39-49c6-898a-68ccd8f3cbe1
44 :END:
45 [[https://www.gnu.org/software/emacs/][GNU Emacs]] is our text editor, so naturally [[https://orgmode.org/][Org Mode]] is our word
46 processor.
47 
48 If you are already familiar with Emacs and Org-Mode, I recommend
49 opening the source of this document in Emacs and following along.
50 
51 If not, I recommend browsing through the [[https://orgmode.org/worg/][Worg resources]], but we won't
52 be getting too deep into tribal hacker knowledge of Emacs.
53 
54 * ulang
55 :PROPERTIES:
56 :CUSTOM_ID: ulang
57 :ID: 236227a5-b30c-4548-8cad-360428d74d67
58 :END:
59 Our *U-Language* is colloquially termed *ulang*. Each section of this
60 document describes a feature of our ulang.
61 ** Emphasis
62 :PROPERTIES:
63 :ID: 88bf1177-b5b7-4945-8bdc-5229803e617e
64 :END:
65 We derive all text emphasis syntax for rich contents from [[https://orgmode.org/manual/Emphasis-and-Monospace.html][Org Mode]].
66 #+name: org-emphasis
67 #+begin_src org
68  - *bold*
69  - /italic/
70  - _underlined_
71  - =verbatim=
72  - ~code~
73  - +strike-through+
74 #+end_src
75 - *bold*
76 - /italic/
77 - _underlined_
78 - =verbatim=
79 - ~code~
80 - +strike-through+
81 
82 Text emphasis markers may be embedded in any syntax as long as it does
83 not cause any conflicts with the host language.
84 ** Links
85 :PROPERTIES:
86 :ID: 7ecaec5d-c656-44e1-8fad-185915655cee
87 :END:
88 *** Link Types
89 :PROPERTIES:
90 :ID: 6aedc026-36d0-4763-adc8-8ae1a79f1b3e
91 :END:
92 
93 ** Headings
94 :PROPERTIES:
95 :ID: ed035298-f7fa-4726-ad58-2d542323bb61
96 :END:
97 In Org, headings can be summarize as any line starting with a star: =*
98 H1=. Headings can be nested or 'demoted' by prepending another star:
99 =** H2=.
100 
101 #+name: org-headings
102 #+begin_src org
103 ,* H1
104 ,** H2
105 ,*** H3
106 ,** H2
107 ,* H1
108 #+end_src
109 
110 This is a useful pattern which we apply outside of Org - most commonly
111 in our code comments.
112 
113 In our source code, we use the comment character instead of a star:
114 #+name: lisp-headings
115 #+begin_src lisp
116 ;;; foo
117 (print "H1") ;; just an inline comment
118 ;;;; bar
119 (print "H2")
120 ;;; baz
121 (print "H1")
122 #+end_src
123 
124 #+name: rust-headings
125 #+begin_src rust
126  /// foo
127  println!("H1");
128  //// bar
129  println!("H2");
130  /// baz
131  println!("H1");
132 #+end_src
133 
134 ** Keywords
135 :PROPERTIES:
136 :ID: 2cadda9a-22a3-4b42-ad4e-d7a774f74cba
137 :END:
138 
139 TODO keywords are often used to keep track of the state of a [[https://orgmode.org/manual/TODO-Items.html][TODO
140 Item]], but may also be [[https://orgmode.org/manual/TODO-Extensions.html][extended]] to support a variety of stateful item
141 types beyond just simple tasks.
142 
143 The following keywords form the simple set of task states.
144 
145 - TBD
146 - TODO
147 - WIP
148 - HOLD
149 - WAIT
150 - DONE
151 - NOPE
152 
153 #+begin_src org
154  ,* PROJECT project
155  ,** DONE foo
156  ,** TODO bar
157  ,** TBD baz
158  ,** WIP test foo
159 #+end_src
160 
161 ** Tags
162 :PROPERTIES:
163 :ID: a7ae1b2a-559e-46e9-8cab-33e39a218288
164 :END:
165 [[https://orgmode.org/manual/Tags.html][Tags]] are used liberally throughout our documents. They are simple
166 strings usually following a headline as a =:=-separated list.
167 
168 A tag can be any text without newlines, although it is recommended to
169 treat them as unique identifiers and usage of whitespace is
170 discouraged (but not disallowed).
171 
172 #+begin_src org
173  ,* foobar :tag1:tag2:@home:!today
174 #+end_src
175 *** Tag Prefixes
176 :PROPERTIES:
177 :ID: b686dbc5-3505-49d7-b66a-0772bcf1a726
178 :END:
179 Some of ourtags are prefixed with a character which indicates a
180 special tag category:
181 - =@= :: location-tag \\
182  A /location tag/ refers to some context-dependent named point in
183  space, such as a user's home address, a popular fast food
184  restaurant, or a specific room found in most houses.
185  - =@home=, =@taco-bell=, =@bedroom=
186 - =!= :: timestamp-tag \\
187  /Timestamp tags/ refer to some point in time, often named for
188  convenience. You may use literal [[https://orgmode.org/manual/Timestamps.html][Timestamps]] too. Timestamp tags
189  should not /directly reference/ scheduling information, doing so is
190  often a code-smell.
191  - =!now=, =!christmas=, =!someday=
192 - =#= :: anchor-tag \\
193  An /anchor tag/ implies a link to the object identified by some [[id:3944c851-e46c-4d75-b8f5-07b5c052177a][ID]].
194  - =#readme=, =#a7ae1b2a-559e-46e9-8cab-33e39a218288=, =#custom-id=
195 ** Properties
196 :PROPERTIES:
197 :ID: 174a993b-a5dc-4324-b4f8-dda8101a55b7
198 :END:
199 [[https://orgmode.org/manual/Properties-and-Columns.html][Properties]] are key:value pairs which are associated with a heading or
200 file and stored in a dedicated [[https://orgmode.org/manual/Drawers.html][Drawer]].
201 
202 #+begin_src org
203  ,* WIP do stuff :@lab:
204  :PROPERTIES:
205  :CREATED: <2024-08-24 Sat 19:09>
206  :ID: 62da3982-7a83-4b27-ab7e-55949fd3e2a3
207  :EFFORT: 24:00
208  :END:
209 #+end_src
210 *** ID
211 :PROPERTIES:
212 :ID: 3944c851-e46c-4d75-b8f5-07b5c052177a
213 :END:
214 We reference two different types of identifiers in documentation:
215 - UUID :: =ID= property
216 - User-defined :: =CUSTOM_ID= property
217 
218 Most of the time these IDs don't add any information for the reader -
219 the UUIDs are used to index and graph documents, CUSTOM_IDs are for
220 convenience and extensions, but are rarely necessary given the many
221 ways of identifying a headline.
222 
223 All headings are assigned an ID automatically and are never changed.