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. You turn it on and off with a click on the Speedy Entry button in the toolbar; long-pressing it opens the settings window.
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 window, which is split by row type (General, Chords, Notes,
Articulations, Dynamics, Lyrics). Unless stated otherwise, they are all on by default.
General shortcuts¶
Tab works in any musical row; the other shortcuts in this section work in note and chord
rows.
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) c#4
C) C-7|P → C) C#-7
If the cursor isn't touching any event, P stays an ordinary letter.
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@|
! → measure repeat %!¶
In a measure that contains only a repeat %, %2 or %4, a ! typed in contact with it is
moved to its canonical position; a second ! removes it:
N) !% → N) %!
N) %2! → N) %!2
N) %! + ! → N) % (pressed again: removed)
In a note row, outside this case, ! does something else: see Forced
accidental.
Z as a modifier¶
In note and chord rows Z works as a modifier key (as if it were an extra Alt): held down,
it changes the meaning of the key you press with it. Some combinations transform the touched
event or insert a symbol (Z + ↑/↓, Z + S, Z + F, Z + B, Z + E), others let you type a
character literally that Speedy Entry would otherwise intercept (Z + L, Z + P, Z + +,
Z + −).
In these rows, pressing and releasing
Zon its own types nothing. It types an ordinaryzin the other rows, in the barline area and inside free text (an annotation"…"or a label).
Z + ↑ / Z + ↓ → chromatic shift ±1¶
With Z held, ↑ raises and ↓ lowers the touched event by a semitone. Functional equivalent
of P / L.
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)
m → - (minor)¶
Minor is preferably written with the dash. Typing m right after the root (or after its
accidental) gives -:
C) Cm → C) C-
C) C#m7 → C) C#-7
C) Dbm → C) Db-
The m stays as it is when it doesn't follow the root: for example in dim. The parser also
accepts Cm7: if you want the m in the text, turn off the m → minor dash flag in the
settings, or write the chord with Speedy Entry off.
p → % on an empty measure¶
When the cursor is inside a measure still empty of chords (e.g. right after a barline), the
p key (lowercase) 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. With Shift (uppercase P) you always get the letter.
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) C-7|+ → C) C#-7
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)
Tip: instead of
+for augmented, you can also writeaugor#5(all equivalent forms after the parser's normalisation). For minor just typemafter the root: it becomes-(see above).
+ / − 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) C-7D7 → C) C-7 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) C-7b9 → C) C-7b9 (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 |
2. (dotted half, default) or 32 (thirty-second) — choose which in the settings |
k |
^ (tie) |
N) c|6 → N) c16
N) c4|k → N) c4^
With 3 → 2., typing a 2 right afterwards still gives 32.
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.
Forced accidental¶
On a note touched by the cursor, ! forces the accidental: the ! is put in the right place in
the token, after the pitch and any accidental and before octave and duration. Pressed again, it
removes it:
N) c4|! → N) c!4
N) c#4|! → N) c#!4
N) c#!4|! → N) c#4
On rests, spacers and grace notes the ! stays as typed. For the ! in contact with % see
measure repeat.
Z + S / Z + F / Z + B / Z + E¶
Same shortcuts as the chord row, plus Z + B:
Z + S→#Z + F→♭Z + B→♭(alternative withBinstead ofF, note row only)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. It applies to notes, rests r and spacers s:
N) c4|d → N) c4 d
N) c4|r → N) c4 r
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).
Tab inside a grace group¶
With the cursor inside a grace group […], right after a note, Tab doesn't insert a barline:
it completes the acciaccatura by adding the missing /^ modifiers and, if the group is still
open, the ]. The cursor ends up after the ], ready for the main note:
N) [a|Tab → N) [a/^]
N) [a4 b|Tab → N) [a4 b/^]
p → % on an empty measure¶
As in the chord row, the p key (lowercase) inserts % in a note measure that is still empty,
as long as it follows a space:
N) c4 d e f | p → N) c4 d e f | %
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# f 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 on a touched event they're always
intercepted as shift triggers. Exceptions:
- If the cursor isn't touching any event (between two events, in an empty measure, at the end of the row) the character stays literal
- 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 combo (_!, >!, os, ol, tr, tr~, 8.) or attaches to a text ("x"-,
("x")):
A) _|> → A) _ >
A) _|! → A) _! (portato)
A) >|! → A) >! (accent + staccato)
A) o|l → A) ol (long fermata)
A) t|r → A) tr (trill)
Inside a text ("…" or a […] box) the auto-space doesn't intervene.
Dynamics row (D))¶
Auto-space triggers only when you type . (placeholder); the other dynamics letters form
multi-character tokens (mp, mf, sf, sfz, p<, f>, …) and are not spaced.
Lyrics row (L))¶
Off by default — turn it on in the Speedy Entry settings, Lyrics section. When it's on,
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 |
Tab inside […] |
notes | completes the grace with /^ and ] |
P |
notes / chords | shift +1 semitone |
L |
notes / chords | shift −1 semitone |
@\| |
notes / chords | al@ expansion (also <sp>@+Tab on notes) |
! in contact with % |
notes / chords | %! (pressed again: removes it) |
! on a note |
notes | forced accidental (c4 → c!4) |
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 |
m after the root |
chords | - (minor) |
p (lowercase) |
chords / notes (empty measure) | 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 | 2. (default) or 32 |
k |
notes | ^ (tie) |
' / , |
notes | octave +1 / −1 |
| auto-space | notes / chords / art. / dyn. | separates successive events |
auto-space before - |
lyrics (L)), off by default |
separates the syllables |
| auto-uppercase / lowercase | chords / notes (lowercase off by default) | 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: long-press the Speedy Entry button in Write's toolbar.
- Write's keyboard shortcuts outside Speedy Entry: see Write.