summaryrefslogtreecommitdiffstats
path: root/src/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/util')
-rw-r--r--src/util/input.rs47
-rw-r--r--src/util/keyparse.rs15
-rw-r--r--src/util/sort.rs4
3 files changed, 50 insertions, 16 deletions
diff --git a/src/util/input.rs b/src/util/input.rs
index 48e416c..8e00789 100644
--- a/src/util/input.rs
+++ b/src/util/input.rs
@@ -1,12 +1,15 @@
-use std::collections::hash_map::Entry;
use std::io;
use std::path;
use signal_hook::consts::signal;
-use termion::event::{MouseButton, MouseEvent};
+use termion::event::{Event, Key, MouseButton, MouseEvent};
use tui::layout::{Constraint, Direction, Layout};
+<<<<<<< HEAD
+use crate::commands::{cursor_move, parent_cursor_move, AppExecute, CommandKeybind, KeyCommand};
+=======
use crate::commands::{cursor_move, parent_cursor_move, AppExecute, KeyCommand};
+>>>>>>> main
use crate::config::AppKeyMapping;
use crate::context::AppContext;
use crate::event::AppEvent;
@@ -15,8 +18,44 @@ use crate::history::DirectoryHistory;
use crate::io::{FileOp, IoWorkerProgress};
use crate::preview::preview_file::FilePreview;
use crate::ui;
+use crate::ui::views::TuiCommandMenu;
use crate::util::format;
+pub fn get_input_while_composite<'a>(
+ backend: &mut ui::TuiBackend,
+ context: &mut AppContext,
+ keymap: &'a AppKeyMapping,
+) -> Option<&'a KeyCommand> {
+ let mut keymap = keymap;
+
+ context.flush_event();
+
+ loop {
+ backend.render(TuiCommandMenu::new(context, keymap));
+
+ if let Ok(event) = context.poll_event() {
+ match event {
+ AppEvent::Termion(event) => {
+ match event {
+ Event::Key(Key::Esc) => return None,
+ event => match keymap.as_ref().get(&event) {
+ Some(CommandKeybind::SimpleKeybind(s)) => {
+ return Some(s);
+ }
+ Some(CommandKeybind::CompositeKeybind(m)) => {
+ keymap = m;
+ }
+ None => return None,
+ },
+ }
+ context.flush_event();
+ }
+ event => process_noninteractive(event, context),
+ }
+ }
+ }
+}
+
pub fn process_noninteractive(event: AppEvent, context: &mut AppContext) {
match event {
AppEvent::IoWorkerProgress(res) => process_worker_progress(context, res),
@@ -67,6 +106,10 @@ pub fn process_finished_worker(context: &mut AppContext, res: std::io::Result<Io
context.message_queue_mut().push_error(msg);
}
}
+
+ if !context.worker_context_ref().is_busy() && !context.worker_context_ref().is_empty() {
+ context.worker_context_mut().start_next_job();
+ }
}
pub fn process_dir_preview(context: &mut AppContext, dirlist: JoshutoDirList) {
diff --git a/src/util/keyparse.rs b/src/util/keyparse.rs
index e850cc2..fb39628 100644
--- a/src/util/keyparse.rs
+++ b/src/util/keyparse.rs
@@ -50,24 +50,15 @@ pub fn str_to_key(s: &str) -> Option<Key> {
if s.starts_with("ctrl+") {
let ch = s.chars().nth("ctrl+".len());
- let key = match ch {
- Some(ch) => Some(Key::Ctrl(ch)),
- None => None,
- };
+ let key = ch.map(Key::Ctrl);
return key;
} else if s.starts_with("alt+") {
let ch = s.chars().nth("alt+".len());
- let key = match ch {
- Some(ch) => Some(Key::Alt(ch)),
- None => None,
- };
+ let key = ch.map(Key::Alt);
return key;
} else if s.len() == 1 {
let ch = s.chars().next();
- let key = match ch {
- Some(ch) => Some(Key::Char(ch)),
- None => None,
- };
+ let key = ch.map(Key::Char);
return key;
}
None
diff --git a/src/util/sort.rs b/src/util/sort.rs
index 4f9f931..b85de49 100644
--- a/src/util/sort.rs
+++ b/src/util/sort.rs
@@ -162,7 +162,7 @@ fn mtime_sort(file1: &JoshutoDirEntry, file2: &JoshutoDirEntry) -> cmp::Ordering
let f2_mtime: time::SystemTime = f2_meta.modified()?;
Ok(f1_mtime.cmp(&f2_mtime))
}
- compare(&file1, &file2).unwrap_or(cmp::Ordering::Equal)
+ compare(file1, file2).unwrap_or(cmp::Ordering::Equal)
}
fn size_sort(file1: &JoshutoDirEntry, file2: &JoshutoDirEntry) -> cmp::Ordering {
@@ -183,7 +183,7 @@ fn lexical_sort(
let f1_name = f1.file_name();
let f2_name = f2.file_name();
if sort_option.case_sensitive {
- f1_name.cmp(&f2_name)
+ f1_name.cmp(f2_name)
} else {
let f1_name = f1_name.to_lowercase();
let f2_name = f2_name.to_lowercase();