From 1c5df6fce0bbee226582d1cf89f6a2f83e6dfae3 Mon Sep 17 00:00:00 2001 From: blargg Date: Thu, 5 Mar 2020 12:37:33 -0600 Subject: [PATCH] Help menu --- config.tar.gz | Bin 3957 -> 3992 bytes src/file_browser.rs | 34 +++++++++++++++- src/keybind.rs | 96 ++++++++++++++++++++++++++++++++++++++------ 3 files changed, 116 insertions(+), 14 deletions(-) diff --git a/config.tar.gz b/config.tar.gz index f95e07dde1ca8deb1a201fdb24840f3e11446fe9..761e080ad94e93c56315cbd9a9084e563d38760f 100644 GIT binary patch literal 3992 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 literal 3957 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 P|2g#kUjDxJ0H6Q>2W=-n diff --git a/src/file_browser.rs b/src/file_browser.rs index 1ff263a..3550db0 100644 --- a/src/file_browser.rs +++ b/src/file_browser.rs @@ -928,6 +928,37 @@ impl FileBrowser { .log(); } + pub fn help_menu(&mut self) -> HResult<()> { + self.core.get_sender().send(Events::InputEnabled(false))?; + self.preview_widget().map(|preview| preview.cancel_animation()).log(); + self.core.screen.suspend().log(); + + let pager_result = (|| { + let pager = std::env::var("PAGER").unwrap_or("less".into()); + let mut pager_proc = std::process::Command::new(pager.as_str()) + .stdin(std::process::Stdio::piped()) + .spawn()?; + let pager_stdin = pager_proc.stdin.as_mut().unwrap(); + writeln!(pager_stdin, "hunter version {}", env!("CARGO_PKG_VERSION"))?; + writeln!(pager_stdin, "github: https://github.com/rabite0/hunter")?; + writeln!(pager_stdin, "irc: #hunter @ Freenode https://webchat.freenode.net/#hunter")?; + writeln!(pager_stdin)?; + write!(pager_stdin, "{}", self.core.config().keybinds)?; + pager_proc.wait() + })(); + + self.core.screen.activate().log(); + self.core.get_sender().send(Events::InputEnabled(true))?; + + match pager_result { + Err(err) => + self.core.show_status(&format!("Couldn't open help menu: {}", err)).log(), + Ok(_) => {} + } + + Ok(()) + } + pub fn quit_with_dir(&self) -> HResult<()> { let cwd = self.cwd()?.clone().path; let selected_file = self.selected_file()?; @@ -1631,7 +1662,8 @@ impl Acting for FileBrowser { ToggleColumns => self.toggle_colums(), ZoomPreview => self.zoom_preview(), // Tab implementation needs to call exec_cmd because ALL files are needed - ExecCmd => Err(HError::FileBrowserNeedTabFiles)? + ExecCmd => Err(HError::FileBrowserNeedTabFiles)?, + HelpMenu => self.help_menu()?, } Ok(()) } diff --git a/src/keybind.rs b/src/keybind.rs index 64a725a..e14c66f 100644 --- a/src/keybind.rs +++ b/src/keybind.rs @@ -119,6 +119,74 @@ impl Default for KeyBinds { } } +impl Display for KeyBinds { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + + writeln!(f, "[movement]")?; + display_group(f, &self.movement)?; + writeln!(f)?; + + writeln!(f, "[filebrowser]")?; + display_group(f, &self.filebrowser)?; + writeln!(f)?; + + writeln!(f, "[filelist]")?; + display_group(f, &self.filelist)?; + writeln!(f)?; + + writeln!(f, "[tab]")?; + display_group(f, &self.tab)?; + writeln!(f)?; + + writeln!(f, "[media]")?; + display_group(f, &self.media)?; + writeln!(f)?; + + writeln!(f, "[bookmark]")?; + display_group(f, &self.bookmark)?; + writeln!(f)?; + + writeln!(f, "[process]")?; + display_group(f, &self.process)?; + writeln!(f)?; + + writeln!(f, "[minibuffer]")?; + display_group(f, &self.minibuffer)?; + writeln!(f)?; + + writeln!(f, "[fold]")?; + display_group(f, &self.fold)?; + writeln!(f)?; + + writeln!(f, "[log]")?; + display_group(f, &self.log)?; + writeln!(f)?; + + writeln!(f, "[quickaction]")?; + display_group(f, &self.quickaction)?; + Ok(()) + } +} + +fn display_group(f: &mut std::fmt::Formatter<'_>, bindings: &Bindings) -> std::fmt::Result +where + A: Display + Ord +{ + let mut by_action = std::collections::BTreeMap::new(); + for (key, action) in bindings.0.iter() { + by_action.entry(action).or_insert(vec![]).push(key); + } + + for (action, keys) in by_action { + let key_str = keys + .into_iter() + .map(|k| k.to_string()) + .collect::>() + .join(", "); + writeln!(f, "{} = {}", action, key_str)?; + } + Ok(()) +} impl KeyBinds { pub fn load() -> HResult { @@ -448,7 +516,7 @@ where -#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug)] +#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum Movement { Up(usize), Down(usize), @@ -462,7 +530,7 @@ pub enum Movement { -#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug)] +#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum FileBrowserAction { LeftColumnDown, LeftColumnUp, @@ -482,12 +550,13 @@ pub enum FileBrowserAction { RunSubshell, ToggleColumns, ZoomPreview, - ExecCmd + ExecCmd, + HelpMenu, } -#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug)] +#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum FileListAction { Search, SearchNext, @@ -508,7 +577,7 @@ pub enum FileListAction { -#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug)] +#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum TabAction { NewTab, CloseTab, @@ -519,7 +588,7 @@ pub enum TabAction { -#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug)] +#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum MediaAction { TogglePause, ToggleMute, @@ -529,7 +598,7 @@ pub enum MediaAction { -#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug)] +#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum BookmarkAction { GotoLastCwd, Goto(char), @@ -538,7 +607,7 @@ pub enum BookmarkAction { -#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug)] +#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum ProcessAction { Close, Remove, @@ -554,7 +623,7 @@ pub enum ProcessAction { -#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug)] +#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum MiniBufferAction { InsertChar(char), InsertTab(usize), @@ -573,17 +642,17 @@ pub enum MiniBufferAction { CursorToEnd } -#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug)] +#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum FoldAction { ToggleFold } -#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug)] +#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum LogAction { Close } -#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug)] +#[derive(EnumString, EnumIter, Copy, Clone, Display, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum QuickActionAction { Close, SelectOrRun(char) @@ -688,7 +757,8 @@ impl Default for Bindings { RunSubshell => Char('z'), ToggleColumns => Char('c'), ZoomPreview => Char('C'), - ExecCmd => Char('!') + ExecCmd => Char('!'), + HelpMenu => Char('H'), }; filebrowser.insert(key, action.as_default());