This commit removes the native OS title bar and introduces a cross-platform custom title bar using gpui-component's TitleBar. To optimize vertical screen space, the tab bar has been relocated into the newly created custom title bar.
Fixes#37
Use the outer terminal panel bounds for PTY resizing while keeping per-pane bounds for focus and input handling. This prevents split panes from being resized a second time to half width.
- default follow_system_theme to true and remove empty theme-name fallback override\n- add backward compatibility for v0.3.11 transfer state values during config load\n- preserve old config files by backing up parse failures instead of silently overwriting them\n- add optional SSH key passphrase input to the new SSH form and persist it in sessions\n- use stored passphrases when loading private keys for SSH and SFTP connections\n- make terminal size sync prefer measured bounds to reduce unused space at the bottom
- Render block elements (U+2580-U+259F), box drawing lines, and powerline characters using precise GPUI vector paths instead of fonts.
- Snap logical coordinates to exact physical pixels using window.scale_factor() to perfectly eliminate SDF anti-aliasing gaps and bleeding.
- Fixes visual seams in terminal UI layouts.
- Add an independent scrollbar track to prevent it from overlapping with the content list
- Add a "Clear History" button with text label, placed seamlessly next to the close button in the custom header
- Implement a 100-record limit for transfer history and display this limit in the header
- Persist the cleared transfer history into the session config immediately after clearing
- Disable default dialog close button and reconstruct header to avoid state update collision and panic
Resolves#25
- Active Tab: Now uses `FontWeight::BOLD`, `text_base()` font size, and the primary theme color. This makes it far more distinct from inactive tabs, especially in themes where background differences are subtle.
- Settings Dialog: Overrode the default sidebar style to use the main dialog background (`cx.theme().background`), seamlessly blending the sidebar with the content pane.
- Refactor: Renamed unused `_cx` parameter to `cx` in the settings dialog render closure since it is now being utilized to access the theme.
Rationale:
Previously, the terminal renderer generated background highlight rectangles (`LayoutRect`) with a hardcoded width of 1 cell (`cells: 1`) for every character. For full-width CJK characters (which carry the `Flags::WIDE_CHAR` flag and visually span 2 columns), this caused the selection and custom background colors to render across only half of the character's visual width.
This fix correctly interprets the terminal cell flags during layout generation: if a cell possesses `Flags::WIDE_CHAR`, it generates a background rectangle spanning 2 cells (`cells: 2`). As a result, the highlight now matches the exact bounds that the text occupies in the terminal grid, cleanly fixing the partial highlighting of Chinese text.
Resolves issue #20 where RSA 4096-bit keys failed to authenticate on OpenWrt
Dropbear servers. The previous logic exclusively tried rsa-sha2-512 and rsa-sha2-256,
which caused authentication aborts on servers only supporting legacy ssh-rsa (SHA-1)
signatures.
- Modified `private_key_with_alg` to `private_keys_with_algs` to return a list of
supported algorithms including SHA-1 fallback for RSA keys.
- Implemented an iterative algorithm fallback loop in both SSH and SFTP connection
authentication phases.
This commit introduces a robust logging system and optimizes remote metric collection over SSH:
- Logging Infrastructure:
- Replaced ad-hoc `eprintln!` and `println!` with the `tracing` crate.
- Implemented a rolling file appender in `~/.config/ashell/log/` keeping the last 6 minutes of logs.
- Restricted stdout logging to debug builds only, keeping release builds clean.
- SSH Multiplexing & Performance:
- Shared `russh::client::Handle` across tasks using `Arc<Mutex<>>`.
- Replaced the 5-second polling of new SSH connections with `SampleMetrics` over the existing channel.
- Eliminated authentication log spam and vastly improved polling latency.
- Optimized terminal `resize` events to only trigger when dimensions actually change, further reducing UI layout spam and backend load.
- Application & Network Auditing:
- Log window lifecycles (open, close).
- Log UI actions such as session connects and tab closures.
- Detailed connection logs distinguishing between graceful EOFs, network drops, and abrupt closures.
- Granular SFTP tracking including directory navigation, creation, batch uploads/downloads, and online file editing.