From 1ac44afcc091ef70890ebcb5ff409ae6dc0eef53 Mon Sep 17 00:00:00 2001 From: JJ Liebig Date: Mon, 10 Aug 2026 20:49:41 +0200 Subject: [PATCH] fix(windows): strip elevated terminal title decoration (#2632) --- src/platform/mod.rs | 5 +++++ src/platform/windows.rs | 5 +++++ src/terminal/title.rs | 16 +++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/platform/mod.rs b/src/platform/mod.rs index d8613be4..e3f9c7f4 100644 --- a/src/platform/mod.rs +++ b/src/platform/mod.rs @@ -39,6 +39,11 @@ pub(crate) fn apply_pane_runtime_marker(command: &mut portable_pty::CommandBuild apply_pane_runtime_marker_platform(command); } +#[cfg(not(windows))] +pub(crate) fn terminal_title_for_presentation(title: &str) -> &str { + title +} + #[cfg(not(windows))] fn apply_pane_runtime_marker_platform(_command: &mut portable_pty::CommandBuilder) {} diff --git a/src/platform/windows.rs b/src/platform/windows.rs index aef528e5..05fdfe72 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -82,6 +82,11 @@ use super::{ClipboardImage, ForegroundJob, Signal}; const STILL_ACTIVE: u32 = 259; const FOREGROUND_PROCESS_SNAPSHOT_CACHE_TTL: Duration = Duration::from_millis(250); const PANE_RUNTIME_MARKER_ENV_VAR: &str = "HERDR_PANE_RUNTIME_ID"; + +pub(crate) fn terminal_title_for_presentation(title: &str) -> &str { + title.strip_prefix("Administrator: ").unwrap_or(title) +} + const MAX_PROCESS_ENVIRONMENT_BYTES: usize = 256 * 1024; const PROCESS_ENVIRONMENT_READ_CHUNK_BYTES: usize = 16 * 1024; const PROCESS_RUNTIME_MARKER_CACHE_CAPACITY: usize = 1_024; diff --git a/src/terminal/title.rs b/src/terminal/title.rs index 32ba19c4..6958be00 100644 --- a/src/terminal/title.rs +++ b/src/terminal/title.rs @@ -1,7 +1,7 @@ const CLAUDE_ACTIVITY_GLYPHS: &str = "·✢✳✶✻✽"; pub(crate) fn stripped_terminal_title(title: &str) -> Option { - let title = title.trim(); + let title = crate::platform::terminal_title_for_presentation(title).trim(); if title.is_empty() { return None; } @@ -61,4 +61,18 @@ mod tests { assert_eq!(stripped_terminal_title(" "), None); assert_eq!(stripped_terminal_title("⠋ "), None); } + + #[cfg(windows)] + #[test] + fn strips_one_windows_elevation_decoration_before_activity_glyph() { + assert_eq!( + stripped_terminal_title("Administrator: ⠋ task").as_deref(), + Some("task") + ); + assert_eq!( + stripped_terminal_title("Administrator: Administrator: task").as_deref(), + Some("Administrator: task") + ); + assert_eq!(stripped_terminal_title("Administrator: "), None); + } }