From 9f5e6e0dbf239cdb08a7974147d0fa3f8183e364 Mon Sep 17 00:00:00 2001 From: Jeff Zhao Date: Mon, 29 Aug 2022 12:36:31 -0400 Subject: add lazy static initalizations to make sure configs are initialized at the right time --- src/commands/mod.rs | 2 +- src/commands/select.rs | 79 ++++++++++++++++++++++++++++++++++++++ src/commands/selection.rs | 79 -------------------------------------- src/config/keymap/keymapping.rs | 2 +- src/key_command/impl_appexecute.rs | 2 +- src/main.rs | 14 +++++-- src/run.rs | 2 +- 7 files changed, 93 insertions(+), 87 deletions(-) create mode 100644 src/commands/select.rs delete mode 100644 src/commands/selection.rs (limited to 'src') diff --git a/src/commands/mod.rs b/src/commands/mod.rs index f4e0ee5..4f270ea 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -18,7 +18,7 @@ pub mod search; pub mod search_fzf; pub mod search_glob; pub mod search_string; -pub mod selection; +pub mod select; pub mod set_mode; pub mod show_help; pub mod show_hidden; diff --git a/src/commands/select.rs b/src/commands/select.rs new file mode 100644 index 0000000..a4d26c4 --- /dev/null +++ b/src/commands/select.rs @@ -0,0 +1,79 @@ +use globset::Glob; + +use crate::config::option::SelectOption; +use crate::context::AppContext; +use crate::error::JoshutoResult; + +use super::cursor_move; + +pub fn select_files( + context: &mut AppContext, + pattern: &str, + options: &SelectOption, +) -> JoshutoResult { + if pattern.is_empty() { + select_without_pattern(context, options) + } else { + select_with_pattern(context, pattern, options) + } +} + +fn select_without_pattern(context: &mut AppContext, options: &SelectOption) -> JoshutoResult { + if options.all { + if let Some(curr_list) = context.tab_context_mut().curr_tab_mut().curr_list_mut() { + curr_list.iter_mut().for_each(|e| { + if options.reverse { + e.set_selected(false); + } else if options.toggle { + e.set_selected(!e.is_selected()); + } else { + e.set_selected(true); + } + }); + } + } else if let Some(entry) = context + .tab_context_mut() + .curr_tab_mut() + .curr_list_mut() + .and_then(|s| s.curr_entry_mut()) + { + if options.reverse { + entry.set_selected(false); + } else if options.toggle { + entry.set_selected(!entry.is_selected()); + } else { + entry.set_selected(true); + } + cursor_move::down(context, 1)?; + } + Ok(()) +} + +fn select_with_pattern( + context: &mut AppContext, + pattern: &str, + options: &SelectOption, +) -> JoshutoResult { + let glob = Glob::new(pattern)?.compile_matcher(); + + if let Some(curr_list) = context.tab_context_mut().curr_tab_mut().curr_list_mut() { + let mut found = 0; + curr_list + .iter_mut() + .filter(|e| glob.is_match(e.file_name())) + .for_each(|e| { + found += 1; + if options.reverse { + e.set_selected(false); + } else if options.toggle { + e.set_selected(!e.is_selected()); + } else { + e.set_selected(true); + } + }); + context + .message_queue_mut() + .push_info(format!("{} files selected", found)); + } + Ok(()) +} diff --git a/src/commands/selection.rs b/src/commands/selection.rs deleted file mode 100644 index a4d26c4..0000000 --- a/src/commands/selection.rs +++ /dev/null @@ -1,79 +0,0 @@ -use globset::Glob; - -use crate::config::option::SelectOption; -use crate::context::AppContext; -use crate::error::JoshutoResult; - -use super::cursor_move; - -pub fn select_files( - context: &mut AppContext, - pattern: &str, - options: &SelectOption, -) -> JoshutoResult { - if pattern.is_empty() { - select_without_pattern(context, options) - } else { - select_with_pattern(context, pattern, options) - } -} - -fn select_without_pattern(context: &mut AppContext, options: &SelectOption) -> JoshutoResult { - if options.all { - if let Some(curr_list) = context.tab_context_mut().curr_tab_mut().curr_list_mut() { - curr_list.iter_mut().for_each(|e| { - if options.reverse { - e.set_selected(false); - } else if options.toggle { - e.set_selected(!e.is_selected()); - } else { - e.set_selected(true); - } - }); - } - } else if let Some(entry) = context - .tab_context_mut() - .curr_tab_mut() - .curr_list_mut() - .and_then(|s| s.curr_entry_mut()) - { - if options.reverse { - entry.set_selected(false); - } else if options.toggle { - entry.set_selected(!entry.is_selected()); - } else { - entry.set_selected(true); - } - cursor_move::down(context, 1)?; - } - Ok(()) -} - -fn select_with_pattern( - context: &mut AppContext, - pattern: &str, - options: &SelectOption, -) -> JoshutoResult { - let glob = Glob::new(pattern)?.compile_matcher(); - - if let Some(curr_list) = context.tab_context_mut().curr_tab_mut().curr_list_mut() { - let mut found = 0; - curr_list - .iter_mut() - .filter(|e| glob.is_match(e.file_name())) - .for_each(|e| { - found += 1; - if options.reverse { - e.set_selected(false); - } else if options.toggle { - e.set_selected(!e.is_selected()); - } else { - e.set_selected(true); - } - }); - context - .message_queue_mut() - .push_info(format!("{} files selected", found)); - } - Ok(()) -} diff --git a/src/config/keymap/keymapping.rs b/src/config/keymap/keymapping.rs index cc30f04..dedbb39 100644 --- a/src/config/keymap/keymapping.rs +++ b/src/config/keymap/keymapping.rs @@ -92,7 +92,7 @@ fn vec_to_map(vec: &[CommandKeymap]) -> HashMap { }, } } - Err(e) => eprintln!("{}", e), + Err(e) => eprintln!("Keymap error: {}", e), } } hashmap diff --git a/src/key_command/impl_appexecute.rs b/src/key_command/impl_appexecute.rs index cd7aacc..bf8dbab 100644 --- a/src/key_command/impl_appexecute.rs +++ b/src/key_command/impl_appexecute.rs @@ -88,7 +88,7 @@ impl AppExecute for Command { Self::SearchPrev => search::search_prev(context), Self::SelectFiles(pattern, options) => { - selection::select_files(context, pattern.as_str(), options) + select::select_files(context, pattern.as_str(), options) } Self::SetMode => set_mode::set_mode(context, backend), Self::ShowTasks => show_tasks::show_tasks(context, backend, keymap_t), diff --git a/src/main.rs b/src/main.rs index 26f1d59..2b3f171 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,7 +27,6 @@ use crate::config::{ }; use crate::context::AppContext; use crate::error::JoshutoError; -use crate::run::run; const PROGRAM_NAME: &str = "joshuto"; const CONFIG_HOME: &str = "JOSHUTO_CONFIG_HOME"; @@ -88,7 +87,7 @@ pub struct Args { rest: Vec, } -fn run_joshuto(args: Args) -> Result { +fn run_main(args: Args) -> Result { if args.version { let version = env!("CARGO_PKG_VERSION"); println!("{}-{}", PROGRAM_NAME, version); @@ -102,13 +101,20 @@ fn run_joshuto(args: Args) -> Result { } } + // make sure all configs have been loaded before starting let config = AppConfig::get_config(CONFIG_FILE); let keymap = AppKeyMapping::get_config(KEYMAP_FILE); + lazy_static::initialize(&THEME_T); + lazy_static::initialize(&MIMETYPE_T); + lazy_static::initialize(&PREVIEW_T); + lazy_static::initialize(&HOME_DIR); + lazy_static::initialize(&USERNAME); + lazy_static::initialize(&HOSTNAME); let mut context = AppContext::new(config, args.clone()); { let mut backend: ui::AppBackend = ui::AppBackend::new()?; - run(&mut backend, &mut context, keymap)?; + run::run_loop(&mut backend, &mut context, keymap)?; } run_quit(&args, &context)?; Ok(context.quit.exit_code()) @@ -169,7 +175,7 @@ fn run_quit(args: &Args, context: &AppContext) -> Result<(), JoshutoError> { fn main() { let args = Args::from_args(); - match run_joshuto(args) { + match run_main(args) { Ok(exit_code) => process::exit(exit_code), Err(e) => { eprintln!("{}", e); diff --git a/src/run.rs b/src/run.rs index fd9c3ac..a2aa497 100644 --- a/src/run.rs +++ b/src/run.rs @@ -15,7 +15,7 @@ use crate::ui::views::TuiView; use termion::event::{Event, Key}; use tui::layout::Rect; -pub fn run( +pub fn run_loop( backend: &mut ui::AppBackend, context: &mut AppContext, keymap_t: AppKeyMapping, -- cgit v1.2.3