Hi - a small, backward-compatible extension to the classic dictation layout.
The problem
The classic dictation layout has one configurable action row. Once I enable a few extras (history, GIF, language, etc.), they don't all fit in a single row, so I have to choose which ones to keep visible.
Proposed behavior
Allow up to N rows (I use 4) of configurable actions instead of just one, so all the extras can be visible at once. Purely additive - a user who never adds a second row sees no change.
Technical approach (first sketch)
The nice part is it can reuse the existing preference with zero migration:
- Persist rows in the same pref, rows separated by
;, actions within a row still separated by commas. A legacy single-row value has no ;, so it parses unchanged as exactly one row -> fully backward compatible, no migration code.
- A small parse/serialize helper for the rows; the layout renders each row; the settings editor can add/remove rows and reorder actions within a row (the palette fills the first row).
Straightforward to unit-test: round-trip parse/serialize and, importantly, that an old single-row value still loads correctly.
Caveat / offer
This lives in my fork (AI-assisted build), so treat the sketch as a starting point. Happy to invite you to the fork to see it and the tests, and to test a build. Thanks!
Note: my fork also has an optional "wake my PC" action key in this layout, but that belongs to a separate Wake-on-LAN request and isn't part of this one.
Hi - a small, backward-compatible extension to the classic dictation layout.
The problem
The classic dictation layout has one configurable action row. Once I enable a few extras (history, GIF, language, etc.), they don't all fit in a single row, so I have to choose which ones to keep visible.
Proposed behavior
Allow up to N rows (I use 4) of configurable actions instead of just one, so all the extras can be visible at once. Purely additive - a user who never adds a second row sees no change.
Technical approach (first sketch)
The nice part is it can reuse the existing preference with zero migration:
;, actions within a row still separated by commas. A legacy single-row value has no;, so it parses unchanged as exactly one row -> fully backward compatible, no migration code.Straightforward to unit-test: round-trip parse/serialize and, importantly, that an old single-row value still loads correctly.
Caveat / offer
This lives in my fork (AI-assisted build), so treat the sketch as a starting point. Happy to invite you to the fork to see it and the tests, and to test a build. Thanks!
Note: my fork also has an optional "wake my PC" action key in this layout, but that belongs to a separate Wake-on-LAN request and isn't part of this one.