From 3a9888cd564dc45d23a7bdd0dba29a6ff1ef48a1 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Sat, 9 May 2026 22:07:33 +0300 Subject: feat: add ansi pane read format --- src/cli.rs | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'src/cli.rs') diff --git a/src/cli.rs b/src/cli.rs index dcc2537c..1d3c29e2 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -8,8 +8,8 @@ use crate::api; use crate::api::schema::{ AgentStatus, EmptyParams, IntegrationTarget, Method, OutputMatch, PaneListParams, PaneReadParams, PaneSendInputParams, PaneSendKeysParams, PaneSendTextParams, PaneSplitParams, - PaneTarget, PaneWaitForOutputParams, PingParams, ReadSource, Request, SplitDirection, - Subscription, TabCreateParams, TabListParams, TabRenameParams, TabTarget, + PaneTarget, PaneWaitForOutputParams, PingParams, ReadFormat, ReadSource, Request, + SplitDirection, Subscription, TabCreateParams, TabListParams, TabRenameParams, TabTarget, WorkspaceCreateParams, WorkspaceRenameParams, WorkspaceTarget, }; @@ -789,13 +789,14 @@ fn pane_get(args: &[String]) -> std::io::Result { fn pane_read(args: &[String]) -> std::io::Result { let Some(raw_pane_id) = args.first() else { - eprintln!("usage: herdr pane read [--source visible|recent|recent-unwrapped] [--lines N]"); + eprintln!("usage: herdr pane read [--source visible|recent|recent-unwrapped] [--lines N] [--format text|ansi] [--ansi]"); return Ok(2); }; let pane_id = normalize_pane_id(raw_pane_id); let mut source = ReadSource::Recent; let mut lines = None; + let mut format = ReadFormat::Text; let mut strip_ansi = true; let mut index = 1; @@ -817,7 +818,20 @@ fn pane_read(args: &[String]) -> std::io::Result { lines = Some(parse_u32_flag("--lines", value)?); index += 2; } + "--format" => { + let Some(value) = args.get(index + 1) else { + eprintln!("missing value for --format"); + return Ok(2); + }; + format = parse_read_format(value)?; + index += 2; + } + "--ansi" => { + format = ReadFormat::Ansi; + index += 1; + } "--raw" => { + format = ReadFormat::Ansi; strip_ansi = false; index += 1; } @@ -834,6 +848,7 @@ fn pane_read(args: &[String]) -> std::io::Result { pane_id, source, lines, + format, strip_ansi, }), })?; @@ -1308,6 +1323,16 @@ fn parse_read_source(value: &str) -> std::io::Result { } } +fn parse_read_format(value: &str) -> std::io::Result { + match value { + "text" => Ok(ReadFormat::Text), + "ansi" => Ok(ReadFormat::Ansi), + _ => Err(std::io::Error::other(format!( + "invalid read format: {value}" + ))), + } +} + fn parse_agent_status(value: &str) -> std::io::Result { match value { "idle" => Ok(AgentStatus::Idle), @@ -1438,7 +1463,7 @@ fn print_pane_help() { eprintln!("herdr pane commands:"); eprintln!(" herdr pane list [--workspace ]"); eprintln!(" herdr pane get "); - eprintln!(" herdr pane read [--source visible|recent|recent-unwrapped] [--lines N] [--raw]"); + eprintln!(" herdr pane read [--source visible|recent|recent-unwrapped] [--lines N] [--format text|ansi] [--ansi]"); eprintln!( " herdr pane split --direction right|down [--cwd PATH] [--focus] [--no-focus]" ); -- cgit v1.2.3