Speedy Entry¶
Speedy Entry is Write's assisted-editing mode. When it's on, the editor "interprets" some of the characters you type and turns them into full neumaRk syntax, reducing the number of keystrokes needed to write notes, chords, durations and accidentals.
Speedy Entry does not change the grammar of the language: it always produces valid neumaRk source. It's just a writing shortcut. It can be turned off at any time from the Settings → Speedy Entry dialog.
The shortcuts are per row: the behaviour depends on the type of musical row the cursor is
in (C), N), A), D), L)). Each shortcut is governed by an independent flag you can turn
on or off in the settings.
General shortcuts¶
Active in any musical row.
Tab → close the measure¶
Pressing Tab on a musical row inserts a barline |:
C) C7 D7|Tab → C) C7 D7 |
If there's already a space before the cursor, only | is added.
P → raise by a semitone¶
P chromatically shifts the event under the cursor by +1 semitone. It works both in chord rows
and note rows:
N) c4|P → N) d♭4
C) Cm7|P → C) C#m7
L → lower by a semitone¶
Symmetrically, L shifts by −1 semitone. In chord rows the sequences 7alt, DCal…, D$al…
are allowed, and in those cases L stays literal.
@| → al@ expansion¶
Typing @| (or @ before an existing barline) expands to al@, producing the end-of-section
decorators al@ / DCal@ / D$al@:
… D$@| → … D$al@|
… DC@| → … DCal@|
… @| → … al@| (at line start or after a space)
Alternatively, in a note row, @ preceded by a space + Tab expands directly into al@|
(barline and separator included):
N) c4 @Tab → N) c4 al@|
Z + ↑ / Z + ↓ → chromatic shift ±1¶
Z works as a custom modifier key (as if it were an extra Alt). With Z held, ↑ raises and
↓ lowers by a semitone. Functional equivalent of P / L.
Pressed on its own,
Zstill insertszas a normal character. TheZ + keycombos only act when the cursor is in a note or chord row, outside the barline area and annotations.
Z + L / Z + P → literal l / p¶
L and P on their own are chromatic-shift triggers. With Z held they stay literal
characters, needed to write annotations like al@, slide, legato, pizz, palm-mute, etc.
N) c4 a Z+L → N) c4 al
N) c4 Z+P → N) c4 p
Chord row (C) and C+)¶
The shortcuts below apply both to the main chord row C) and to the alternative-chord
row C+, which shares the same grammar.
Speedy Entry inactive inside labels: if the cursor is inside a chord comment-label (
[label]or"label", where you write free text), Speedy Entry doesn't intervene — the characters stay literal.
Auto-uppercase of the root¶
A chord root typed lowercase is automatically capitalised:
C) c7 → C) C7
C) C/g → C) C/G (also after a slash bass)
P → % on an empty measure¶
When the cursor is inside a measure still empty of chords (e.g. right after a barline), P
inserts % (the measure-repeat symbol). If the measure already contains any token (even a
marker like :open| or a style name), P stays literal and doesn't trigger the substitution.
Z + S → sharp (#)¶
A dedicated combo to insert a # without ambiguity (a literal s is reserved for the sus
suffix).
Z + F → flat (♭)¶
Inserts the unicode symbol ♭, which is then normalised to b.
Z + E → enharmonic change¶
Changes the enharmonic alias of the chord under the cursor: C# ↔ D♭, F#7 ↔ G♭7, etc. It
keeps the same actual pitch.
+ / − → chromatic shift ±1¶
+ and − chromatically shift the chord under the cursor by a semitone. It also works on the
alternative bass of a slash chord:
C) C|+ → C) C#
C) C#|+ → C) D (repeatable)
C) C7|+ → C) C#7 (suffix preserved)
C) C/G|+ → C) C/G# (slash bass altered)
C) Cm7|+ → C) C#m7
To insert literal + / − (needed for the chord suffixes C+, 5+, M+, +M, +M7,
+7, and for the alterations 7+5, 7+9, 7+11) you use the escape Z + + / Z + −:
C) C| + Z+`+` + 7 → C) C+7 (= C7#5)
C) C7| + Z+`+` + 5 → C) C7+5
C) CM| + Z+`+` → C) CM+ (= CΔ#5)
C) C| + Z+`-` → C) C- (= Cm, alternative form)
Tip: instead of
+for augmented, you can also writeaugor#5(all equivalent forms after the parser's normalisation). For minor you can writem(e.g.Cm7instead ofC-7).
+ / − don't always trigger¶
If there's no chord event under the cursor, + and − stay literal. In particular the volta
marker [1.]+4 needs no escape:
C) C7 | [1.]|+4 D7 → C) C7 | [1.]+4 D7
Auto-space between chords¶
When the cursor is "stuck" to a previous chord, typing a new uppercase root [A-G]
automatically adds a space:
C) C7G7 → C) C7 G7
C) CM7#5A7 → C) CM7#5 A7
C) Cm7D7 → C) Cm7 D7
The space is not added in these cases (the user is continuing the same unit):
C) C7 G7 → C) C7 G7 (there's already a space)
C) C/G → C) C/G (slash bass)
C) (D F) → C) (D F) (optional group)
C) [1.]+4 D7 → C) [1.]+4 D7 (volta decorator)
For lowercase letters, auto-uppercase + auto-space behave asymmetrically, because some letters are part of legitimate chord suffixes (see next section).
"Safe" vs "ambiguous" lowercase letters¶
Some lowercase letters are part of lowercase chord suffixes (aug, alt, dim, b5,
b9, etc.); others aren't. Speedy Entry distinguishes:
| Lowercase letter on the chord under the cursor | Behaviour |
|---|---|
c, e, f, g (safe) |
upper-case + auto-space |
a (aug, alt) |
literal |
b (accidental, b5/b6/b9/b13) |
literal |
d (dim) |
literal |
The Caug exception: the final g of aug is a "safe" letter but closes a suffix, it isn't a
new root. Speedy Entry looks at the two preceding characters: if they are au, the g stays
literal.
Examples of fluent writing:
C) c7g7 → C) C7 G7 (c → C, g → G + space)
C) c7f7 → C) C7 F7 (c → C, f → F + space)
C) Caug → C) Caug (a/u literal, g preceded by `au` → literal)
C) C7alt → C) C7alt (a literal)
C) Cm7b9 → C) Cm7b9 (b literal)
C) Cdim7 → C) Cdim7 (d literal)
To get G7 A7 (with A as an ambiguous letter), type uppercase directly: G7A7 → G7 A7.
The auto-space always triggers on the uppercase [A-G], whatever the letter.
Note row (N))¶
Key auto-correction¶
The notes you enter are auto-altered according to the current key (standard order of sharps F♯-C♯-G♯-D♯-A♯-E♯-B♯; symmetrically for flats):
HK) D (key of D major: 2 sharps)
N) f → N) f#
N) c → N) c#
Synthetic durations¶
| Key | Becomes |
|---|---|
6 |
16 (sixteenth) |
3 |
32 (thirty-second) or 2. (dotted half) — choose which in the settings |
k |
^ (tie) |
N) c|6 → N) c16
N) c4|k → N) c4^
Apostrophe / comma → octave ±1¶
N) c4|' → N) c'4 (octave up)
N) c4|, → N) c,4 (octave down)
On an "empty" event (apostrophe/comma/tie only), a new apostrophe or comma creates a new separate event.
Z + S / Z + F / Z + B / Z + E¶
Same shortcuts as the chord row:
Z + S→#Z + F→♭Z + B→♭(alternative withBinstead ofF)Z + E→ enharmonic change
Auto-space between notes¶
Automatically inserts a space between successive events when the cursor is about to produce a new event stuck to the previous one:
N) c4|d → N) c4 d
N) c4|< → N) c4 < (opening a chord-stack)
N) [f#|e → N) [f# e (inside a grace group)
N) <c|e → N) <c e (inside an open chord-stack)
The space is not added if the previous character is already a space or a tie ^, or when
opening the chord-stack (< + note → no space before the first inner pitch).
Note annotations "..."¶
Inside an annotation block (delimited by double quotes) all the characters you type are literal, including spaces: the parser recognises the quoted content as a single token, so no automatic substitution is needed.
N) c4"a slow lyric"| (spaces inside the quotes stay as such)
Auto-lowercase of pitches¶
In a note row, pitches are written lowercase. If you type an uppercase letter (C, D, ...),
it can be automatically converted to lowercase with the autoLowerCase flag. Off by default —
useful if you're used to writing uppercase in the note row too.
+ / − → chromatic shift ±1¶
As in the chord row, + and − shift the event under the cursor (note, chord-stack, grace
group) by ±1 semitone:
N) c4|+ → N) c#4
N) c#4|+ → N) d4 (repeatable)
N) <c e g>4|+ → N) <c# e# g#>4 (the whole chord-stack)
N) <c|e g>4 + → N) <c# e g>4 (only the note under the cursor)
In a note row + and − never have a syntactic meaning, so they're always intercepted as shift
triggers. Exceptions:
- After
@(absolute-octave syntaxc@-1_4) the−stays literal - Inside an annotation
"...",+/−are free text - With
Cmd/Ctrl/Altheld, the system shortcut (e.g. page zoom) takes precedence
Articulations row (A))¶
Automatically inserts a space before each articulation token, except when the new character
completes a 2-character combo (-!, >!, os, ol, tr):
A) -|> → A) - >
A) >|! → A) >! (accent-marcato combo)
A) o|l → A) ol (long ligature)
A) t|r → A) tr (trill)
Dynamics row (D))¶
Auto-space is limited to the . character (placeholder); the other dynamics letters form
multi-character tokens (mp, mf, sf, sfz, p<, f>, …) and are not spaced.
Lyrics row (L))¶
Pressing - (hyphenation dash) prepends a space if there isn't one already, so that each
continuation syllable is a separate token aligned under the next note:
L) Ma|-ri → L) Ma -ri
Summary¶
| Key / Combo | Row | Effect |
|---|---|---|
Tab |
any musical | inserts a barline |
P |
notes / chords | shift +1 semitone |
L |
notes / chords | shift −1 semitone |
@\| |
any | al@ expansion (also <sp>@+Tab on notes) |
Z + ↑ / Z + ↓ |
notes / chords | shift ±1 semitone |
Z + L / Z + P |
notes / chords | inserts literal l / p |
c…g lowercase |
notes | note (with key auto-correction) |
C…G uppercase |
chords | chord root |
P |
chords (empty row) | inserts % |
Z + S |
notes / chords | # |
Z + F |
notes / chords | ♭ |
Z + B |
notes | ♭ |
Z + E |
notes / chords | enharmonic change |
+ / − on an event |
notes / chords | chromatic shift ±1 |
Z + + / Z + − |
notes / chords | inserts literal + / − |
6 |
notes | 16 (sixteenth) |
3 |
notes | 32 or 2. |
k |
notes | ^ (tie) |
' / , |
notes | octave +1 / −1 |
| auto-space | notes / chords / art. / dyn. / lyr. | separates successive events |
| auto-uppercase / lowercase | chords / notes | normalises the case of roots / pitches |
Learn more¶
- Full syntax of the neumaRk language (notes and durations, chords with the exhaustive list of suffixes, rhythm, decorators, voltas, etc.): documentation and specification on neumark.dev.
- All Speedy Entry settings: the Settings → Speedy Entry dialog inside the Write app.