From 6e719c323663a8295acc1bbee20a668fe95511e7 Mon Sep 17 00:00:00 2001 From: x3 Date: Mon, 7 Sep 2026 15:34:23 +0000 Subject: [PATCH] Fix: crash on failed connect, add sidebar edit/delete, password saving - Fix crash when SSH connect fails: remove page BEFORE deleting terminal - Sidebar right-click context menu: Connect / Edit / Delete - Password field + Save password checkbox in server dialog - ServerConfig stores password and save_password fields - Auto-connect uses saved password when available - Restore original flaticon icon --- README.md | 40 ++++++-- icons/x3-ssh.png | Bin 5570 -> 21564 bytes src/server_store.cpp | 8 +- src/server_store.h | 2 + src/ssh_client.cpp | 211 +++++++++++++++++++++++-------------------- src/ssh_client.h | 2 +- src/ssh_terminal.cpp | 63 ++++++++++--- 7 files changed, 202 insertions(+), 124 deletions(-) diff --git a/README.md b/README.md index 11de907..7f5e004 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,16 @@ A GTK3-based SSH client with a tabbed terminal interface, server sidebar, notifications, and SSH key storage. -![Icon](icons/x3-ssh.svg) +![Icon](icons/x3-ssh.png) ## Features - **Tabbed terminal** - Multiple SSH sessions in tabs -- **Server sidebar** - Saved servers displayed in a sidebar, double-click to connect +- **Server sidebar** - Saved servers in a sidebar, double-click to connect, right-click for Edit/Delete - **Quick connect** - Connect directly via host/user/port fields in the toolbar +- **Password storage** - Optionally save passwords with servers (stored in config file) - **SSH key management** - Generate, import, and manage SSH keys -- **Notifications** - Animated notification bar for status messages (saved, connected, disconnected, errors) +- **Notifications** - Animated notification bar for status messages - **VTE terminal** - Full terminal emulation with 256 color support - **Resizable pty** - Terminal auto-resizes the remote pty on window resize - **System integration** - `.desktop` file and icon for application menu entry @@ -63,11 +64,25 @@ SSH keys are stored in: ## Usage 1. Start the application: `x3-ssh` -2. **Server Sidebar**: Saved servers appear in the left sidebar. Double-click to connect. +2. **Server Sidebar**: Saved servers appear in the left sidebar + - **Double-click** to connect + - **Right-click** for context menu (Connect / Edit / Delete) + - Click `+` to add a new server 3. **Quick Connect**: Enter host, user, and port in the toolbar, click "Connect" -4. **Add Server**: Click the `+` button in the sidebar header, or use the "Add Server" dialog -5. **SSH Keys**: Click "Keys" in the toolbar to generate or import SSH keys -6. **Tabs**: Click "+ Tab" for a new empty tab, "Close Tab" to close the current one +4. **SSH Keys**: Click "Keys" in the toolbar to generate or import SSH keys +5. **Tabs**: Click "+ Tab" for a new empty tab, "Close Tab" to close the current one + +## Server Dialog Fields + +| Field | Description | +|-------|-------------| +| Name | Display name for the server | +| Host | Hostname or IP address | +| User | SSH username | +| Port | SSH port (default: 22) | +| Password | Optional, can be saved | +| Save password | Checkbox to store password in config | +| SSH Key | Optional key for public key authentication | ## Notifications @@ -90,7 +105,7 @@ Notifications auto-hide after 4 seconds. │ [Server▼] [host___] [user___] [port] [Connect] ...│ ├───────────┬────────────────────────────────────────┤ │ Servers │ [Tab: MyServer] [Tab: Prod] [+] │ -│ ─────── │ │ +│ +─────── │ │ │ MyServer │ user@host:~$ │ │ root@h:22 │ │ │ │ │ @@ -101,6 +116,15 @@ Notifications auto-hide after 4 seconds. └────────────────────────────────────────────────────┘ ``` +Right-click on a server in the sidebar: +``` +┌──────────┐ +│ Connect │ +│ Edit │ +│ Delete │ +└──────────┘ +``` + ## License MIT diff --git a/icons/x3-ssh.png b/icons/x3-ssh.png index f02eee669e3bf0aaa98fa9cb0c79624ad2b9453b..dbf1638a4e4e7a7205937209693749655236cc1e 100644 GIT binary patch literal 21564 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%0DWGof)IewyzQqrcPo&VG^Y$EL|9O* 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