diff --git a/README.md b/README.md index f7a09e7..2575466 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,8 @@ APIs directly: - native API action center for health, server status, timeline, preferences, kanban projects, group messages, hook events, image file/URL upload, image preview info, and native image preview display -- mobile soft-key row for tmux-oriented input +- mobile soft-key row for tmux-oriented input, including tmux prefix, detach, + new window, previous/next window, Ctrl keys, arrows, page keys, and paste - automatic update checks against a GitHub Release manifest - APK download, SHA-256 verification, and installer handoff @@ -101,6 +102,10 @@ escape filtering. It is enough for shell-oriented remote testing, but it is not yet a complete xterm-compatible renderer for full-screen TUIs such as `vim` or `top`. +The terminal toolbar and shortcut row include tmux prefix helpers. The app sends +the same control bytes a keyboard would send, for example `Ctrl+B`, `Ctrl+B d`, +`Ctrl+B c`, `Ctrl+B n`, and `Ctrl+B p`. + All app features are native Android controls. Complex server objects such as kanban projects, preferences, timeline events, group messages, and image metadata currently use native forms plus native JSON detail dialogs; image preview uses a diff --git a/app/src/main/java/com/neatstudio/tmuxandroid/MainActivity.java b/app/src/main/java/com/neatstudio/tmuxandroid/MainActivity.java index eb0904c..777334b 100644 --- a/app/src/main/java/com/neatstudio/tmuxandroid/MainActivity.java +++ b/app/src/main/java/com/neatstudio/tmuxandroid/MainActivity.java @@ -620,7 +620,12 @@ public final class MainActivity extends Activity { "Page up", "Page down", "Session status", - "Send command" + "Send command", + "Tmux prefix", + "Detach tmux client", + "New tmux window", + "Next tmux window", + "Previous tmux window" }; new AlertDialog.Builder(this) .setTitle(sessionName) @@ -655,6 +660,21 @@ public final class MainActivity extends Activity { case 6: promptSendCommand(sessionName); break; + case 7: + sendTerminalInput("\u0002"); + break; + case 8: + sendTerminalInput("\u0002d"); + break; + case 9: + sendTerminalInput("\u0002c"); + break; + case 10: + sendTerminalInput("\u0002n"); + break; + case 11: + sendTerminalInput("\u0002p"); + break; default: break; } @@ -1169,6 +1189,13 @@ public final class MainActivity extends Activity { addSoftKey(row, "^A", "\u0001"); addSoftKey(row, "^E", "\u0005"); addSoftKey(row, "^V", "\u0016"); + addSoftKey(row, "^Z", "\u001a"); + addSoftKey(row, "^\\", "\u001c"); + addSoftKey(row, "Tmux", "\u0002"); + addSoftKey(row, "Detach", "\u0002d"); + addSoftKey(row, "NewWin", "\u0002c"); + addSoftKey(row, "NextWin", "\u0002n"); + addSoftKey(row, "PrevWin", "\u0002p"); addSoftKey(row, "Left", "\u001b[D"); addSoftKey(row, "Down", "\u001b[B"); addSoftKey(row, "Up", "\u001b[A"); diff --git a/docs/android-client-notes.md b/docs/android-client-notes.md index 4d0cde1..aa4649e 100644 --- a/docs/android-client-notes.md +++ b/docs/android-client-notes.md @@ -68,14 +68,15 @@ not kill a tmux session. Implemented now: -- configurable base URL, defaulting to `http://127.0.0.1:3000` +- configurable base URL, defaulting to `http://100.89.0.116:3000` - support for Tailscale URLs such as `http://100.x.y.z:3000` - native session list from `GET /api/sessions` - create, rename, command send, split, pane select, pane kill, pin, mute, and kill session through documented session/preference endpoints - basic live terminal through `/ws/terminal` - native event stream through `/ws/events` -- bottom shortcut bar for `Esc`, `Tab`, `Ctrl+C`, arrows, page keys, and paste +- bottom shortcut bar for `Esc`, `Tab`, `Ctrl+C`, `Ctrl+V`, arrows, page keys, + tmux prefix actions, and paste - shortcut delivery through the terminal WebSocket `input` message - native action center for health, server status, timeline, preferences, kanban projects, group messages, hook events, image file/URL upload, image preview