diff options
| author | sigoden <sigoden@gmail.com> | 2024-12-14 07:00:47 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-14 07:00:47 +0800 |
| commit | bad5084e148ae1a392e3ac1ea96a6217f7f02844 (patch) | |
| tree | a70283cd4dcd66ac9920a36b4de4a63a5c727dd5 | |
| parent | 737580bb87f3b1d2f040dd7a4ddacca3595915a0 (diff) | |
| download | aichat-bad5084e148ae1a392e3ac1ea96a6217f7f02844.tar.gz | |
fix: don't trim the input text (#1056)
| -rw-r--r-- | src/cli.rs | 7 | ||||
| -rw-r--r-- | src/config/input.rs | 2 | ||||
| -rw-r--r-- | src/repl/mod.rs | 16 |
3 files changed, 14 insertions, 11 deletions
@@ -73,12 +73,7 @@ pub struct Cli { impl Cli { pub fn text(&self) -> Option<String> { - let text = self - .text - .iter() - .map(|x| x.trim().to_string()) - .collect::<Vec<String>>() - .join(" "); + let text = self.text.to_vec().join(" "); if text.is_empty() { return None; } diff --git a/src/config/input.rs b/src/config/input.rs index 42bb8ec..591eb67 100644 --- a/src/config/input.rs +++ b/src/config/input.rs @@ -91,7 +91,7 @@ impl Input { } for (path, contents) in files { texts.push(format!( - "============ PATH: {path} ============\n\n{contents}\n" + "============ PATH: {path} ============\n{contents}\n" )); } let (role, with_session, with_agent) = resolve_role(&config.read(), role); diff --git a/src/repl/mod.rs b/src/repl/mod.rs index cdca146..ff12331 100644 --- a/src/repl/mod.rs +++ b/src/repl/mod.rs @@ -280,7 +280,7 @@ impl Repl { Some(args) => match args.split_once(['\n', ' ']) { Some((name, text)) => { let role = self.config.read().retrieve_role(name.trim())?; - let input = Input::from_str(&self.config, text.trim(), Some(role)); + let input = Input::from_str(&self.config, text, Some(role)); ask(&self.config, self.abort_signal.clone(), input, false).await?; } None => { @@ -718,8 +718,9 @@ fn split_files_text(line: &str, is_win: bool) -> (Vec<String>, &str) { word.to_string() } }; + let chars: Vec<char> = line.chars().collect(); - for (i, char) in line.chars().enumerate() { + for (i, char) in chars.iter().cloned().enumerate() { match unbalance { Some(ub_char) if ub_char == char => { word.push(char); @@ -730,12 +731,15 @@ fn split_files_text(line: &str, is_win: bool) -> (Vec<String>, &str) { } None => match char { ' ' | '\t' | '\r' | '\n' => { + if char == '\r' && chars.get(i + 1) == Some(&'\n') { + continue; + } if let Some('\\') = prev_char.filter(|_| !is_win) { word.push(char); } else if !word.is_empty() { if word == "--" { word.clear(); - text_starts_at = Some(i); + text_starts_at = Some(i + 1); break; } words.push(unquote_word(&word)); @@ -763,7 +767,7 @@ fn split_files_text(line: &str, is_win: bool) -> (Vec<String>, &str) { words.push(unquote_word(&word)); } let text = match text_starts_at { - Some(start) => line[start..].trim(), + Some(start) => &line[start..], None => "", }; @@ -808,6 +812,10 @@ mod tests { (vec!["file.txt".into()], "hello") ); assert_eq!( + split_files_text("file.txt -- \thello", false), + (vec!["file.txt".into()], "\thello") + ); + assert_eq!( split_files_text("file.txt --\nhello", false), (vec!["file.txt".into()], "hello") ); |
