How to dictate a less-than sign or opening angle bracket
Say “less than” or “open angle” to produce <. The character keeps a space on both sides, which is correct for a comparison — “while i less than length” gives while i < length — and wrong for a generic, where List<String> comes back as list < string and needs a formatter pass.
An eight-word loop condition takes about 9.2 seconds to type and about 2.9 seconds to say. (sources: Dhakal, Feit, Kristensson & Oulasvirta, “Observations on Typing from 136 Million Keystrokes”, CHI 2018, 168,000 participants, 136 million keystrokes; Yuan, Liberman & Cieri, “Towards an Integrated Understanding of Speaking Rate in Conversation”, Interspeech 2006, 2,438 American English telephone conversations (Switchboard corpus). The speech figure is conversational rate, not a measured dictation rate — no such measurement exists.)
while i < rows.lengthThis tool runs entirely in your browser. Nothing you type is sent anywhere, stored, or logged.
Step by step
- 1
Say “less than” for a comparison
Speak the operands either side of the phrase. The character attaches on neither side, so a space is kept before and after it, which is exactly how a comparison is formatted.
- 2
Say “open angle” for a generic or a tag
Use the alternative phrasing when the character is a bracket rather than an operator. Both phrases reach the same table entry, so the output is identical — the alias exists for your comfort, not to change behaviour.
- 3
Expect spaces in generics, and remove them
Run your formatter after dictating a generic. VoiceGem returns list < string rather than list<string>, because a single entry cannot be spaced correctly for both a comparison and a bracket.
- 4
By hand
Press Shift-comma. In markup and generic-heavy code you are already reaching for this chord constantly, and for a single bracket the keyboard is faster.
Generics come out spaced, and this is a real VoiceGem limitation
One character serves two incompatible jobs. As a comparison operator it should have spaces around it; as a generic or markup bracket it should have none, and VoiceGem's table has one entry with one pair of attach flags. The flags are set for the comparison, so dictated generics arrive as list < string.
Naming the cost is more useful than hiding it. The Deterministic Pass could pick the other spacing and break every comparison instead, or it could try to detect which one you meant — and detection is the guess this whole design exists to avoid. Dictate the generic, then let format-on-save close it up in one pass.
Where the manual way breaks
A single comparison operator is one shifted keystroke and a formatter is not needed afterwards. Typing it is the right call and this page is not going to argue otherwise.
Loop headers and long boolean conditions are the case for speaking. Two comparisons joined by a logical and is a dense mix of shifted characters and identifiers, and VoiceGem places the operators identically on every run, so the line does not need re-reading before you move to the body.
Doing this somewhere else? our speech-to-code converter, the double equals comparison, step by step, the assignment equals sign, step by step, or the greater-than sign and closing angle bracket.
Common questions
The angle bracket attaches on neither side, because the same character is a comparison operator. Run your formatter after dictating and the spaces close up.
No. Both phrases reach the same entry in VoiceGem's table and produce an identical character with identical spacing. The alias exists because people name the character differently depending on what they are writing.
Yes, with the same spacing caveat. Say “open angle div close angle” and expect < div >, then let your formatter close it up.
Dictate a generic and see the spacing you will need to clean up.
Open the tool