From d8838082dc06b0d85ef164650b979e57a87f7721 Mon Sep 17 00:00:00 2001 From: akbash Date: Tue, 4 Aug 2026 22:26:52 +0300 Subject: fix(cli): resolve pane query --current from caller (#2298) refs #2297 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> --- src/cli/pane.rs | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) (limited to 'src/cli') diff --git a/src/cli/pane.rs b/src/cli/pane.rs index 7c12e0f9..e7d65702 100644 --- a/src/cli/pane.rs +++ b/src/cli/pane.rs @@ -139,7 +139,7 @@ fn parse_pane_current_args( } fn pane_layout(args: &[String]) -> std::io::Result { - let pane_id = match parse_optional_current_pane_args(args) { + let pane_id = match parse_optional_current_pane_args_from_env(args) { Ok(pane_id) => pane_id, Err(message) => { eprintln!("{message}"); @@ -154,7 +154,7 @@ fn pane_layout(args: &[String]) -> std::io::Result { } fn pane_process_info(args: &[String]) -> std::io::Result { - let pane_id = match parse_optional_current_pane_args(args) { + let pane_id = match parse_optional_current_pane_args_from_env(args) { Ok(pane_id) => pane_id, Err(message) => { eprintln!("{message}"); @@ -169,7 +169,7 @@ fn pane_process_info(args: &[String]) -> std::io::Result { } fn pane_edges(args: &[String]) -> std::io::Result { - let pane_id = match parse_optional_current_pane_args(args) { + let pane_id = match parse_optional_current_pane_args_from_env(args) { Ok(pane_id) => pane_id, Err(message) => { eprintln!("{message}"); @@ -222,7 +222,17 @@ fn pane_resize(args: &[String]) -> std::io::Result { super::runtime::pane_resize(params) } -fn parse_optional_current_pane_args(args: &[String]) -> Result, String> { +fn parse_optional_current_pane_args_from_env(args: &[String]) -> Result, String> { + let env_pane_id = std::env::var("HERDR_PANE_ID") + .ok() + .filter(|value| !value.trim().is_empty()); + parse_optional_current_pane_args(args, env_pane_id.as_deref()) +} + +fn parse_optional_current_pane_args( + args: &[String], + env_pane_id: Option<&str>, +) -> Result, String> { let mut pane_id = None; let mut index = 0; while index < args.len() { @@ -235,7 +245,7 @@ fn parse_optional_current_pane_args(args: &[String]) -> Result, S index += 2; } "--current" => { - pane_id = None; + pane_id = env_pane_id.map(super::normalize_pane_id); index += 1; } other => return Err(format!("unknown option: {other}")), @@ -1734,9 +1744,33 @@ mod tests { assert_eq!(params.direction, PaneDirection::Down); } + #[test] + fn parse_optional_current_pane_args_accepts_current_target() { + let pane_id = + parse_optional_current_pane_args(&args(&["--current"]), Some("issue-1")).unwrap(); + + assert_eq!(pane_id, Some("issue-1".into())); + } + + #[test] + fn parse_optional_current_pane_args_current_without_env_keeps_focused_fallback() { + let pane_id = parse_optional_current_pane_args(&args(&["--current"]), None).unwrap(); + + assert_eq!(pane_id, None); + } + + #[test] + fn parse_optional_current_pane_args_omitted_target_keeps_focused_fallback() { + let pane_id = parse_optional_current_pane_args(&args(&[]), Some("issue-1")).unwrap(); + + assert_eq!(pane_id, None); + } + #[test] fn parse_optional_current_pane_args_accepts_explicit_pane() { - let pane_id = parse_optional_current_pane_args(&args(&["--pane", "issue-2"])).unwrap(); + let pane_id = + parse_optional_current_pane_args(&args(&["--pane", "issue-2"]), Some("issue-1")) + .unwrap(); assert_eq!(pane_id, Some("issue-2".into())); } -- cgit v1.2.3