vimniscient 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. vimniscient/__init__.py +3 -0
  2. vimniscient/__main__.py +3 -0
  3. vimniscient/answer.py +113 -0
  4. vimniscient/app.py +310 -0
  5. vimniscient/cards/foot.yaml +19 -0
  6. vimniscient/cards/lazyvim.yaml +80 -0
  7. vimniscient/cards/shell.yaml +22 -0
  8. vimniscient/cards/vim.yaml +95 -0
  9. vimniscient/cards/zathura.yaml +32 -0
  10. vimniscient/cards.py +200 -0
  11. vimniscient/cli.py +98 -0
  12. vimniscient/drills/omarchy.yaml +88 -0
  13. vimniscient/drills.py +198 -0
  14. vimniscient/endless.py +60 -0
  15. vimniscient/generate.py +102 -0
  16. vimniscient/habits.py +116 -0
  17. vimniscient/keys.py +14 -0
  18. vimniscient/lessons/sources.md +59 -0
  19. vimniscient/lessons/w1d1-words.yaml +223 -0
  20. vimniscient/lessons/w1d2-pairs.yaml +188 -0
  21. vimniscient/lessons/w1d3-sentences.yaml +247 -0
  22. vimniscient/lessons/w1d4-find.yaml +184 -0
  23. vimniscient/lessons/w1d5-lines.yaml +249 -0
  24. vimniscient/lessons/w1d6-counts.yaml +351 -0
  25. vimniscient/lessons/w1d7-review.yaml +222 -0
  26. vimniscient/lessons/w2d1-dot.yaml +195 -0
  27. vimniscient/lessons/w2d2-search.yaml +194 -0
  28. vimniscient/lessons/w2d3-cgn.yaml +196 -0
  29. vimniscient/lessons/w2d4-case-numbers.yaml +201 -0
  30. vimniscient/lessons/w2d5-insert.yaml +229 -0
  31. vimniscient/lessons/w2d6-visual.yaml +206 -0
  32. vimniscient/lessons/w2d7-review.yaml +197 -0
  33. vimniscient/lessons/w3d1-macros.yaml +240 -0
  34. vimniscient/lessons/w3d2-macros-more.yaml +170 -0
  35. vimniscient/lessons/w3d3-registers.yaml +230 -0
  36. vimniscient/lessons/w3d4-marks.yaml +188 -0
  37. vimniscient/lessons/w3d5-visual-block.yaml +201 -0
  38. vimniscient/lessons/w3d6-substitute.yaml +290 -0
  39. vimniscient/lessons/w3d7-review.yaml +204 -0
  40. vimniscient/lessons/w4d1-ranges.yaml +214 -0
  41. vimniscient/lessons/w4d2-sort-filter.yaml +243 -0
  42. vimniscient/lessons/w4d3-regex.yaml +167 -0
  43. vimniscient/lessons/w4d4-norm.yaml +158 -0
  44. vimniscient/lessons/w4d5-motions.yaml +149 -0
  45. vimniscient/lessons/w4d6-indent.yaml +143 -0
  46. vimniscient/lessons/w4d7-review.yaml +175 -0
  47. vimniscient/lessons/w5d1-arguments.yaml +133 -0
  48. vimniscient/lessons/w5d2-any-quote-bracket.yaml +136 -0
  49. vimniscient/lessons/w5d3-functions.yaml +193 -0
  50. vimniscient/lessons/w5d4-small-objects.yaml +185 -0
  51. vimniscient/lessons/w5d5-comments.yaml +161 -0
  52. vimniscient/lessons/w5d6-review.yaml +120 -0
  53. vimniscient/lessons/w6d1-code.yaml +157 -0
  54. vimniscient/lessons/w6d2-notes.yaml +163 -0
  55. vimniscient/lessons/w6d3-data.yaml +145 -0
  56. vimniscient/lessons.py +184 -0
  57. vimniscient/mnemonics.py +141 -0
  58. vimniscient/mnemonics.yaml +124 -0
  59. vimniscient/nvim/keymaps.lua +25 -0
  60. vimniscient/nvim/runner.lua +711 -0
  61. vimniscient/progress.py +496 -0
  62. vimniscient/reminders.py +220 -0
  63. vimniscient/session.py +152 -0
  64. vimniscient/settings.py +33 -0
  65. vimniscient/srs.py +56 -0
  66. vimniscient/today.py +189 -0
  67. vimniscient/ui/__init__.py +1 -0
  68. vimniscient/ui/builtin_lessons.py +99 -0
  69. vimniscient/ui/cards.py +160 -0
  70. vimniscient/ui/common.py +129 -0
  71. vimniscient/ui/drills.py +163 -0
  72. vimniscient/ui/lesson.py +193 -0
  73. vimniscient/ui/main.py +217 -0
  74. vimniscient/ui/stats.py +145 -0
  75. vimniscient/vimgolf.py +97 -0
  76. vimniscient-0.2.0.dist-info/METADATA +322 -0
  77. vimniscient-0.2.0.dist-info/RECORD +80 -0
  78. vimniscient-0.2.0.dist-info/WHEEL +4 -0
  79. vimniscient-0.2.0.dist-info/entry_points.txt +2 -0
  80. vimniscient-0.2.0.dist-info/licenses/LICENSE +661 -0
@@ -0,0 +1,206 @@
1
+ week: 2
2
+ day: 6
3
+ title: Visual mode
4
+ intro: |
5
+ `v` is *visual*: you see what you'll act on. `v` selects characters,
6
+ capital `V` whole lines. Move to grow the selection, then give an operator:
7
+ `d`, `c`, `y`, `>`, `U` (up: uppercase), `u` (lowercase), `J` (join). `%`
8
+ jumps to the matching bracket (picture two circles split by a line: a pair),
9
+ so `v%` selects a bracketed group, and `c%` changes it without visual mode.
10
+ Often an operator plus a motion is shorter.
11
+ keys: [v, V, "V>", vU, VJ, "%", c%]
12
+ tasks:
13
+ - goal: 'Delete the first two lines with V.'
14
+ start: |-
15
+ ▮delete me
16
+ and me
17
+ V selects whole lines
18
+ target: |-
19
+ V selects whole lines
20
+ solution: 'Vjd'
21
+ hint: 'V selects the line, j extends it, d deletes.'
22
+ variants:
23
+ - goal: 'Delete the two low-utility techniques with V.'
24
+ start: |-
25
+ ▮highlighting
26
+ rereading
27
+ retrieval practice
28
+ target: |-
29
+ retrieval practice
30
+ - goal: 'Delete the first two lines with V.'
31
+ start: |-
32
+ ▮cram
33
+ all night
34
+ sleep on it
35
+ target: |-
36
+ sleep on it
37
+ - goal: 'Delete the first two lines with V.'
38
+ start: |-
39
+ ▮V is linewise,
40
+ so both lines go
41
+ and this one stays
42
+ target: |-
43
+ and this one stays
44
+ - goal: 'Delete the two wrong estimates with V.'
45
+ start: |-
46
+ ▮seven chunks
47
+ ten chunks
48
+ about four chunks (Cowan)
49
+ target: |-
50
+ about four chunks (Cowan)
51
+ - goal: 'Uppercase "visual mode".'
52
+ start: |-
53
+ v is ▮visual mode: you see it
54
+ target: |-
55
+ v is VISUAL MODE: you see it
56
+ solution: 'veeU'
57
+ hint: 'v, then e e to the end of "mode", then U.'
58
+ variants:
59
+ - goal: 'Uppercase "active recall".'
60
+ start: |-
61
+ try ▮active recall today
62
+ target: |-
63
+ try ACTIVE RECALL today
64
+ hint: 'v, then e e to the end of "recall", then U.'
65
+ - goal: 'Uppercase "spaced retrieval".'
66
+ start: |-
67
+ practise ▮spaced retrieval daily
68
+ target: |-
69
+ practise SPACED RETRIEVAL daily
70
+ - goal: 'Uppercase "visual selections".'
71
+ start: |-
72
+ U turns ▮visual selections up
73
+ target: |-
74
+ U turns VISUAL SELECTIONS up
75
+ - goal: 'Uppercase "working memory".'
76
+ start: |-
77
+ Cowan studied ▮working memory limits
78
+ target: |-
79
+ Cowan studied WORKING MEMORY limits
80
+ - goal: 'Join the first three lines.'
81
+ start: |-
82
+ ▮J
83
+ joins
84
+ lines
85
+ but not this one
86
+ target: |-
87
+ J joins lines
88
+ but not this one
89
+ solution: 'VjjJ'
90
+ hint: 'Select three lines with V j j and press J. (3J is shorter.)'
91
+ variants:
92
+ - goal: 'Join the noun phrase on the first three lines.'
93
+ start: |-
94
+ ▮a
95
+ big
96
+ dog
97
+ barks
98
+ target: |-
99
+ a big dog
100
+ barks
101
+ - start: |-
102
+ ▮spaced
103
+ retrieval
104
+ practice
105
+ works
106
+ target: |-
107
+ spaced retrieval practice
108
+ works
109
+ - start: |-
110
+ ▮V
111
+ then
112
+ J
113
+ joins
114
+ target: |-
115
+ V then J
116
+ joins
117
+ - start: |-
118
+ ▮nonsense
119
+ syllable
120
+ lists
121
+ fade
122
+ target: |-
123
+ nonsense syllable lists
124
+ fade
125
+ - goal: 'Indent the function body.'
126
+ ft: python
127
+ start: |-
128
+ def visual():
129
+ ▮see()
130
+ select()
131
+ act()
132
+ target: |-
133
+ def visual():
134
+ see()
135
+ select()
136
+ act()
137
+ solution: 'Vjj>'
138
+ hint: 'V j j selects the three lines, > indents them.'
139
+ variants:
140
+ - goal: 'Indent the function body.'
141
+ start: |-
142
+ def study():
143
+ ▮test()
144
+ space()
145
+ sleep()
146
+ target: |-
147
+ def study():
148
+ test()
149
+ space()
150
+ sleep()
151
+ - start: |-
152
+ def swap():
153
+ ▮cut()
154
+ move()
155
+ put()
156
+ target: |-
157
+ def swap():
158
+ cut()
159
+ move()
160
+ put()
161
+ - start: |-
162
+ def chunk():
163
+ ▮group()
164
+ label()
165
+ recall()
166
+ target: |-
167
+ def chunk():
168
+ group()
169
+ label()
170
+ recall()
171
+ - start: |-
172
+ def review():
173
+ ▮wait()
174
+ recall()
175
+ check()
176
+ target: |-
177
+ def review():
178
+ wait()
179
+ recall()
180
+ check()
181
+ - goal: 'Replace the whole condition with "ok".'
182
+ ft: python
183
+ start: |-
184
+ if ▮(bracket and (partner)):
185
+ target: |-
186
+ if ok:
187
+ solution: 'c%ok<Esc>'
188
+ hint: '% jumps to the matching bracket, so c% changes the whole group. (v%c works too.)'
189
+ variants:
190
+ - goal: 'Replace the whole condition with "ok".'
191
+ start: |-
192
+ while ▮(i < n and (ok)):
193
+ target: |-
194
+ while ok:
195
+ - start: |-
196
+ if ▮(spaced or (tested)):
197
+ target: |-
198
+ if ok:
199
+ - start: |-
200
+ while ▮(due and (not done)):
201
+ target: |-
202
+ while ok:
203
+ - start: |-
204
+ elif ▮(sleep and (review)):
205
+ target: |-
206
+ elif ok:
@@ -0,0 +1,197 @@
1
+ week: 2
2
+ day: 7
3
+ review: true
4
+ title: Week 2 review
5
+ intro: |
6
+ Dot, search, cgn, case, numbers and visual mode, mixed. Look for the
7
+ shortest route before you start typing. Each retrieval you do now, a few
8
+ days after learning, strengthens the memory more than another read would.
9
+ keys: [".", "*", cgn, gUiw, "<C-a>", Vu, dt]
10
+ tasks:
11
+ - goal: 'Uppercase every standalone "srs".'
12
+ ft: python
13
+ start: |-
14
+ ▮srs = schedule(srs)
15
+ target: |-
16
+ SRS = schedule(SRS)
17
+ solution: '*gUiwn.'
18
+ hint: '* finds the other whole-word srs; gUiw, then n and . for the first one.'
19
+ variants:
20
+ - goal: 'Uppercase every standalone "pos".'
21
+ start: |-
22
+ ▮pos = tag(pos)
23
+ target: |-
24
+ POS = tag(POS)
25
+ - goal: 'Uppercase every standalone "url".'
26
+ start: |-
27
+ ▮url = parse(url)
28
+ target: |-
29
+ URL = parse(URL)
30
+ - goal: 'Uppercase every standalone "pdf".'
31
+ start: |-
32
+ ▮pdf = open(pdf)
33
+ target: |-
34
+ PDF = open(PDF)
35
+ - goal: 'Uppercase every standalone "tla".'
36
+ start: |-
37
+ ▮tla = expand(tla)
38
+ target: |-
39
+ TLA = expand(TLA)
40
+ - goal: 'Add one to every review number.'
41
+ start: |-
42
+ ▮review1 review2 review3
43
+ target: |-
44
+ review2 review3 review4
45
+ solution: '<C-a>w.w.'
46
+ hint: 'Ctrl-a, then w and . to repeat it on the next ones.'
47
+ variants:
48
+ - goal: 'Add one to every case number.'
49
+ start: |-
50
+ ▮case1 case2 case3
51
+ target: |-
52
+ case2 case3 case4
53
+ - goal: 'Add one to every day number.'
54
+ start: |-
55
+ ▮day1 day2 day3
56
+ target: |-
57
+ day2 day3 day4
58
+ - goal: 'Add one to every step number.'
59
+ start: |-
60
+ ▮step1 step2 step3
61
+ target: |-
62
+ step2 step3 step4
63
+ - goal: 'Add one to every chunk number.'
64
+ start: |-
65
+ ▮chunk1 chunk2 chunk3
66
+ target: |-
67
+ chunk2 chunk3 chunk4
68
+ - goal: 'Fix every "teh".'
69
+ start: |-
70
+ ▮teh dot repeats teh change for teh rest
71
+ target: |-
72
+ the dot repeats the change for the rest
73
+ solution: '*cgnthe<Esc>..'
74
+ hint: '* then cgn, then . . for the others.'
75
+ variants:
76
+ - goal: 'Fix every "hte".'
77
+ start: |-
78
+ ▮hte stem and hte root and hte end
79
+ target: |-
80
+ the stem and the root and the end
81
+ - goal: 'Fix every "teh".'
82
+ start: |-
83
+ ▮teh star, teh match, teh change
84
+ target: |-
85
+ the star, the match, the change
86
+ - goal: 'Fix every "hte".'
87
+ start: |-
88
+ ▮hte gap, hte test, hte review
89
+ target: |-
90
+ the gap, the test, the review
91
+ - goal: 'Fix every "eth".'
92
+ start: |-
93
+ ▮eth cue and eth recall and eth answer
94
+ target: |-
95
+ the cue and the recall and the answer
96
+ - goal: 'Lowercase the whole line.'
97
+ start: |-
98
+ ▮V THEN U LOWERS THE LINE
99
+ target: |-
100
+ v then u lowers the line
101
+ solution: 'Vu'
102
+ hint: 'V selects the line, u lowercases the selection.'
103
+ variants:
104
+ - goal: 'Lowercase the whole line.'
105
+ start: |-
106
+ ▮ALL CAPS HIDES CASE
107
+ target: |-
108
+ all caps hides case
109
+ - start: |-
110
+ ▮LOWER THE WHOLE LINE
111
+ target: |-
112
+ lower the whole line
113
+ - start: |-
114
+ ▮SLEEP HELPS MEMORIES SETTLE
115
+ target: |-
116
+ sleep helps memories settle
117
+ - start: |-
118
+ ▮TESTING BEATS REREADING
119
+ target: |-
120
+ testing beats rereading
121
+ - goal: 'Delete up to "Habits".'
122
+ start: |-
123
+ ▮well, the thing is: Habits form through repetition
124
+ target: |-
125
+ Habits form through repetition
126
+ solution: 'dtH'
127
+ hint: 't is case-sensitive, and the first capital H is in Habits, so dtH.'
128
+ variants:
129
+ - goal: 'Delete up to "Hausa".'
130
+ start: |-
131
+ ▮um, so, basically: Hausa has tone
132
+ target: |-
133
+ Hausa has tone
134
+ hint: 't is case-sensitive, and the first capital H is in Hausa, so dtH.'
135
+ - goal: 'Delete up to "Hermann".'
136
+ start: |-
137
+ ▮so, like, you know: Hermann Ebbinghaus tested himself
138
+ target: |-
139
+ Hermann Ebbinghaus tested himself
140
+ - goal: 'Delete up to "Memory".'
141
+ start: |-
142
+ ▮okay, so, in short: Memory fades fast at first
143
+ target: |-
144
+ Memory fades fast at first
145
+ solution: 'dtM'
146
+ - goal: 'Delete up to "Testing".'
147
+ start: |-
148
+ ▮right, well, see: Testing beats rereading
149
+ target: |-
150
+ Testing beats rereading
151
+ solution: 'dtT'
152
+ - goal: 'Comment out all three lines with "# ".'
153
+ ft: python
154
+ start: |-
155
+ ▮cram = 1
156
+ reread = 2
157
+ highlight = 3
158
+ target: |-
159
+ # cram = 1
160
+ # reread = 2
161
+ # highlight = 3
162
+ solution: 'I# <Esc>j.j.'
163
+ hint: 'I# <Esc>, then j . j .'
164
+ variants:
165
+ - goal: 'Comment out all three lines with "# ".'
166
+ start: |-
167
+ ▮x = 1
168
+ y = 2
169
+ z = 3
170
+ target: |-
171
+ # x = 1
172
+ # y = 2
173
+ # z = 3
174
+ - start: |-
175
+ ▮massed = 1
176
+ blocked = 2
177
+ reread = 3
178
+ target: |-
179
+ # massed = 1
180
+ # blocked = 2
181
+ # reread = 3
182
+ - start: |-
183
+ ▮a = 1
184
+ b = 2
185
+ c = 3
186
+ target: |-
187
+ # a = 1
188
+ # b = 2
189
+ # c = 3
190
+ - start: |-
191
+ ▮print(1)
192
+ print(2)
193
+ print(3)
194
+ target: |-
195
+ # print(1)
196
+ # print(2)
197
+ # print(3)
@@ -0,0 +1,240 @@
1
+ week: 3
2
+ day: 1
3
+ title: Macros
4
+ intro: |
5
+ `q` is a quill: `qa` starts recording into register a, `q` stops, `@a` plays it back,
6
+ `3@a` plays it three times (read `@a` as *at a*: play what is stored at a). End the macro where the next run should start
7
+ (usually with `j`). A macro stops by itself when a motion fails, so a big
8
+ count like `99@a` simply runs to the end of the file.
9
+ keys: [qa, q, '@a', '3@a', '99@a']
10
+ tasks:
11
+ - goal: 'Add a semicolon to every line, with a macro.'
12
+ start: |-
13
+ ▮let q = "quill"
14
+ let record = "q"
15
+ let stop = "q"
16
+ let play = "@"
17
+ target: |-
18
+ let q = "quill";
19
+ let record = "q";
20
+ let stop = "q";
21
+ let play = "@";
22
+ solution: 'qaA;<Esc>jq3@a'
23
+ hint: 'qa, then A;<Esc> and j, then q. Now 3@a does the other three lines.'
24
+ variants:
25
+ - goal: 'Add a semicolon to every line, with a macro.'
26
+ start: |-
27
+ ▮let day1 = 1
28
+ let day3 = 3
29
+ let day7 = 7
30
+ let day14 = 14
31
+ target: |-
32
+ let day1 = 1;
33
+ let day3 = 3;
34
+ let day7 = 7;
35
+ let day14 = 14;
36
+ - start: |-
37
+ ▮let macro = "a"
38
+ let q = "record"
39
+ let at = "play"
40
+ let dot = "again"
41
+ target: |-
42
+ let macro = "a";
43
+ let q = "record";
44
+ let at = "play";
45
+ let dot = "again";
46
+ - start: |-
47
+ ▮let encode = 1
48
+ let store = 2
49
+ let retrieve = 3
50
+ let forget = 4
51
+ target: |-
52
+ let encode = 1;
53
+ let store = 2;
54
+ let retrieve = 3;
55
+ let forget = 4;
56
+ - goal: 'Put every term in double quotes.'
57
+ start: |-
58
+ ▮quill
59
+ record
60
+ replay
61
+ target: |-
62
+ "quill"
63
+ "record"
64
+ "replay"
65
+ solution: 'qaI"<Esc>A"<Esc>jq2@a'
66
+ hint: 'Record I"<Esc>A"<Esc>j into a, then 2@a.'
67
+ variants:
68
+ - goal: 'Put every term in double quotes.'
69
+ start: |-
70
+ ▮stem
71
+ root
72
+ affix
73
+ target: |-
74
+ "stem"
75
+ "root"
76
+ "affix"
77
+ - start: |-
78
+ ▮spacing
79
+ testing
80
+ sleep
81
+ target: |-
82
+ "spacing"
83
+ "testing"
84
+ "sleep"
85
+ - start: |-
86
+ ▮cognitive
87
+ associative
88
+ autonomous
89
+ target: |-
90
+ "cognitive"
91
+ "associative"
92
+ "autonomous"
93
+ - goal: 'Turn every key=value into key: value.'
94
+ start: |-
95
+ ▮key=q
96
+ means=record
97
+ hook=quill
98
+ target: |-
99
+ key: q
100
+ means: record
101
+ hook: quill
102
+ solution: 'qa0f=r:a <Esc>jq2@a'
103
+ hint: 'Start the macro with 0 so it works wherever j left the cursor: 0 f= r: a<Space><Esc> j.'
104
+ variants:
105
+ - goal: 'Turn every key=value into key: value.'
106
+ start: |-
107
+ ▮name=Ebbinghaus
108
+ born=1850
109
+ field=memory
110
+ target: |-
111
+ name: Ebbinghaus
112
+ born: 1850
113
+ field: memory
114
+ - start: |-
115
+ ▮name=Miller
116
+ year=1956
117
+ number=7
118
+ target: |-
119
+ name: Miller
120
+ year: 1956
121
+ number: 7
122
+ - start: |-
123
+ ▮verb=d
124
+ means=delete
125
+ hook=cut
126
+ target: |-
127
+ verb: d
128
+ means: delete
129
+ hook: cut
130
+ - goal: 'Delete every second line: keep the true ones.'
131
+ start: |-
132
+ ▮q records
133
+ q quits
134
+ @ plays
135
+ @ emails
136
+ . repeats
137
+ . ends
138
+ target: |-
139
+ q records
140
+ @ plays
141
+ . repeats
142
+ solution: 'qajddq2@a'
143
+ hint: 'Record j dd: it moves to the line to drop and deletes it, which leaves you on the next keeper.'
144
+ variants:
145
+ - goal: 'Delete every second line: keep the phonemes, drop the allophones.'
146
+ start: |-
147
+ ▮/b/
148
+ [b̥]
149
+ /d/
150
+ [d̥]
151
+ /g/
152
+ [g̊]
153
+ target: |-
154
+ /b/
155
+ /d/
156
+ /g/
157
+ - start: |-
158
+ ▮q starts recording
159
+ q quits Vim
160
+ q stops it
161
+ @ sends email
162
+ @a plays it back
163
+ @@ deletes it
164
+ target: |-
165
+ q starts recording
166
+ q stops it
167
+ @a plays it back
168
+ - goal: 'Delete every second line: keep the high-utility ones.'
169
+ start: |-
170
+ ▮testing helps
171
+ highlighting helps
172
+ spacing helps
173
+ rereading helps
174
+ interleaving helps
175
+ summarizing helps
176
+ target: |-
177
+ testing helps
178
+ spacing helps
179
+ interleaving helps
180
+ - goal: 'Turn every dash into a star. Use a big count.'
181
+ start: |-
182
+ ▮- spacing
183
+ - testing
184
+ - interleaving
185
+ - sleep
186
+ - elaboration
187
+ - mnemonics
188
+ target: |-
189
+ * spacing
190
+ * testing
191
+ * interleaving
192
+ * sleep
193
+ * elaboration
194
+ * mnemonics
195
+ solution: 'qar*jq99@a'
196
+ hint: 'qa r* j q, then 99@a. It stops when j can''t go further.'
197
+ variants:
198
+ - goal: 'Turn every dash into a star. Use a big count.'
199
+ start: |-
200
+ ▮- nominative
201
+ - accusative
202
+ - genitive
203
+ - dative
204
+ - ablative
205
+ - vocative
206
+ target: |-
207
+ * nominative
208
+ * accusative
209
+ * genitive
210
+ * dative
211
+ * ablative
212
+ * vocative
213
+ - start: |-
214
+ ▮- encode
215
+ - store
216
+ - retrieve
217
+ - forget
218
+ - relearn
219
+ - recall
220
+ target: |-
221
+ * encode
222
+ * store
223
+ * retrieve
224
+ * forget
225
+ * relearn
226
+ * recall
227
+ - start: |-
228
+ ▮- record
229
+ - stop
230
+ - play
231
+ - repeat
232
+ - count
233
+ - stop at the end
234
+ target: |-
235
+ * record
236
+ * stop
237
+ * play
238
+ * repeat
239
+ * count
240
+ * stop at the end