use std::borrow::Borrow;
use std::path;
use anyhow::{Context, Result};
use crate::app::Status;
use crate::app::Tab;
use crate::common::LAZYGIT;
use crate::common::NCDU;
use crate::common::{is_program_in_path, open_in_current_neovim};
use crate::common::{CONFIG_PATH, GIO};
use crate::config::Bindings;
use crate::config::START_FOLDER;
use crate::io::execute_without_output_with_path;
use crate::io::read_log;
use crate::log_info;
use crate::log_line;
use crate::modes::help_string;
use crate::modes::lsblk_and_cryptsetup_installed;
use crate::modes::open_tui_program;
use crate::modes::Content;
use crate::modes::ContentWindow;
use crate::modes::Display;
use crate::modes::Edit;
use crate::modes::InputCompleted;
use crate::modes::InputSimple;
use crate::modes::LeaveMode;
use crate::modes::MarkAction;
use crate::modes::Mocp;
use crate::modes::Navigate;
use crate::modes::NeedConfirmation;
use crate::modes::Preview;
use crate::modes::RemovableDevices;
use crate::modes::Selectable;
use crate::modes::MOCP;
/// Links events from tuikit to custom actions.
/// It mutates `Status` or its children `Tab`.
pub struct EventAction {}
impl EventAction {
/// Once a quit event is received, we change a flag and break the main loop.
/// It's usefull to reset the cursor before leaving the application.
pub fn quit(status: &mut Status) -> Result<()> {
status.internal_settings.must_quit = true;
Ok(())
}
/// Refresh the current view, reloading the files. Move the selection to top.
pub fn refresh_view(status: &mut Status) -> Result<()> {
status.refresh_view()
}
/// Refresh the view if files were modified in current directory.
pub fn refresh_if_needed(tab: &mut Tab) -> Result<()> {
tab.refresh_if_needed()
}
pub fn resize(status: &mut Status, width: usize, height: usize) -> Result<()> {