diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-09-06 02:27:06 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-06 02:27:06 +0300 |
| commit | 9e9bc8a144667a6b7debfd4f0c7a31ff0e11493a (patch) | |
| tree | 03f1259f91fd9edeacfd4b904f2e84d4acf25232 /src/ui | |
| parent | 35b0dff96579f099e0436290085024424ffb289c (diff) | |
feat: manage multiple ssh machines from one client (#3670)
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/sidebar.rs | 4 | ||||
| -rw-r--r-- | src/ui/sidebar/tokens.rs | 35 |
2 files changed, 38 insertions, 1 deletions
diff --git a/src/ui/sidebar.rs b/src/ui/sidebar.rs index 3da1e9f9..178bdb1f 100644 --- a/src/ui/sidebar.rs +++ b/src/ui/sidebar.rs @@ -129,6 +129,7 @@ pub(crate) fn resolved_token_spans( .iter() .map(|token| match &token.kind { ResolvedTokenKind::StateText(text) + | ResolvedTokenKind::Machine(text) | ResolvedTokenKind::Workspace(text) | ResolvedTokenKind::Tab(text) | ResolvedTokenKind::Pane(text) @@ -236,7 +237,8 @@ pub(crate) fn resolved_token_spans( truncate_end(text, budgets[index]), apply_token_style(workspace_style, token.style), )), - ResolvedTokenKind::Tab(text) + ResolvedTokenKind::Machine(text) + | ResolvedTokenKind::Tab(text) | ResolvedTokenKind::Pane(text) | ResolvedTokenKind::Agent(text) | ResolvedTokenKind::Branch(text) => spans.push(Span::styled( diff --git a/src/ui/sidebar/tokens.rs b/src/ui/sidebar/tokens.rs index eaec154b..911c87f9 100644 --- a/src/ui/sidebar/tokens.rs +++ b/src/ui/sidebar/tokens.rs @@ -13,6 +13,7 @@ pub(crate) struct ResolvedToken { pub(crate) enum ResolvedTokenKind { StateIcon, StateText(String), + Machine(String), Workspace(String), Tab(String), Pane(String), @@ -35,6 +36,7 @@ impl ResolvedToken { } pub(crate) struct AgentTokenContext<'a> { + pub(crate) machine: Option<&'a str>, pub(crate) workspace: &'a str, pub(crate) tab: Option<&'a str>, pub(crate) pane: Option<&'a str>, @@ -63,6 +65,9 @@ pub(crate) fn agent_rows( AgentSidebarToken::StateText => { Some(ResolvedTokenKind::StateText(state_text.to_string())) } + AgentSidebarToken::Machine => context + .machine + .map(|value| ResolvedTokenKind::Machine(value.to_string())), AgentSidebarToken::Workspace => { Some(ResolvedTokenKind::Workspace(context.workspace.to_string())) } @@ -190,6 +195,7 @@ mod tests { fn context(entry: &Entry) -> AgentTokenContext<'_> { AgentTokenContext { + machine: None, workspace: &entry.workspace, tab: entry.tab.as_deref(), pane: entry.pane.as_deref(), @@ -232,6 +238,35 @@ mod tests { } #[test] + fn machine_token_only_resolves_for_multi_machine_rows() { + let entry = entry(); + let config = AgentsSidebarConfig { + rows: vec![vec![ + AgentSidebarToken::Machine, + AgentSidebarToken::Workspace, + ]], + ..Default::default() + }; + + assert_eq!( + agent_rows(&config, context(&entry), "working"), + vec![vec![ResolvedToken::unstyled(ResolvedTokenKind::Workspace( + "repo".into() + ))]] + ); + + let mut remote_context = context(&entry); + remote_context.machine = Some("Build"); + assert_eq!( + agent_rows(&config, remote_context, "working"), + vec![vec![ + ResolvedToken::unstyled(ResolvedTokenKind::Machine("Build".into())), + ResolvedToken::unstyled(ResolvedTokenKind::Workspace("repo".into())), + ]] + ); + } + + #[test] fn state_text_and_arbitrary_values_are_independent_tokens() { let mut entry = entry(); entry |
