mirror of https://github.com/bobwen-dev/hunter
add some extra key binds
This commit is contained in:
parent
b9349d62e5
commit
f92eb544a7
|
@ -50,7 +50,7 @@ If it works on a system not mentioned here, please open an issue. Also feel free
|
||||||
|
|
||||||
## INSTALLATION:
|
## INSTALLATION:
|
||||||
|
|
||||||
Compiling hunter currently requires a nighty Rust compiler!
|
Compiling hunter currently requires a nightly Rust compiler!
|
||||||
The easiest way to get a nightly compiler is with [rustup](https://rustup.rs/). If you have rustup installed it will automatically download and use a version that is known to work when you run cargo.
|
The easiest way to get a nightly compiler is with [rustup](https://rustup.rs/). If you have rustup installed it will automatically download and use a version that is known to work when you run cargo.
|
||||||
|
|
||||||
### Install rustup
|
### Install rustup
|
||||||
|
@ -127,6 +127,7 @@ By default hunter uses vi-style keybindings. If you use a QWERTY-like keyboard l
|
||||||
| ------------------- | :--------------------------------- |
|
| ------------------- | :--------------------------------- |
|
||||||
| j/k (holy: n/p) | move down/up |
|
| j/k (holy: n/p) | move down/up |
|
||||||
| J/K (holy: N/P) | 5x move down/5x move up |
|
| J/K (holy: N/P) | 5x move down/5x move up |
|
||||||
|
| ]/[ | move down/up on left column |
|
||||||
| < | move to top |
|
| < | move to top |
|
||||||
| > | move to bottom |
|
| > | move to bottom |
|
||||||
| l/h (holy: f/b) | open/go back |
|
| l/h (holy: f/b) | open/go back |
|
||||||
|
|
|
@ -68,6 +68,10 @@ impl Coordinates {
|
||||||
self.size.xsize()
|
self.size.xsize()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn ysize_u(&self) -> usize {
|
||||||
|
(self.ysize() - 1) as usize
|
||||||
|
}
|
||||||
|
|
||||||
pub fn ysize(&self) -> u16 {
|
pub fn ysize(&self) -> u16 {
|
||||||
self.size.ysize()
|
self.size.ysize()
|
||||||
}
|
}
|
||||||
|
|
|
@ -420,6 +420,36 @@ impl FileBrowser {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn move_down_left_widget(&mut self) -> HResult<()> {
|
||||||
|
let left_files_pos = self.left_widget()?.get_selection();
|
||||||
|
|
||||||
|
let next_dir = self.get_left_files()?.get_files()
|
||||||
|
.iter()
|
||||||
|
.skip(left_files_pos + 1)
|
||||||
|
.find(|file| file.is_dir())
|
||||||
|
.cloned().cloned();
|
||||||
|
|
||||||
|
self.main_widget_goto(&next_dir?).log();
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn move_up_left_widget(&mut self) -> HResult<()> {
|
||||||
|
let left_files_pos = self.left_widget()?.get_selection();
|
||||||
|
let skip_files = self.get_left_files()?.len() - left_files_pos;
|
||||||
|
|
||||||
|
let next_dir = self.get_left_files()?.get_files()
|
||||||
|
.iter()
|
||||||
|
.rev()
|
||||||
|
.skip(skip_files)
|
||||||
|
.find(|file| file.is_dir())
|
||||||
|
.cloned().cloned();
|
||||||
|
|
||||||
|
self.main_widget_goto(&next_dir?).log();
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn open_bg(&mut self) -> HResult<()> {
|
pub fn open_bg(&mut self) -> HResult<()> {
|
||||||
let cwd = self.cwd()?;
|
let cwd = self.cwd()?;
|
||||||
let file = self.selected_file()?;
|
let file = self.selected_file()?;
|
||||||
|
@ -489,6 +519,13 @@ impl FileBrowser {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn left_widget_goto(&mut self, dir: &File) -> HResult<()> {
|
pub fn left_widget_goto(&mut self, dir: &File) -> HResult<()> {
|
||||||
|
// Check if we're in the correct directory already and return
|
||||||
|
// if we are
|
||||||
|
let left_dir = &self.left_widget()?.content.directory;
|
||||||
|
if self.left_widget().is_ok() && left_dir == dir {
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
let cache = self.fs_cache.clone();
|
let cache = self.fs_cache.clone();
|
||||||
let dir = dir.clone();
|
let dir = dir.clone();
|
||||||
|
|
||||||
|
@ -1210,6 +1247,8 @@ impl Widget for FileBrowser {
|
||||||
|
|
||||||
fn on_key(&mut self, key: Key) -> HResult<()> {
|
fn on_key(&mut self, key: Key) -> HResult<()> {
|
||||||
match key {
|
match key {
|
||||||
|
Key::Char(']') => self.move_down_left_widget()?,
|
||||||
|
Key::Char('[') => self.move_up_left_widget()?,
|
||||||
Key::Alt(' ') => self.external_select()?,
|
Key::Alt(' ') => self.external_select()?,
|
||||||
Key::Alt('/') => self.external_cd()?,
|
Key::Alt('/') => self.external_cd()?,
|
||||||
Key::Char('/') => { self.turbo_cd()?; },
|
Key::Char('/') => { self.turbo_cd()?; },
|
||||||
|
|
|
@ -71,6 +71,8 @@ impl Listable for ListView<Files> {
|
||||||
self.move_down();
|
self.move_down();
|
||||||
self.refresh()?;
|
self.refresh()?;
|
||||||
},
|
},
|
||||||
|
Key::PageUp => self.page_up(),
|
||||||
|
Key::PageDown => self.page_down(),
|
||||||
Key::Char('<') => self.move_top(),
|
Key::Char('<') => self.move_top(),
|
||||||
Key::Char('>') => self.move_bottom(),
|
Key::Char('>') => self.move_bottom(),
|
||||||
Key::Char('S') => { self.search_file().log(); }
|
Key::Char('S') => { self.search_file().log(); }
|
||||||
|
@ -164,6 +166,22 @@ where
|
||||||
self.set_selection(lines - 1);
|
self.set_selection(lines - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn page_up(&mut self) {
|
||||||
|
let ysize = self.get_coordinates().unwrap().ysize_u();
|
||||||
|
|
||||||
|
for _ in 0..ysize {
|
||||||
|
self.move_up();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn page_down(&mut self) {
|
||||||
|
let ysize = self.get_coordinates().unwrap().ysize_u();
|
||||||
|
|
||||||
|
for _ in 0..ysize {
|
||||||
|
self.move_down();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_selection(&self) -> usize {
|
pub fn get_selection(&self) -> usize {
|
||||||
self.selection
|
self.selection
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue