Terminal
DR-Terminal ships its own VT100/xterm emulator written from scratch in Kotlin — no WebView. It supports xterm-256color, the alt buffer (vim/less/nano), OSC 52 clipboard, focus events, and mouse tracking (mc, htop).
Keyboard and shortcuts
| Shortcut | Action |
|---|---|
| Ctrl+C — when text is selected | Copy selection to clipboard. With no selection the normal SIGINT reaches the remote process. |
| Enter — when text is selected | Alternate copy shortcut (handy on keyboards without Ctrl). |
| Right-click / Copy menu | Context menu after selection — always available. |
| Ctrl+V | Paste. Multi-line clipboard content opens a Paste multi-line confirmation dialog. |
| Shift+Insert | Paste — classic X11/Windows muscle memory. Plain Insert still reaches the shell. |
| Shift+Delete | Copy the selection and clear it (cut-style). |
| Ctrl+F | Open the find bar (see Find in output). The shell never sees the keypress. |
| Ctrl+Shift+S | Open the snippet picker (see Snippets). Plain Ctrl+S still reaches the shell. |
| Shortcut bar | esc, ctrl, tab, arrows, common shell symbols, the snip key and the ⌨ toggle — useful on mobile. Function and navigation keys live on the DevOps keyboard's fn layer and the optional F-keys row. |
| Font size | A- / A+ stepper in the terminal menu; range 8–32 pt. |
On macOS, Cmd works wherever Ctrl is listed above: Cmd+C, Cmd+V, Cmd+F and Cmd+Shift+S behave like their Ctrl counterparts.
DevOps keyboard (Android & iOS)
System keyboards fight you in a terminal: autocorrect mangles sudo -rf, shell symbols hide two layers deep, and non-Latin layouts often have no ASCII at all. DR-Terminal ships its own always-ASCII DevOps keyboard, drawn by the app and sending keys straight to the terminal — the system IME never sees them.
- Portrait — a classic dock at the bottom of the screen.
- Landscape — split mode: two thumb-sized clusters on the left and right edges, drawn as translucent glass over the terminal, so the full width keeps showing your session.
Layers: lowercase, uppercase (Shift), numbers, shell symbols (| ~ $ & ' " \ …`) and an fn/nav layer (F1–F12, arrows, Home/End, PgUp/PgDn). Ctrl/Alt/Shift are sticky: tap arms them for the next key, double-tap locks. Hold ⌫, arrows or space for key repeat; long-press keys with a small corner mark for their alternate character.
- Grabber (pill) on top toggles FULL ↔ MINI — MINI keeps just the essentials (Esc, Tab, Ctrl, arrows, ⌫, ↵) for htop/log sessions. Landscape remembers its own state and starts in MINI.
- Drag the grabber to move a split cluster; it snaps to the nearest edge. Drop one cluster onto the other to merge them into a single floating keyboard; the split pill separates them again.
- Swipe down across the keys hides the keyboard; a floating ⌨ button brings it back. The ⌨ key switches to the system keyboard when you need diacritics or emoji.
Settings → Keyboard (mobile): Default keyboard — Auto picks the DevOps keyboard when your system locale is non-Latin (Arabic, Hebrew, CJK…), the system IME otherwise; Layout — Auto/QWERTY/QWERTZ/AZERTY; Key opacity and Key size sliders; Show F-keys — an always-visible F1–F10 row above the keyboard, handy for mc/htop workflows. All keyboard preferences travel in the encrypted config backup when exported from a phone or tablet.
Select, copy, paste
Desktop: drag with the mouse to select. Double-click selects a word, triple-click a line. Release copies via the shortcuts above; right-click opens a menu.
Android & iOS: long-press anywhere in the terminal to start a selection, then drag to extend and release to copy — the text lands in the system clipboard. A short touch still taps through to the shell; a swipe still scrolls history, so the usual gestures keep working.
- Paste icon in the terminal top bar — one tap pastes the clipboard at the cursor. Nothing in the clipboard shows a neutral Nothing to paste snackbar.
- Select text in the terminal menu — a checkbox that keeps selection mode on until you switch it off, so every drag selects instead of scrolling or tapping through.
- Long-press on the prompt row (the row the cursor is on, and only when you are not scrolled into history) pastes instead of starting a selection — natural when you just want to drop the clipboard where you are typing.
OSC 52 lets remote programs (tmux, vim, fzf) copy to your system clipboard through an escape sequence — bidirectional.
Multi-line paste: when your clipboard contains newlines you see a Paste multi-line preview dialog — protects against pasting commands you didn't inspect.
Scrollback and history
The scrollback buffer holds up to 1000 lines. Wheel or touch-drag scrolls; the cursor correctly leaves the viewport (xterm behaviour) and any selection scrolls with the text.
Clear history sits in the sidebar's History tab and erases the saved command history for that connection — it does not touch the scrollback on screen.
A scrollbar appears at the right edge of the terminal (Desktop) — grab it with the mouse to scroll through the history; Android and iOS scroll by touch. Wheel scroll speed is configurable in Settings → Terminal (lines per single wheel tick).
Alt buffer (full-screen apps)
Programs like vim, less, nano, htop, mc switch into the alt buffer — a separate screen that disappears on exit without polluting the main scrollback.
Find in output
Press Ctrl+F (Cmd+F on macOS) to open the find bar. It searches the scrollback live, highlighting every match and stepping between them. Highlighting is a render-time overlay — it never injects anything into the SSH stream.
Font, theme, highlighting
- Font size — the A-/A+ stepper in the terminal menu or the slider in Settings → Appearance; range 8–32 pt. The Custom font in the sidebar Theme tab additionally allows 6–72 pt per alias.
- UI theme — light / dark / system (the whole app, not the terminal).
- Terminal theme — see the Theme section below; theme is per alias.
- Highlight rules — Settings → Terminal → Output highlighting. Add regex + colour, e.g. paint
ERRORred.
Snippets
Snippets are reusable command templates you can fire into any session. A template may embed typed placeholders — ping -c {count:int=4} {host:ip} — and running such a snippet opens a small dialog asking for the values (int, ip, bool and enum placeholders get matching inputs and validation). A snippet without placeholders runs straight away. Run immediately decides whether Enter is sent for you or the command just lands at the prompt for editing.
Ways to run one:
- Ctrl+Shift+S (Cmd+Shift+S on macOS) — a search-as-you-type picker; Enter runs the first match.
- Snippets in the terminal menu — the same picker without a keyboard.
- The Snippets tab in the terminal sidebar — recently used first, one click to run, plus a shortcut to the editor.
- The pinned snip key on the mobile shortcut bar and on the DevOps keyboard, whose docked mode also offers a snippet tile layer — a tap-friendly grid with your recent snippets above the fold.
Each snippet has a scope: visible for All hosts, one Group, or a single Host. An optional Systems filter (Debian, RHEL, Arch, macOS…) narrows it further, so apt snippets only show up on hosts detected as Debian-family — detection comes from the login probe (see Host insight below). Show only when available additionally hides a snippet when its command is confirmed missing on the host. Sessions without an SSH host (local, serial, Telnet) see global snippets only.
Manage snippets in Settings → Terminal → Snippets: add, edit, duplicate and delete, set scope, systems and the run-immediately flag. A bundled catalogue of over a hundred ready-made snippets — per system (Debian, RHEL, Arch, Alpine, SUSE, BSD, macOS) plus Docker, network, storage and tools sets — is seeded on first run; edit or delete them like your own.
Command history and autocomplete
Each saved connection remembers its command history (if Save history is on). Up-arrow recalls earlier commands, and the autocomplete field suggests command names available on the server — live shell completion, distinct from the history of what you typed.
Host insight (live vitals)
After login on an SSH session the app quietly probes the host — OS name, CPU model and core count — and starts polling live vitals: load average, memory, swap and per-mount disk usage, each drawn with a usage bar that turns amber above 75% and red above 90%.
- The Host tab of the terminal sidebar (the leftmost tab, and the default for SSH sessions) shows everything at a glance.
- The same rows appear in the Connection info dialog.
- Settings → Terminal → Resource monitoring (CPU/RAM/disk) turns polling on or off globally and sets the refresh interval (5–300 s). The connection form can override the interval per host, and its System check on login dropdown chooses how often the full probe runs: every connection, once a day, once a week, or disabled.
Session tabs
Every session — SSH, SFTP, local, serial, Telnet — lives in a tab. Long-press (mobile) or right-click (desktop) a tab, or a card on the Active Sessions list, for its menu: Rename, Connection info, Restart session and Close tab. Restart session tears the connection down and reconnects from scratch while keeping the tab — handy after a server reboot. When a remote session drops, the terminal menu also gains a Reconnect entry that re-establishes the connection in place (local terminals don't offer it — open a new one instead).
Sidebar (right panel) — Host / History / Complete / Snippets / Theme
To the right of the terminal (Desktop / tablet) sits a collapsible panel with five tabs. Open it with the arrow on the right edge; resize by dragging the left edge. State is per alias — each saved connection remembers its tab and width.
- Host — the default tab for SSH sessions: detected system, CPU and live vitals. See Host insight above.
- History — recently typed commands. Clicking types the command into the terminal; the toggle next to it decides whether to auto-submit with Enter. Clear history lives here too.
- Complete — live command-name suggestions from the server's shell completion. Can be muted per alias (bell icon).
- Snippets — your snippets for this host, recently used first. See Snippets above.
- Theme — terminal appearance. See the section below.
Theme — terminal themes (435 schemes)
Theme is per alias — each connection has its own background, foreground and 16-colour ANSI palette (the same indexes ls --color uses: standard 0–7 + bright 8–15).
- Built-in catalogue of 435 themes — the Search… field filters by name. Each row shows background, foreground and a 16-swatch strip. Click applies the theme instantly.
- Custom (this alias) — on desktop the sidebar also exposes manual edit of font, background, foreground and the 16 ANSI slots. Every slot has its own reset (⟲); the whole palette has a separate reset.
- Blue directories in
ls --colorare ANSI 4 (BLUE) or 12 (BRIGHT_BLUE) — to change them, pick another theme or edit those two swatches.
Android & iOS: the whole desktop sidebar is replaced by a single palette icon in the terminal top bar. Tap it for a bottom sheet with the same 435-theme catalogue, searchable and with live swatch previews. Tapping a row applies the theme and closes the sheet so you see the result immediately; the Reset button at the top drops any overrides so the alias falls back to its defaults.
The 435 built-in themes come from the open-source edcet/terminal-themes collection (MIT).