Repository navigation
feat: add group-colored terminal wave accents - #291
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b22beb544a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| }; | ||
| try { | ||
| await invoke("update_group", { group }); | ||
| invalidateConfiguration(); |
There was a problem hiding this comment.
Broadcast group invalidations across terminal windows
When a grouped SSH or Telnet tab is opened through open_tab_in_new_window, this call only increments _configurationRevision in the current webview's instance of sync.svelte.ts; the new Tauri window boots an independent frontend instance. Its TerminalPane therefore never reruns the profile/group lookup after a group is renamed, recolored, enabled/disabled, or reassigned in another window, leaving the footer stale until that window reloads. Broadcast the invalidation across webviews instead of relying solely on module-local state.
Useful? React with 👍 / 👎.
| flex: 0 0 auto; | ||
| width: 100%; | ||
| height: clamp(64px, 15%, 150px); |
There was a problem hiding this comment.
Let the wave footer shrink with split panes
With waves enabled in a top/bottom split inside a normally tall window, the max-height media query still measures the whole viewport, while this non-shrinking flex child keeps a 64px minimum. The split layout permits 20% ratios and nested splits, so the footer plus the 28px pane header can consume nearly all of a valid small pane and leave xterm with only a few rows or no usable canvas. Size the footer from its pane (for example with a container query) or allow it to shrink with the flex container.
AGENTS.md reference: AGENTS.md:L47-L47
Useful? React with 👍 / 👎.
|
Hi maintainers, the latest Tests workflow is awaiting maintainer approval, so no CI jobs have started yet. Could you please approve the run when you have a chance? Workflow run: https://github.com/rssh-org/rssh/actions/runs/38846968676 Thank you! |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3a6461650a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| export async function notifyEnvironmentChanged(kind: "group" | "connection", id: string): Promise<void> { | ||
| invalidateConfiguration(); | ||
| try { | ||
| await emit(environmentEvent(kind, id)); |
There was a problem hiding this comment.
Broadcast sync invalidations to detached terminal windows
When a GitHub/WebDAV pull (including the automatic pull in sync.svelte.ts) or ImportExportScreen.doImport changes a group's color/name/wave flag or a profile's group_id, this emit path is never called: only GroupManager and the three profile editors invoke notifyEnvironmentChanged, while sync only increments the initiating webview's module-local revision and import increments none. A terminal detached with open_tab_in_new_window therefore never reruns watchEnvironmentGroup and keeps the old environment marker until reload; broadcast the affected group/profile IDs through this scoped event path after these merges too.
AGENTS.md reference: AGENTS.md:L13-L15
Useful? React with 👍 / 👎.
|
Good job! add a small suggestion: Please remove the group name and blend the wave into the terminal content area as a background, without taking up space. Position it on the right instead of the bottom, where commands are entered. |
|
Thanks for the suggestion! I agree—I'll remove the group name and blend the wave into the right side of the terminal background so it doesn't take up any space or interfere with command input. |
|
Updated as suggested:
|
|
LGTM |
Use static group-colored backgrounds and snapshot settings per terminal. Remove live configuration linkage, migrate the wave flag to schema v32, and preserve clone metadata, input focus, and image export colors. Remove obsolete wave screenshots.


Saved SSH, Telnet and serial connections can be hard to distinguish by environment. This adds opt-in group-colored gradient waves as a right-side terminal background, with a live preview in group settings. The accent occupies no terminal rows, has no group-name label, and leaves glyphs and the selected terminal palette intact.
The approved effect uses three translucent wave layers, offset by 39% of a half-cycle so one crest flows into another layer's trough. The accent spans 23% of the pane (capped at 230px), uses 1.45× wavelength and 0.9× ambient speed, and softens edges by 3px. Startup holds a 12× rush before easing to normal over 2.2 seconds, with up to 1.15× horizontal amplitude. Reduced-motion preferences produce a static background. Each pane owns and disposes its animations; narrow and split panes keep their full terminal area.
Group edits and connection reassignment update open terminals through resource-scoped notifications. Manual GitHub/WebDAV pulls, automatic pulls and JSON imports now notify the union of pre/post-import group and connection IDs, including partial imports that commit valid rows before reporting errors. Detached windows refresh without reloading; notification failure does not turn a completed import into a failure.
Migration 31 persists the optional setting through the existing Group export/sync contract. Older payloads default to waves disabled. Headless clients reuse the existing authenticated WebSocket relay for scoped configuration events.
Entry points
Validation
npm test: 791 tests passed, including startup easing, subscription lifecycle and successful/partial import notifications.npm run build: passed.cargo fmt --manifest-path src-tauri/Cargo.toml --check: passed.cargo test --manifest-path src-tauri/Cargo.toml --features cli,server: 751 library tests and 6 CLI tests passed; one existing doc test ignored. The process-group test required execution outside the sandbox.Preview