Skip to content

hftf/roirpt

Repository files navigation

roirpt

(pronounced /ʁwaʁp/)

Stuff for stoiners (pronounced /stwæ.ɲe/)

I basically just git initted in my plover dir and started committing WIPs

This README is better viewed in full width (> 1100 pixels)

Contents

A hundred dictionary files? Why so many?

File formats for storing stenography dictionaries are extremely limited: JSON is the default (among other interchangeable rudimentary key–value formats), while a few plugins allow for Python scripts (dynamic dictionaries) or Markdown documents (entries embedded in code blocks interweave with verbose comments in Literate Programming style) to behave as dictionaries.

There is no systematic capability available for rich, well-structured dictionary data with annotations, tags, or metadata holding explanatory comments, part of speech, multiple categories (such as domain or context of use), interlinking cross-references, creation/modification dates, usage or misstroke statistics, review or conflict status, preferred/prescribed outlines, or any other elaborating information or methodology. There is no preprocessor or advanced abstraction to factor common entries in terms of other entries, like affixes, constituents, compounds (e.g. “always capitalize any combination of united followed by kingdom”). This is not conducive to learning or communicating, since dictionaries often function as first references in the absence of adequate pedagogic material.

The only option is to maintain many separate dictionaries.

There are many advantages to splitting: Each dictionary’s filename labels its purpose. It is easier to manually inspect and manipulate entries, since similar entries tend to be closer to each other. Separate dictionaries can be reordered, enabled, or disabled at will. Entries demonstrating one concept are found in a single file easily shared with others (“here are all of, and only, the entries that follow the AEBGTject pattern”) that can be borrowed without worrying about massive conflicts.

Indeed, it is unwieldy to maintain a large number of dictionaries in Plover’s interface, and not all entries cleanly fit within a single dictionary (but choosing one is not a science).

caret-*.json

Introduces ^ to represent a pre-initial schwa.* Requires the plover-stenotype-extended plugin.

A few groups of rhymes so you can see why this might be useful:

Group Word Steno Pseudosteno Plover default entries
-end pend PEPBD (PEND) PEPBD
spend SPEPBD (SPEND) SPEPBD
append ^PEPBD (^PEND) A(P)/PEPBD
expend KPEPBD or
^SPEPBD
(XEND) or
(^SPEND)
KPEPBD or EBGS/PEPBD
extend ^STEPBD (^STEND) EBGS/(S)TEPBD
-ent sent SEPBT (SENT) SEPBT
assent ^SEPBT (^SENT) AS/SEPBT
ascent ^SKREPBT (^SCENT) AS/KREPBT
accent ^KPEPBT (^XENT) ABG/SENT or ABGS/EPBT or KP*EPBT
stent STEPBT (STENT) STEPBT
extent ^STEPBT (^STENT) EBGS/((S)T)EPBT
competent KPEPBT (KPENT) KPEPBT or KPE/TEPBT or KOFRP/TEPBT etc.
scent SKEPBT or
SKREPBT
(SKENT) or
(SCENT)
SKEPBT or
SKREPBT
consent SK*EPBT (SK*ENT) SK*EPBT or KAUPB/SEPBT etc.
-ent intent SPWEPBT (INTENT) SPWEPBT or EUPB/TEPBT
absent ^SPWEPBT (^SBENT) AB/SEPBT

* Note: This is not a new idea; people have implemented similar ideas before in different ways (see phenrsteno for where I got the inspiration). I chose ^ since it looks like both a small superscript A and also the IPA symbol ʌ, which is used to represent a (usually stressed) schwa in English. I like using a punctuation character (rather than e.g. a or e) because I like the ability to easily grep for steno strokes as strings of only uppercase letters or symbols, and because in general-purpose search engines I can search for strokes and it will return results that ignore the symbol (although that could eventually be a footgun).

Sample of other groups of words that ^ trivially or neatly solves:

Group Word Steno Pseudosteno Plover default entries
1 way WAEU (WAI) WAEU
away ^WAEU (^WAI) W*AEU
ware WAEUR (WAIR) WAEUR
aware ^WAEUR (^WAIR) A/WAEUR
long HROPBG (LONG) HROPBG
along ^HROPBG (^LONG) AOLG
2 lesson HREFPB (LEFN) HR*EFPB or HR-FPB
eleven ^HREFPB (^LEFN) HREFPB
3 limit HREUPLT (LIMT) HREUPLT
eliminate ^HREUPLT (^LIMT) HREUPL/TPHAEUT
4 least HRAOEFT (LEEFT) HRAOEFT
alleviate ^HRAOEFT (^LEEFT) A/HRAOEFT or HRAOEF/KWRAEUT
5 motion PHOEGS (MOESHUN) PHOEGS
emotion ^PHOEGS (^MOESHUN) AOEGS or AOE/PHOEGS
6 norms TPHORPLS (NORMS) TPHORPLS
enormous ^TPHORPLS (^NORMS) TPHO*RPLS or TPHOERPLS
7 involve SROFL (VOFL) SROFL
evolve ^SROFL (^VOFL) SRO*FL etc.
8 vice SRAOEUS (VIIS) SRAOEUS¹
device TKWAOEUS (DVIIS) TKWAOEUS etc.
advice ^TKWAOEUS (^DVIIS) SREUS etc.
9 stipulate STEUPLT (STIPLT) STEUP/HRAEUT
stimulate STEUFRLT (STImLT) ST*EUPLT
estimate ^STEUPLT (^STIMT) STEUPLT

¹ I call these Kipling-style briefs since they drop the entire first minor syllable

Sample text (schwa manifesto)

IDK ^TK-BG why you would avoid ^SROEUD using pre-initial ^TPHEURBL schwa at^T thisTHEU pointPT ^THEUPT. It’s the easiest and most consistent available ^SRAEUBL iteration ^TRAEUGS upon the ^POPBT Eng^STKPWlishHREURB ^STKPWHREURB layout that you can inc^TKPorporateORPT ^TKPORPT to adv^TKWanceAPBS ^TKWAPBS e^fficieTPEURBncyS ^TPEURBS without un^TPHnecessaryTPHES ^TPHES memorization. Its om^*PHissionEUGS ^PH*EUGS by Ward Stone Ireland seems unusual ^TPHAOURBL in ^TPHretrospectRERPT ^TPHRERPT. Thankfully, it is easy to acquire ^KWAOEUR and accessible ^SEBL, ^KPES/-BL, etc. to exploit ^SPHROEUT on most hobbyist steno keyboards by customizing a few ^TPAOU essential ^SERBL things as^S needTPHAOEDed-T ^STPHAOETD.

Apologies ^POLGS for a^ littleHREUL bitBT ofF ^HREUFBLT innocuous ^TPHOBGS fun. This extra ^KPRA key just makes me want to express ^KPRES emotions ^PHOEGSZ about how I feel so alive ^HRAOEUF and as^S freeTPRAOE asS ^STPRAOES an avian ^SRAOEPB ani^TPHEUmFRalL ^TPHEUFRL! Join the avant ^SRAPBT garde! You’re not alone ^HROEPB and can learn it in a day ^TKAEU or only within a ^W-PB week. I welcome you to opine ^PAOEUPB with your approach ^PROEFP to writing all^HR ofF theT ^HR-FT assorted ^SORTD marked words. Hoping I don’t annoy ^TPHOEU or offend ^TPEPBD a ton of ^TOFPB people by evange^SRAPBGlizLZing/-G ^SRAPBLGZ/-G its appeal ^PAOEL, but its existence ^KPEUFPBS is actually ^TWAEUL a huge asset ^SET.

Tip

Crash-course glossary of phonetic terms used

It is not necessary to know these terms, as their meaning can still be understood in context and through the examples.

Manners of articulation

Stop
Consonant with sudden release after blocked airflow: p, b, t, d, k, g.
Nasal
Consonant with continuous release and airflow through nose: m, n.
Fricative
Consonant with continuous release and turbulent airflow: f, v, s, z, sh, th, h.
Affricate
Consonant that combines stop followed by fricative: ch, j.
Liquid
Consonant with continuous release and non-turbulent airflow: l, r.

Syllable parts

Initial
Consonant (or consonant cluster) forming the onset (beginning part) of a syllable.
Pre-initial
Minor syllable before main syllable part. Usually limited to weak, unstressed light syllables: about, embed.
Schwa
Neutral vowel “uh” (ə) common in English unstressed syllables.

The ex-/comp- conflict, etc.

These dictionaries do not claim to solve the ex-/comp- conflict systematically or completely, but represent the general direction I was going for. In the case of a conflict, usually the leftmost option or the more common word gets priority.

no prefix prefixed with S prefixed with ^ prefixed with ^S
t- ST  st- ^T  att- ^ST  est-¹ or ext-
p- SP  sp- ^P  app- ^SP  esp- or exp-
c- SK  sc- ^K  acc- ^SK  esc- or exc-
KP comp- or ex- SKP and- ^KP ex- or exC-² ^SKP

Note that this table is designed to be mnemonic, not comprehensive. For example:

  1. ^ST: “est-” is shorthand for “ast-, aust-, est-, ist-, ost-, etc.” (as in astute, austere, estate, Istanbul, ostensible)
  2. ^KP: is ext- or exp- or exc- when used with R (as in extra ^KPRA, express ^KPRES)

Compound initial sounds

In development (not really). Looking for permanent homes for certain starters (marked with ? for now).

For certain other combinations (stop, fricative + stop, stop + fricative, stop + fricative + stop), see the table under the ex-/comp- conflict.

Type StarterStenoPseudo StarterStenoPseudo
no prefix prefixed with com- con- K-
Nasal + nasal
MM amm- emm- imm- ^PH (^M) comm- KPH (KM)
NN ann- enn- inn- ^TPH (^N) conn- K (K)
Nasal + stop
MP amp- emp- imp- KPW (IMP) comp- KP (KP)
MB amb- emb- imb- KPW (IMP) comb- KPW (KB)
NT ant- ent- int- SPW (INT) cont- K (K)
ND and- end- ind- SKP (AND) cond- K (K)
NK anc- enc- inc-
ank- enk- ink-
^TKP (INK) conc-
conk-
K (K)
NG ang- eng- ing- ^STKPW (ING) cong- K (K)
Nasal + affricate
NJ      enj- inj-
ang- eng- ing-³
^SKWHR (INJ) conj-
cong-³
?
Nasal + fricative
NF      enf- inf- TPW (INF) comf-
conf-
TKP or
TKP*¹
(KF) or
(KF*)¹
NV      env- inv- TPWH (NW) conv- KW (KW)
NS ans- ens- ins-
anc- enc- inc-³
STPH (SN) cons-
conc-³
SK (SK)
Nasal + fricative + stop
NSP          insp- STPH (SN) consp- SKP (KSP)
NST          inst- STPH (SN) const- ?
NSK          insc- STPH (SN) consc- ?
Stop + fricative
BS abs- obs- SPW or
^SPW²
(SB) or
(^SB)²
n/a
DF def- dif- TKP or
TKW¹
(DF) or
(DW)¹
DV dev- div- TKW (DW)
DS des- dis-
dec-³
desc- disc-³
STK (DS)
Fricative + fricative
SF suff- surf- STP (SF) n/a
SV subv- surv- SW (SW)
  1. when it conflicts with dep- TKP (DP)
  2. when it conflicts with int- SPW (INT)
  3. followed by a front vowel (e, i, y) only, i.e. “soft” pronunciations of c or g

Note that NK can optionally come before W to form a starter for NQ: inquire ^TKPWAOEUR (INKWIIR).

Example mnemonics for a few starters:

Starter Steno Explanation Shape Resembles
NK ^TKP (K) + ^TP,
like (N) shifted left
▜▘ ⚓️ anchor
💂🏿‍♂️ Mr. T, who encouraged kids to stay in class
NG ^STKPW (G) + ^S █▌ 🔳 quadrangle ingot
NJ ^SKWHR (J) + ^H ▙▟ 🌉 engineer’s suspension bridge
🚂 train engine
NF TPW (F) + W   ꟻ  an inverted F
7️⃣ infamous favorite number
NV TPWH (NW) ▝▛ ✉️ envelope invitation

The pattern for the prefix con- plus a consonant can be thought of as K alone when the consonant is a non-labial non-continuant, and K overlapped with the consonant otherwise. This is because in the former case, consonant chords already overlap with K. Alternatively, it can be thought of as dropping the consonant after K when it is a non-labial non-continuant.

LabialCoronalVelar
Non-continuants NasalKPH
comm-
K
conn-
StopKP
comp-
KPW
comb-
K
cont-
K
cond-
K
conc-
conk-
K
cong-
Affricate K
conj-
cong-³
Continuants Fricative TKP
comf-
conf-
KW
conv-
SK
cons-
conc-³
Liquid KHR
coll-
KR
corr-

As usual, the asterisk is used for conflict resolution here, but K* can also be thought of as representing a doubling or strengthening of K for words that would require two Ks, such as concord KO*RD (≠ cord KORD) or concave KA*EUF (≠ cave KAEUF).

More complex compound starters?

Recently thinking about adding a few more starters, inspired by wooningeire. Most seem rare though (not counting productive prefixes like in-). My dictionary contains some ad-hoc solutions, e.g. anthology SPWO*LG (INT*OLG) that try to get away with dropping consonants, e.g. enthusiast ^THAOUFT (^THUUſT), which I mostly dislike.

Type Starter Steno Explanation Example
MF amph- emph- KPWH
TPW
KPW + H amphibious, emphatic
NTH anth- enth- SPWH SPW + H anthem, anthology, anthropology, enthrone
NKP incap- incomp- ^TKP ^TKP (P reused) incapable, incapacitate, incompatible, incompliant
NKSP inconsp- ^STKP ^TKP + S inconspicuous
NKV inconv- ^TKPW ^TKP + W inconvenient
NCH ench- incoh- ^TKPH ^TKP + H enchant, incoherent

Caveats

Sometimes the dictionary includes:

  • shifty inversions, such as album ^PWHRUPL (^BLUM) or abduct ^TKPWUBGT (^DBUKT)
  • fingery conveniences, such as elected ^HREBGD (^LEKD) for canonical ^HREBGTD (^LEKTD) – as per the main.json entry AOE/HREBGD (EE/LEKD)
  • misstrokes actually just manual data entry errors at this point
  • generous brainfarty fallbacks, such as active ^TWEUF for canonical ^TW (core of the activ- word family)
  • redundant redundancies that I’ll never actually use but are there for completionism’s sake, such as upon ^POPB (^PON)
  • opinionated briefs, such as pretty much most of the dictionary (I had an example but it slipped my mind)
  • or orphans, such as apple ^PHR (^PL) because before I got deep into this whole rabbit hole I tried defining it as WAPL although I guess that conflicts with wam so it was cute while it lasted

Stressed pre-initials

Sometimes the conceit is stretched to include any pre-initial vowel, even stressed, if convenient, such as era ^RA, or if it would be annoying to write out. But words like efficacy are not really in scope. Without a lot of repetition, I’ll usually reach for briefs along the lines of APLZ rather than ^PHAFPB for Amazon due to the stress mismatch. (I’ll move these into caret-stressed.json, okay)

Words without initial stress take precedence, so even the misstroke eleventh ^HREFPBT precedes elephant.

Word families are kept together in the core part of the dictionary, even if one word happens to be stress-initial. For example, illustrate and illustrative. Similarly, words with ambiguous initial stress are kept in core, such as apparatus.

Word family starters

Note that word family starters usually contain the primary stress (e.g. elèctr). This is different from most other caret entries, which conventionally have unstressed starters.

Starter Steno Pseudosteno Example
activ ^TW (^TW) activate ^TWAEUT
activity ^TWEUT
autom
autonom
^TPWH (^TWM) automate ^TPWHAEUT
autonomy ^TPWHEU
electr ^TWR (^TWR) electron ^TWROPB
electric ^TWREUBG

Conflict theory

Tries to use * to more or less resolve conflicts based on an informal hierarchy of differently colored schwas:

  • Spelled with a etc. or pronounced with a low-mid vowel or schwa (“schwa”) /ə æ ʌ/ etc.
  • Spelled with e, i, etc. or pronounced with a front vowel or i-colored schwa (“schwi”) /i ɪ ɨ ᵻ ɛ/ etc.
  • Spelled with o, au, etc. or pronounced with a back vowel or u-colored schwa (“schwu”) /ɵ ᵿ oʊ ɔ ɒ/ etc.

So for example:

  • addition ^TKEUGS (^DISHUN)
  • edition ^TK*EUGS (^D*ISHUN)
  • audition would be next in line but alas the overworked * key only allows distinguishing one bit of conflict

Another example:

  • a mission would be first in line if this phrase were actually needed, but the two worthier words below take more priority
  • emission ^PHEUGS (^MISHUN)
  • omission ^PH*EUGS (^M*ISHUN)

The farther the vowel is from mid central, the lower the priority:

  • elicit ^HREUS/EUT (^LIS/IT)
  • illicit ^HR*EUS/EUT (^L*IS/IT)

But derivations of asterisked words can be unasterisked if there is no longer a conflict:

  • allusion ^HRAOUGS (^LUUSHUN)
  • illusion ^HRAO*UGS (^L*UUSHUN)
  • illusory: both ^HRAOUS/REU (^LUUS/RI) and ^HRAO*US/REU (^L*UUS/RI) because *allusory isn’t a word

The a lot/allot and a lot of/aloft conflicts are resolved by using AU for the latters. Although per the above, allotment is both ^HRAUPLT (^LAUMT) and ^HROPLT (^LOMT).

Not yet consistent, might try to keep word families together. TODO figure out better efficient/officiate and acceptable/accessible

Pseudosteno

When relevant, ^ can be written in pseudosteno as initial a e or o instead. For example, ^DISHUNaDISHUN, ^D*ISHUNeD*ISHUN or whatever. I guess ^sT for ext ^ST can work too

*-prefix-word-parts.json

Contains non-word prefixes such as extens ^STENS to make longer words from parts. For example, extensible does not need to be explicitly defined as it can be formed from extens + -able -BL. (Wait, this is a bad example oof)

Though some entries are arguably independent words, such as anon ^TPHOPB (^NON) or admin ^TKPHEUPB (^DMIN), I put them here due to their intentional function of taking suffixes. For this reason, these entries are not literally prefixes of the form {blah^}. Those affixes (prefixes and suffixes) are in *-affixes.json.

*-phrasing.json

Multi-word entries that could be considered part of a more memorization-heavy “phrasing” system.

Half the entries are just short mandatories + ^ that give the word a appended on either before or after, such as a bit ^PWEUT (^BIT) or from a ^TPR (^FR)

Highly attested phrasings that seem wholly uncontroversial, such as akin to ^KEUPBT (^KINT) or according to ^KORGT, are in the non-phrasing dictionaries instead.

*-product-names.json, etc.

Keeps words with stylized official spellings in the same place to make it easy to review, find patterns, etc.

caret-as-s.json

Shape-based outlines that relied on top S have been redefined with ^ in place of S

caret-trying-out.json

Testing ground for some guys I’m trying out, will see how it feels

caret-ipa-fingerspelling.json

Fingerspelling dictionary for IPA symbols used in (American) English as well as a selection of commonly used IPA symbols in general. Omits ordinary letters, like s, as they can be fingerspelled normally. Intended to be iconic and useful, rather than comprehensive.

Like ordinary fingerspelling, the left bank is used for consonants and the vowel bank is used for vowels, but the right bank is used for some vowel variants and suprasegmentals as well.

^*- is used for IPA fingerspelling, and ^*-P for suprasegmental symbols. The consonants follow the convention of H for fricative (if the base is plosive) or palato-alveolar (if the base is already fricative), R for retroflex, and HR for palatal (i.e. alveolo-palatal). The vowels follow the convention of -F for turned or barred variants.

IPAChordBaseExplanation
Suprasegmentals
ʰ ^-FPD -P-FD (-H)
ˈ ^-PD -P-D top
ː ^-PDZ -P-DZ top and bottom
ˌ ^-PZ -P-Z bottom
Consonants
ɸ ^TP* TP (F) F, since ^PH* is used for ɱ
β ^PWH* PW (B) B + fricative H
θ ^TH* T (T) T + fricative H
ʈ ^TR* T (T) T + retroflex R
ɬ ^THR* T (T) T + HR (L)
ð ^TKH* TK (D) D + fricative H
ɖ ^TKR* TK (D) D + retroflex R
ɟ ^TKHR* TK (D) D + palatal HR
^SKWR* SKWR (J) convenient for d TK* + ʒ
ʃ ^SH* S (S) S + fricative H
ʂ ^SR* S (S) S + retroflex R
ɕ ^SHR* S (S) S + palatal HR
ʒ ^STKPWH* STKPW (Z) Z + fricative H
ʐ ^STKPWR* STKPW (Z) Z + retroflex R
ʑ ^STKPWHR*STKPW (Z) Z + palatal HR
χ ^KH* K (K) K + fricative H
ç ^KHR* K (K) K + palatal HR
ɡ ^TKPW* TKPW (G)
ɣ ^TKPWH* TKPW (G) G + fricative H
ʁ ^TKPWR* TKPW (G) ɢ’s uvularity + rhotic R
ʔ ^TKPWHR* TKPWHR (GL)GLottal
ɱ ^PH* PH (M)
ŋ ^TPH* TPH (N)
ɳ ^TPHR* TPH (N) N + retroflex R
ɹ ^R* R (R)
Semivowels
ʍ ^WH* WH (WH)
ɥ ^WHR* W (W) W + palatal HR
ɰ ^WR* WR
Long vowels and diphthongs
^AO*E AOE (EE)
ɪəɹ ^AO*ER AOE (EE) + R
^A*EU AEU (AI)
ɛəɹ ^A*EUR AEU (AI) + R
^AO*EU AOEU (II)
aɪəɹ^AO*EUR AOEU (II)+ R
^AO*U AOU (UU)
ʊəɹ ^AO*UR AOU (UU) + R
^O*E OE (OE)
ɔəɹ ^O*ER OE (OE) + R
^O*U OU (OU)
aʊɹ ^O*UR OU (OU) + R
ɔɪ ^O*EU OEU (OI)
Short vowels
ɪ ^*EU EU (I)
ɪəɹ ^*EUR EU (I) + R
ɨ ^*EUF EU (I) + F for barred
ɛ ^*E E (E)
əɹ ^*ER E (E) + R
ə ^*EF E (E) + F for turned
æ ^A* A (A)
æ ^A*E AE (AE) (redundant)
ɑɹ ^A*R A (A) + R (redundant)
ɐ ^A*F A (A) + F for turned
ɑ ^A*U AU (AU)
ɑɹ ^A*UR AU (AU) + R
ɒ ^A*UF AU (AU) + F for turned
ɔ ^O* O (O)
ɔɹ ^O*R O (O) + R
ɵ ^O*F O (O) + F for barred
œ ^O*EF OE (OE) + F for ligature
ʊ ^AO* AO (OO)
ʌ ^*U U (U)
ɜːɹ ^*UR U (U) + R
ʉ ^*UF U (U) + F for barred
ɯ ^PH*F PH (M) + F for turned

user-diacritics.json

Contains words spelled with diacritics (e.g. café) as well as multi-stroke fingerspelling entries for letters with diacritics (e.g. ä = A*/^-FL) based on iconic right-hand shapes. See another precedent of this.

Diacritic Symbol Chord Shape
Acute ´ ^-RP ⠐⠁⠀
Grave ` ^-PG ⠀⠑⠀
Circumflex ˆ ^-RPG ⠐⠑⠀
Háček ˇ ^-FBL ⠈⠊⠀
Macron ¯ ^-FPL ⠈⠉⠀
Breve ˘ ^-FRBLG ⠘⠚⠀
Tilde ˜ ^-RPBL ⠐⠋⠀
Umlaut ¨ ^-FL ⠈⠈⠀
Ring ˚ ^-P ⠀⠁⠀
Slash ̷ ^-RL ⠐⠈⠀
Cedilla ¸ ^-RPB ⠐⠃⠀

user-*.json

I mean sure? but probably of little interest until Chordial exists

user-main-overrides.json

Cause I really don’t like these defaults. Also includes some prefixes, such as zee SAO*E (ZEE) or ob OB (OB), but I put them in this file because the intent is entirely to cover up annoying defaults that confuse me when typing stroking outlining writing longer words

user-punctuation.json

“Sentence” means sentence-contextual (built-in feature that attaches punctuation to preceding word). Add * to the first four (Period, Comma, Question, Exclamation) for unspaced versions.

I envision ? KW-PL and ! TP-BG as shape-based complements of each other: the shape of KW-PL ascends from left to right like a question’s intonation rising ↗︎, and the shape of TP-BG descends like the inflection of an exclamation falling ↘︎. (See also)

Code Command Spacing Steno Shape Explanation Plover default
{.} Period Sentence TP-PL ⠈⠁⠀⠉⠀ middle+ring, also FuLL stoP yes
{,} Comma Sentence KW-BG ⠐⠂⠀⠒⠀ low mnemonic for descender yes
{?} Question Sentence KW-PL ⠐⠂⠀⠉⠀ shaped like rising intonation,
also quasi-p. QUestion Mark
yes
{!} Exclamation Sentence TP-BG ⠈⠁⠀⠒⠀ shaped like falling intonation,
also quasi-phonetic BanG
yes
{^:^} Colon Unspaced TH-FL ⠈⠈⠈⠈⠀ dot pairs, on upper row like . KHR-PB (CoLoN)
{:} Colon Sentence ^P-PT ⠁⠁⠀⠁⠁ same but further out STPH-FPLT
{^;^} Semicolon Unspaced KR-RG ⠐⠐⠐⠐⠀ dot pairs, on lower row like , TH-FL
{;} Semicolon Sentence SW-BS ⠂⠂⠀⠂⠂ same but further out STPH*FPLT, SP-PT
{^…} Ellipsis After SW* ⠂⠂⠀⠀⠀ three dots on lower left row HR-PS (eLliPSis)
{^_^} Underscore Unspaced KWR-RBG ⠐⠒⠐⠒⠀ low line, index-middle-ring RUPBD (UNDeR)
{^-^} Hyphen Unspaced H-F ⠀⠈⠁⠀⠀ tiny line across upper row H-PB (HypheN)
- Dash Spaced PH-FP ⠀⠉⠉⠀⠀ short line across upper row H*PB
En dash Spaced TPH-FPL ⠈⠉⠉⠁⠀ longer line across upper row TPH-RB (NdaSH)
Em dash Spaced ^TPH-FPLT ⠉⠉⠉⠉⠀ longest line across upper row PH-RB (MdaSH)

user-punctuation-paired.json

For paired punctuation, such as (opening and closing) brackets and quotation marks.

I prefer outlines based on iconic symbol shapes to outlines based on symbol names. Outlines for the opening/closing square brackets, curly braces, and angle brackets use exclusively the left/right key banks respectively. To avoid conflicts, the main outlines for opening/closing parentheses use both banks, with vowels A and U meaning opening/closing respectively. When I want to type symbols, I don’t want my hands to feel like they’re typing real words, and vice versa.

For aesthetic reasons, the vowel keys in the diagrams below are positioned to line up with the WR and RG keys, although by default the Uni lines them up with R*₂ and *₄R. This layout decision does not apply to other sections of this document.

Code Command Spacing Steno Shape Explanation Plover default
{~|(^} Paren open Before KPAPG ⠐⠅⠀⠑⠀ shaped like parenthesis,
left vowel for open
PREPB (PaREN)
{^~|)} Paren close After KPUPG ⠐⠁⠀⠕⠀ shaped like parenthesis,
right vowel for close
PR*EPB
{~|()^}
{#Left}
Paren both Before KPAUPG ⠐⠅⠀⠕⠀ shaped like parentheses,
cursor in between
PR*EPBS (meant for code,
not prose)
{[^} Bracket open Before TKPA ⠘⠅⠀⠀⠀ shaped like square bracket PWR-BGT (BRacKeT)
{^]} Bracket close After UPLG ⠀⠀⠀⠝⠀ shaped like square bracket PWR*BGT
{~|[]^}
{#Left}
Bracket both Before TKPAUPLG ⠘⠅⠀⠝⠀ shaped like square bracket none
{[^} Brace open Before SKPWA ⠒⠅⠀⠀⠀ left brace protruding out TPR-BGT (FRench bracKeT)
{^]} Brace close After UPBGS ⠀⠀⠀⠕⠂ right brace protruding out TPR*BGT
<{^} Angle open Before TKWA ⠘⠆⠀⠀⠀ left angle tilted 45° CCW ⤺ PWRABG (BRACKet)
{^}> Angle close After UBLG ⠀⠀⠀⠞⠀ right angle tilted 45° CW ⤸ PWRA*BG
{'^} Quote open Before KW-LT ⠐⠂⠀⠈⠁ analog of KW-GS for " open,
top row mnemonic for ' form;
also quasi-p. QUote LefT
SKW-T (Single QUoTe)
{^'} Quote close After KR-LT ⠐⠐⠀⠈⠁ analog of KR-GS for " close,
top row mnemonic for ' form;
also quasi-p. Quote RighT
SKW*T, -PBT

Some alternate versions:

Code Command Spacing Steno Shape Explanation
{~|(^}  Paren open Before STKPWA ⠚⠇⠀⠀⠀ shaped like thicker paren
{^~|)}  Paren close After UPBLGS ⠀⠀⠀⠟⠂ shaped like thicker paren
<{^} Angle open Before TPWA ⠈⠇⠀⠀⠀ left angle tilted 135° CW ⤸
{^}> Angle close After UPBL ⠀⠀⠀⠏⠀ right angle tilted 135° CCW ⤺

Add * for unspaced versions.

Code Command Spacing Steno Shape Explanation Plover default
{^}({^} Paren open Unspaced STKPWA* ⠚⠇⠂⠀⠀ shaped like thicker paren P*PB (PareN)
{^}){^} Paren close Unspaced *UPBLGS ⠀⠀⠀⠟⠂ shaped like thicker paren P*PBT (PareNThesis)
etc.

user-commands.json

Retroactives

Left side of the board is mnemonic for “retroactive.”

Code Command Steno Pseudosteno Shape Explanation
{*+} Repeat Last Stroke # # wiki default
{*} Toggle Asterisk #* #* wiki default
{*?} Retro Add Space #SK i.e. #SK ⠒⠄⠀⠀⠀ horizontal is mnemonic for add space
{*!} Retro Delete Space 2K i.e. #TK ⠘⠄⠀⠀⠀ vertical is mnemonic for no gap
#NOOP 2K3W i.e. #TKPW ⠘⠇⠀⠀⠀ used for notes-to-self

Spacing control

Need to add backspace

Code Command Steno Shape Explanation Plover default
{^^} Suppress Next Space TK-TS ⠘⠀⠀⠀⠃ 2nd-furthest columns TK-LS (DeLete Space)
{^^} Suppress Next Space TK-LG ⠘⠀⠀⠘⠀ both ring fingers TK-LS (DeLete Space)

Capitalization

I'm going to change most of these into shape-based briefs

Code Command Steno Pseudosteno Explanation Plover default
{*-|} Retro Capitalize KPA*D KPA*D + -D past tense yes
{>} Next Lower HRO*ER LO*ER LOwERcase yes
{*>} Retro Lower HRO*ERD LO*ERD + -D past tense yes
{<} Next All Caps KPA*L KPA*L CaP ALL yes
{*<} Retro All Caps *UPD *UPD UPpercase + -D yes
{MODE:CAPS} All Caps On KA*PS KA*PS all CAPS yes

OS cursor movement and shortcuts

Code Command Steno Pseudosteno Explanation
{#Control_L(a)} ⌃A (like Home on Mac) ^H*FT ^H*FT * + SH-FT for Home, with ^ for top S
{#Control_L(e)} ⌃E (like End on Mac) SR*RS SR*RS * + SR-RS for End
{#Shift_L(Tab)} ⇧⇥ STA*B STA*B Shift + Tab
{#Super_L(f)} ⌘F KPH-F KPH-F
{#Super_L(s)} ⌘S KPH-S KPH-S

Plover dictionary and GUI/plugin manipulation

Code Command Steno Pseudo/Shape Explanation Plover default
{PLOVER:LOOKUP} Lookup HR-FR ⠀⠘⠃⠀⠀ both index fingers PHR*UP
{PLOVER:ADD_T…} Add Translation PWHR-FRPB ⠀⠛⠛⠀⠀ both index+middle TKUPT
{PLOVER:FOCUS} Show Plover PHROERB PLOESH PLover SHOW PHROFBGS
{PLOVER:FOCUS}{#
Super(Shift(K))}
Open Word Tray† PHRORTD PLORDT PLover wORD Tray
{PLOVER:FOCUS}{#
Super(Shift(L))}
Open Spectra Lexer PHRERBGT PLERKT PLover spEKTRa
{PLOVER:FOCUS}{#
Super(Shift(S))}
Open SVG Layout† PHROFGS PLOSFG PLover SVG
=wt_prev_page Word Tray Prev #-RB ⠀⠄⠐⠂⠀ plugin-suggested
=wt_next_page Word Tray Next #-GS ⠀⠄⠀⠐⠂ plugin-suggested
=wt_reload Word Tray Reload #-RBGS ⠀⠄⠐⠒⠂ plugin-suggested

† To use, patch word_tray_ui.py by adding SHORTCUT = "Ctrl+Shift+K" in class WordTrayUI and SHORTCUT = "Ctrl+Shift+S" in layout_ui.py

License

Code in plugins/, third-party-dictionaries/, and main.json is not my own. It’s just version controlled here to record my modifications in order to prevent any updates from overwriting them.

OERZ TKO WHAFRT TPUBG UPT

^TR-BGS WELG

Contributing

KR-BGS WELG

TODO

  • Document repo contents
  • Methodology (how I went about finding what words to include)
  • Split user.json into phrasing, plurals/edge-cases, prefixes, glaring-omissions
  • Add one-liners, scripts, exploratory research (with documentation)
  • Dictionary generator/preprocessor to define e.g. accustom in terms of ^ + {custom}
  • If I ever do all that I’ll name my baby theory plonkver thoeur (pronounced /θwɑːɹ/)

See also

About

For my steno dictionaries and stuf

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages