From df76e74ce36d7b92a9c471f60ae85df7675396b7 Mon Sep 17 00:00:00 2001 From: qkzk Date: Sat, 6 Jan 2024 23:31:46 +0100 Subject: flagged: copy filename & filepath --- src/event/action_map.rs | 4 ++-- src/event/event_exec.rs | 38 ++++++++++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 8 deletions(-) (limited to 'src/event') diff --git a/src/event/action_map.rs b/src/event/action_map.rs index a21495a..d61d653 100644 --- a/src/event/action_map.rs +++ b/src/event/action_map.rs @@ -124,8 +124,8 @@ impl ActionMap { Self::CliMenu => EventAction::cli_menu(status), Self::Compress => EventAction::compress(status), Self::Context => EventAction::context(status), - Self::CopyFilename => EventAction::copy_filename(current_tab), - Self::CopyFilepath => EventAction::copy_filepath(current_tab), + Self::CopyFilename => EventAction::copy_filename(status), + Self::CopyFilepath => EventAction::copy_filepath(status), Self::CopyPaste => EventAction::copy_paste(status), Self::CutPaste => EventAction::cut_paste(status), Self::Delete => EventAction::delete(status), diff --git a/src/event/event_exec.rs b/src/event/event_exec.rs index c8974ac..36d901b 100644 --- a/src/event/event_exec.rs +++ b/src/event/event_exec.rs @@ -5,6 +5,8 @@ use anyhow::{Context, Result}; use crate::app::Status; use crate::app::Tab; +use crate::common::filename_to_clipboard; +use crate::common::filepath_to_clipboard; use crate::common::LAZYGIT; use crate::common::NCDU; use crate::common::{is_program_in_path, open_in_current_neovim}; @@ -975,17 +977,41 @@ impl EventAction { } /// Copy the filename of the selected file in normal mode. - pub fn copy_filename(tab: &mut Tab) -> Result<()> { - if let Display::Directory | Display::Tree = tab.display_mode { - tab.filename_to_clipboard(); + pub fn copy_filename(status: &Status) -> Result<()> { + match status.current_tab().display_mode { + Display::Tree | Display::Directory => { + let Ok(file_info) = status.current_tab().current_file() else { + return Ok(()); + }; + filename_to_clipboard(&file_info.path); + } + Display::Flagged => { + let Some(path) = status.menu.flagged.selected() else { + return Ok(()); + }; + filename_to_clipboard(&path); + } + _ => return Ok(()), } Ok(()) } /// Copy the filepath of the selected file in normal mode. - pub fn copy_filepath(tab: &mut Tab) -> Result<()> { - if let Display::Directory | Display::Tree = tab.display_mode { - tab.filepath_to_clipboard(); + pub fn copy_filepath(status: &Status) -> Result<()> { + match status.current_tab().display_mode { + Display::Tree | Display::Directory => { + let Ok(file_info) = status.current_tab().current_file() else { + return Ok(()); + }; + filepath_to_clipboard(&file_info.path); + } + Display::Flagged => { + let Some(path) = status.menu.flagged.selected() else { + return Ok(()); + }; + filepath_to_clipboard(&path); + } + _ => return Ok(()), } Ok(()) } -- cgit v1.2.3