# TUI Controls (/docs/getting-started/tui-controls)



RadioCLI keeps shortcuts at the bottom of the terminal. When playback is active,
a compact live row sits above the shortcuts with station, cleaned track metadata,
volume or mute state, and an active sleep timer.

## Global Controls [#global-controls]

| Key                                                     | Action                                                        |
| ------------------------------------------------------- | ------------------------------------------------------------- |
| `Left` / `Right` or `Tab` / `Shift+Tab`                 | Move across top screen tabs                                   |
| `F7` / `F9`, `,` / `.`, or `Shift+Left` / `Shift+Right` | Tune previous or next station from the current source list    |
| `space` / `F8`                                          | Pause or resume                                               |
| `t`                                                     | Cycle display color                                           |
| `v`                                                     | Cycle receiver style                                          |
| `+` / `-`                                               | Adjust volume                                                 |
| `f`                                                     | Favorite the selected or playing station                      |
| `a`                                                     | Schedule the selected or playing station                      |
| `!`                                                     | Open controls for any alarm already playing in the background |
| `O`                                                     | Open the station homepage in your browser                     |
| `y`                                                     | Copy the station stream URL to the clipboard                  |
| `?`                                                     | Toggle the Help screen                                        |
| `q` or `Ctrl+C` twice                                   | Quit cleanly                                                  |

Pause, mute, volume, and play/pause media-key control require the `mpv` backend.
When only `ffplay` is active, RadioCLI keeps playback and station skipping
available but labels interactive playback controls as limited and shows an
`Install mpv` warning instead of pretending the control worked.

## Screen Controls [#screen-controls]

| Screen               | Controls                                                                                                                                                      |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Overview             | `Up` / `Down` move, `Enter` open, number jump, `:` command                                                                                                    |
| Search input         | type query, `Up` / `Down` move results, `Ctrl+Up` / `Ctrl+Down` recall search history, `Enter` search or tune, `Esc` finish                                   |
| Search results       | `/` edit query, `Up` / `Down` or `n` / `p` move, `Enter` tune, `f` favorite, `b` home                                                                         |
| Explore              | click map, `WASD` fine move, `Shift+WASD` jump, `Up` / `Down` station, `Enter` tune, `f` favorite, `[` / `]` page, `b` home                                   |
| Countries            | `/` filter, `Up` / `Down` move, `Enter` open stations, `w` map, `b` home                                                                                      |
| World map            | `/` filter, `Up` / `Down` move, `Enter` open country, `w` list, `b` home                                                                                      |
| Station lists        | `Up` / `Down` or `n` / `p` move, `Enter` tune, `f` favorite, `[` / `]` page, `b` home                                                                         |
| Now Playing          | `space` / `F8` pause, `f` favorite, `m` mute, `s` sleep, `d` diagnostics and recent tracks, `b` home                                                          |
| Alarms               | `Up` / `Down` or `j` / `k` / `p` move, `Enter` create/edit, `n` new, `space` enable/disable, `g` Guard, `t` test tune, `r` repair, `x` twice delete, `b` home |
| Alarm editor         | `Up` / `Down` or `j` / `k` move, `Enter` open a control, arrow keys adjust, `Ctrl+S` save, `b` / `Esc` cancel                                                 |
| Alarm station picker | `Up` / `Down` or `j` / `k` move, `Enter` choose, `b` / `Esc` editor                                                                                           |
| Alarm ringing        | `Enter` transfer into normal Playing, `Space` stop and snooze 10 minutes, `Up` / `Down` select concurrent alarm, `b` return                                   |
| Settings             | `Enter` change selected, `g` Radio Garden, `l` location, `x` skip broken streams, `o` audio output, `a` AirPlay, `r` health, `b` home                         |
| AirPlay              | `Up` / `Down` choose, `Enter` select receiver, `c` code entry, `r` refresh, `b` settings                                                                      |
| AirPlay Code         | type receiver code, `Backspace` edit, `Enter` submit, `Esc` AirPlay                                                                                           |
| Stats                | `b` home                                                                                                                                                      |
| Help                 | `?` or `b` close                                                                                                                                              |

Explore keeps an aspect-correct Braille world map in full, compact, and micro
layouts. Compact windows always place stations beside the map, while true micro
places the selected station below it. Long selected station and metadata lines
scroll after a short pause in compact and micro layouts. Enable Reduce Motion to
keep those lines truncated instead.

Press `?` from any screen to open Help, a full reference of keybindings and
`:` commands. In the command palette, `Tab` completes the command name.

Mouse and trackpad scrolling enables terminal mouse reporting only while Explore
or an overflowing menu/list is active, leaving native scrollback available on
other screens. Settings can disable mouse support completely. Keyboard controls
and Explore's WASD movement remain available when a terminal or tmux setup does
not pass mouse events through.

## Alarms Workspace [#alarms-workspace]

Open **Alarms** from Overview; it is the item immediately before Settings. The
list shows enabled state, schedule and timezone, station, next occurrence, and
scheduler degradation. Choose the visible **Create alarm** row or
press `n` for a blank alarm; press `a`
from a selected/playing station to open a prefilled editor.

The editor covers:

* label, enabled state, primary station, one-time or recurring schedule, local
  date, segmented 24-hour time, weekday checklist, and IANA timezone
* independent alarm volume, fade-in seconds, automatic stop time, optional
  fallback station, and fixed local-speaker output
* missed-run grace, best-effort OS wake request, and Alarm Guard
* a next-occurrence review, a no-state-change test tune, Save, and Cancel

Time is a segmented digital control whose active hours or minutes are highlighted
in the current display color. Use `Up` and `Down` to change hours, press `Enter`
to advance to minutes, adjust again, then press `Enter` to finish. `Left` and
`Right` still move directly between segments. Weekdays open as a nested
Monday-through-Sunday checklist; move with `Up` and `Down`, toggle any
combination with `Space`, and press `Enter` to confirm. Bounded values such as volume,
fade, stop-after, and missed-run grace use arrow-adjustable controls instead of
requiring text replacement. Free-form values such as label and timezone retain
normal text editing. The station picker draws from the current station, favorites, imports,
recents, and stations already used by alarms. Saving persists the definition
locally and synchronizes the native OS job; if that setup is degraded, the alarm
remains visible with a repair marker. Press `r` from the list to retry all
registrations.

Choose **Verify alarm setup** at the bottom of the alarm list to rehearse the
complete path on the current machine. RadioCLI installs and queries a disposable
native scheduler job, opens the saved terminal through an authenticated
loopback handshake, verifies dismiss/snooze connectivity, acquires and releases
sleep protection, raises and restores system output, and plays a three-second
sample from the next configured alarm. The disposable job is removed before the
report finishes.

The report separates hard blockers from limitations. A wake request can be
accepted by the scheduler while still depending on hardware, lid, power,
login-session, and administrator policy. Run Verify again after changing the
terminal, playback backend, audio device, OS permissions, or power settings.

`t` on the alarm list test-tunes only the primary station and does not fire the
alarm or change run history. The CLI's `radiocli alarm test` is a separate,
bounded end-to-end alarm preview.

When an alarm starts, RadioCLI publishes an authenticated local control session.
If the TUI is open it presents the high-contrast ringing screen; if you open the
TUI after playback began, press `!` from any screen. `Space` stops playback and
snoozes for 10 minutes. `Enter` transfers the station into RadioCLI's normal
interactive player and opens Playing with its visualizer and controls. `b`
returns to the app while the detached alarm continues. The TUI polls for
concurrent active alarms and lets you select the exact one before acting.

The terminal does not need to remain open after a native job is registered.
Playback still requires a powered-on machine, a logged-in interactive audio
session, working local speakers, and a reachable stream. Alarm Guard prevents
idle sleep but consumes power and cannot override a closed lid, explicit sleep,
hibernate, shutdown, or OS policy. Full details are in
[Reliability](../reliability.mdx).

Alarms are experimental beta functionality. Use a secondary device as the
primary alarm whenever timing is critical. See the dedicated
[Alarms guide](../alarms.mdx) for setup, verification, delivery, and repair.

## Command Palette [#command-palette]

Useful command entries:

```text
:search lagos jazz
:country japan
:codec MP3
:language spanish
:bitrate 128
:clear
:volume 60
:mute
:favorite
:sleep 15
:sleep off
:timeout 15
:skip off
:location on
:doctor
:resume on
:ascii on
:motion on
:background on
:help
:learn previous
:learn play
:learn next
:keys reset
:airplay
:airplay-code 1234
:map
:library
:stats
:settings
:stop
```

## Display And Compatibility Modes [#display-and-compatibility-modes]

Settings includes toggles for terminals and devices that need them, each also
available as a command:

* **Resume last station on launch** (`:resume on`) re-tunes your most recent
  station when RadioCLI starts, like a radio powering back on.
* **Transparent background** (`:background on`) drops the dark panel fill so
  light-themed terminals keep their own background. RadioCLI also honors the
  [`NO_COLOR`](https://no-color.org) convention automatically.
* **ASCII-safe display** (`:ascii on`) maps braille, block, and box-drawing
  glyphs to ASCII for terminals and fonts without those glyphs.
* **Reduce motion** (`:motion on`) freezes the receiver and loading animations
  to save CPU and bandwidth over SSH and on low-power devices.

## Source-List Queues [#source-list-queues]

When you tune a station from Library, Explore, Search, Countries, or Nearby,
that list becomes the playback queue. Previous/next keeps moving
through that source list from any screen until you tune from another list.

## Learned Media Keys [#learned-media-keys]

Hardware media keys depend on the OS and terminal. RadioCLI recognizes common
F7/F8/F9 sequences, Kitty media-key codes, modified-arrow sequences, comma/dot
transport fallback, and learned custom bindings. Previous/next media actions are
app-level; play/pause requires `mpv`.

Learn keys from Settings or with `:learn previous`, `:learn play`, and
`:learn next`; clear them with `:keys reset`.

Location behavior is covered in [Privacy and Security](../privacy-security.mdx).

On macOS, Settings opens a dedicated AirPlay receiver picker for Bonjour
receivers. Change Audio output to AirPlay with `o`, open AirPlay with `a` or
`:airplay`, and choose a visible receiver. If a station is already playing,
RadioCLI moves it to the selected receiver immediately; switch Audio output back
to `This device (mpv)` to leave AirPlay. RadioCLI does not auto-pick a receiver.
AirPlay is a current-session output: restarting RadioCLI returns to automatic
local playback while remembering the last receiver for the next manual switch.
If the receiver asks for a code, RadioCLI opens the AirPlay Code screen; you can
also press `c` from AirPlay settings or use `:airplay-code 1234`.
