rtcom /dev/ttyUSB0 -b 115200 opens the device and enters the TUI.
rtcom uses the alternate screen so the scrollback you had before
the invocation is preserved on exit.
The main screen has three horizontal bands:
- Top bar — rtcom version, device path, and current serial config (baud, framing, flow control).
- Serial pane — a VT100 emulator that renders bytes received from the device. Supports ANSI styling, cursor positioning, and a 10,000-row scrollback buffer (see Scrollback and selection).
- Bottom bar — quick-key hints (
^A m menu · ^A ? help · ^A ^Q quit).
All commands are prefixed with ^A (Ctrl-A). The escape character is
configurable via --escape.
| Keystroke | Action |
|---|---|
^A m |
Open the configuration menu |
^A ? |
Show the command cheat sheet |
^A ^Q |
Quit rtcom |
^A ^X |
Quit rtcom (picocom compatibility) |
^A b |
Change baud rate (inline prompt) |
^A c |
Show current config in the pane |
^A t |
Toggle DTR |
^A g |
Toggle RTS |
^A \ |
Send a 250ms break |
Inside dialogs:
| Keystroke | Action |
|---|---|
↑ / ↓ |
Move cursor |
j / k |
Vi-style cursor movement |
Enter |
Activate / edit / confirm |
Space |
Cycle enum values |
+ / - |
Step through common baud rates |
F2 |
Apply pending changes to live session |
F10 |
Apply + save to profile |
Esc |
Cancel / close dialog |
The screen-options dialog (within ^A m) toggles how overlays render:
| Style | Description |
|---|---|
overlay |
Modal centered; background pane keeps drawing as-is |
dimmed-overlay |
Modal centered; background pane is dimmed |
fullscreen |
Modal fills the body; background pane is hidden |
The choice persists to the profile's [screen].modal_style key.
The serial pane keeps a 10,000-row scrollback buffer. Navigate with:
| Keystroke | Action |
|---|---|
Shift+PageUp |
Scroll up half a screen |
Shift+PageDown |
Scroll down half a screen |
Shift+Up |
Scroll up one line |
Shift+Down |
Scroll down one line |
Shift+Home |
Jump to oldest row |
Shift+End |
Jump back to live tail |
The mouse wheel scrolls the serial pane — 3 lines per notch by
default. Override via [screen].wheel_scroll_lines in the profile
(hand-edit the TOML; a menu-editable control lands in v0.2.1).
Values less than 1 are clamped to 1 at runtime, so the wheel
always moves at least one line.
When the view is above the live tail, the top bar shows
[SCROLL ↑N] (yellow) with N lines above live. New data keeps
streaming into the buffer, but the view does not follow until you
Shift+End (or scroll back down past the bottom).
Native mouse-driven text selection + copy lands in v0.2.1. For v0.2:
- To copy visible text: hold
Shiftwhile clicking and dragging. Most terminals (xterm, gnome-terminal, iterm2, kitty, alacritty,Windows Terminal) treatShift+dragas a bypass of rtcom's mouse capture, letting the terminal's native selection + copy work. - To copy older scrollback content: not yet supported
directly. Scroll up with
Shift+PageUpfirst to bring the target lines on-screen, thenShift+dragonce they are visible.
rtcom's line-ending mappers inherit the minicom / picocom vocabulary, which is compact but non-obvious. Here is what each rule does and when to use it.
| Rule | Trigger | Effect |
|---|---|---|
none |
— | pass through unchanged |
crlf |
\n in input |
prepend \r → CRLF |
lfcr |
\r in input |
append \n → CRLF |
igncr |
\r in input |
drop the \r |
ignlf |
\n in input |
drop the \n |
Both crlf and lfcr produce CRLF — the difference is which byte
triggers them. If you pick a rule that doesn't match what's in the
stream, it does nothing. This trips most users at least once.
Set these in the Line endings dialog (^A m → Line endings) or by
hand in ~/.config/rtcom/default.toml.
Pick the rule that matches what your device emits:
| Device behavior | imap |
|---|---|
sends \n only (most MCUs, Zephyr, Linux-hosted apps) |
crlf |
sends \r only (old Mac, some DOS tools) |
lfcr |
sends \r\n (Windows, standard serial) |
none |
| spams both and you want clean lines | igncr |
Symptom → cure:
- Staircase output (each line indents further right):
your device sends
\nonly → setimap = crlf. - No newlines at all, text overwrites itself on one row:
device sends
\ronly → setimap = lfcr. - Double-spaced output (blank row between every line):
device sends
\r\nand rtcom is also doubling it → setimap = none(origncrif you want to keep only\n).
Pick what your device expects:
| Device expects | omap |
|---|---|
line terminated by \r\n (most firmware REPLs, AT-command modems) |
crlf |
line terminated by \r (old Mac, some serial consoles) |
lfcr |
line terminated by \n only |
none |
Symptom → cure:
- Commands don't execute after pressing Enter:
device needs CR → try
omap = crlf(orlfcrif it wants CR only). - Every command runs twice:
you're sending
\r\nto a device that splits it → setomap = noneand let the device's CR-on-enter mode handle it.
rtcom v0.2 has no local-echo rendering yet — emap is persisted to the
profile but doesn't affect display. It lands in v0.3's logging module.
After editing the dialog, press F10 (Apply + Save). Because runtime
mapper swap is deferred to v0.2.1, the new rule applies on the next
rtcom invocation — exit (^A ^Q) and relaunch to see the
effect.
The default profile lives at:
| Platform | Path |
|---|---|
| Linux | $XDG_CONFIG_HOME/rtcom/default.toml (~/.config/rtcom/) |
| macOS | ~/Library/Application Support/rtcom/default.toml |
| Windows | %APPDATA%\rtcom\default.toml |
Override with -c PATH. On first run the file doesn't exist; rtcom
uses built-in defaults and creates the file when you save from the
menu or pass --save on the command line.
Tip: hand-edit the TOML if you prefer — unknown keys are silently ignored, missing leaf values fall back to the section default. Saving from the menu will rewrite the file and lose any hand-written comments.
rtcom merges three sources in this fixed order:
built-in defaults ─┐
profile file ─┼─▶ effective runtime
CLI arguments ─┘
CLI arguments always win. If you edit the baud rate in the menu and
press F10 (Apply + Save), the profile gets the new baud — but the
next time you launch with rtcom -b 115200 /dev/ttyXXX, the CLI's
115200 overrides your saved value for that session.
Two ways to make the profile value effective:
- Drop the CLI flag:
rtcom /dev/ttyXXXreads the baud from the profile. - Force a write:
rtcom -b 921600 /dev/ttyXXX --saverewrites the profile with 921600 and uses 921600 for the current session.
The dialog's bottom hint line (* N field(s) overridden by CLI; ...)
shows up when any CLI flag is overriding a profile value in the
current session.