From 0ad66fca85de871bc7302a54301683ed2b770bb1 Mon Sep 17 00:00:00 2001 From: Kyohei Uto Date: Sat, 11 Jan 2025 15:48:03 +0900 Subject: [PATCH] Handle no renaming pattern --- src/op.rs | 32 ++++++++++++++++++-------------- src/run.rs | 28 +++++++++++++++++----------- src/state.rs | 11 +++++++---- 3 files changed, 42 insertions(+), 29 deletions(-) diff --git a/src/op.rs b/src/op.rs index 11f4882..ddc9913 100644 --- a/src/op.rs +++ b/src/op.rs @@ -57,12 +57,14 @@ fn log(op: &OpKind) { info!("DELETE: {:?}", item_to_pathvec(&op.original)); } OpKind::Rename(op) => { - info!( - "RENAME: {:?}", - op.iter() - .map(|v| format!("{:?} -> {:?}", v.0, v.1)) - .collect::>() - ); + if !op.is_empty() { + info!( + "RENAME: {:?}", + op.iter() + .map(|v| format!("{:?} -> {:?}", v.0, v.1)) + .collect::>() + ); + } } } } @@ -83,14 +85,16 @@ pub fn relog(op: &OpKind, undo: bool) { info!("{} {:?}", result, item_to_pathvec(&op.original)); } OpKind::Rename(op) => { - result.push_str("RENAME"); - info!( - "{} {:?}", - result, - op.iter() - .map(|v| format!("{:?} -> {:?}", v.0, v.1)) - .collect::>() - ); + if !op.is_empty() { + result.push_str("RENAME"); + info!( + "{} {:?}", + result, + op.iter() + .map(|v| format!("{:?} -> {:?}", v.0, v.1)) + .collect::>() + ); + } } } } diff --git a/src/run.rs b/src/run.rs index 8417787..12fd4a9 100644 --- a/src/run.rs +++ b/src/run.rs @@ -1371,21 +1371,27 @@ fn _run(mut state: State, session_path: PathBuf) -> Result<(), FxError> { .map(ItemBuffer::new) .collect(); execute!(screen, EnterAlternateScreen)?; - let mut err: Option = None; - if let Err(e) = state.rename_multiple_items(&items) { - err = Some(e); - } + let result = state.rename_multiple_items(&items); execute!(screen, EnterAlternateScreen)?; hide_cursor(); state.reset_selection(); state.reload(state.layout.y)?; - if let Some(e) = err { - print_warning(e, state.layout.y); - } else { - print_info( - format!("Renamed {} items.", items.len()), - state.layout.y, - ); + match result { + Err(e) => { + print_warning(e, state.layout.y); + } + Ok(result_len) => { + let message = { + match result_len { + 0 => "No item renamed.".to_owned(), + 1 => "1 item renamed.".to_owned(), + count => { + format!("{} items renamed.", count) + } + } + }; + print_info(message, state.layout.y); + } } continue; } diff --git a/src/state.rs b/src/state.rs index 09b9d8a..a4fc30f 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1293,7 +1293,7 @@ impl State { } /// Rename selected items at once. - pub fn rename_multiple_items(&mut self, items: &[ItemBuffer]) -> Result<(), FxError> { + pub fn rename_multiple_items(&mut self, items: &[ItemBuffer]) -> Result { let names: Vec<&str> = items.iter().map(|item| item.file_name.as_str()).collect(); let mut file = tempfile::NamedTempFile::new()?; writeln!(file, "{}", names.join("\n"))?; @@ -1328,13 +1328,16 @@ impl State { for (i, new_name) in new_names.iter().enumerate() { let mut to = self.current_dir.clone(); to.push(new_name); - std::fs::rename(&items[i].file_path, &to)?; - result.push((items[i].file_path.clone(), to)) + if &items[i].file_name != new_name { + std::fs::rename(&items[i].file_path, &to)?; + result.push((items[i].file_path.clone(), to)) + } } + let len = result.len(); self.operations.branch(); self.operations.push(OpKind::Rename(result)); - Ok(()) + Ok(len) } } }