Keyboard cheatsheet¶
sadda's desktop app is built for mouse-free scanning and annotation: a two-handed home-row scheme drives playback, cursor/selection movement, and view scroll/zoom, so you can audition and mark up a recording without leaving the keyboard.
Bound by physical position, not layout
Every shortcut on this page is matched by the physical key position
(US-QWERTY), not the character your layout produces. If you type Dvorak or
AZERTY, the keys are where a s d f / h j k l sit on the board — your
hands fall on the same shape regardless of layout. All shortcuts are
suspended while a text field is focused, so they reach the editor instead.
Playback — left hand¶
| Key | Action |
|---|---|
| D | Play the selection (or the whole view if nothing is selected). Press again to pause/resume. |
| S | Play left of focus — left of the selection if there is one, else left of the cursor. |
| F | Play right of focus. |
| Shift+D / Shift+S / Shift+F | Loop the same span (0.5 s gap between repetitions). |
| A | Stop and return the cursor to where playback started. |
| Space | Alias for D (play / pause). Shift+Space loops. |
| Esc | Alias for A (stop). |
Cursor & selection — right hand¶
The right-hand home row moves a point through the recording. The modifier picks which point:
- no modifier → the cursor (playhead)
- Shift → the selection start edge
- Alt → the selection end edge
With no selection yet, the first Shift/Alt move seeds one at the cursor, then moves that edge.
| Key | Movement |
|---|---|
| H | Jump to the start of the recording |
| J | Jump to the start of the window |
| K | Glide left (hold to keep moving; speeds up the longer you hold) |
| L | Glide right |
| ; | Jump to the end of the window |
| ++quote++ | Jump to the end of the recording |
The view follows the moved point off-screen, so a glide scrolls smoothly and a jump brings its target into view.
View: scroll & zoom — lower-right row¶
The lower-right row controls the window itself. Bare keys scroll; Shift zooms.
| Key | Scroll (bare) | Zoom (Shift) |
|---|---|---|
| N | View → start of recording | Fit the whole recording |
| M | Pan left (¼ window) | Zoom out |
| , | Pan right (¼ window) | Zoom in |
| . | View → end of recording | Zoom to selection |
Zoom is anchored at the cursor. The mouse wheel also zooms (Shift + wheel pans); the arrow keys pan a quarter-window and Home / End jump the view to the file ends.
Bundles¶
| Key | Action |
|---|---|
| Q | First bundle |
| W | Previous bundle |
| E | Next bundle |
| R | Last bundle |
Annotation¶
Navigation — moves the current-annotation highlight independently of the timeline selection, so you can step through annotations without disturbing the cursor/selection you set for playback:
| Key | Action |
|---|---|
| U / I | Previous / next annotation on the current tier |
| O / P | Previous / next tier (up / down) |
| Y | Grab the current annotation into the timeline selection + cursor (so playback acts on it) |
Editing:
| Key | Action |
|---|---|
| 1 … 9 | Activate the tier at that lane position (top = 1) |
| Shift+1 … Shift+9 | Toggle that tier in / out of the active set (several at once) |
| 0 | Clear all active tiers |
| Enter | Edit the current annotation's label if one is highlighted; otherwise commit the selection to the active tiers (span → intervals, point → points) |
| Esc | Cancel a label edit / clear the current-annotation highlight |
| Backspace / Del | Delete the selected annotation |
Panes & focus¶
| Key | Action |
|---|---|
| Shift+Down | Focus the Python console — every key then types into it (a clean slate for a future Vim/Emacs mode); a ring marks it |
| Shift+Up | Leave the console, back to the main view (shortcuts resume) |
Global¶
| Key | Action |
|---|---|
| Ctrl+P / Cmd+P | Open the command palette |
| Ctrl+Enter / Cmd+Enter | Run the script buffer (when the script panel is open) |
Mouse¶
| Action | Effect |
|---|---|
| Click | Place the cursor (and a selection point) |
| Drag on a lane | Draw a span selection |
| Double-click an interval | Edit its label |
| Wheel | Zoom around the pointer |
| Shift + wheel | Pan the view |
Scripting the same navigation¶
The cursor/view/selection model is also exposed to Python as
sadda.Timeline, with a move-to (absolute) / move-by (relative)
method for each action — e.g. set_cursor(t) vs
move_cursor_by(dt), set_view_range(start, end) for fit/zoom-to-selection.
The desktop keys and the Python API share one implementation in the engine.