diff options
author | Canop <cano.petrole@gmail.com> | 2020-03-24 17:38:10 +0100 |
---|---|---|
committer | Canop <cano.petrole@gmail.com> | 2020-03-24 17:38:10 +0100 |
commit | 3bfb9f545206fa66b72c419d9307d78fe4b56673 (patch) | |
tree | deaac03a394aaddf128a0a0f839e42455764928b | |
parent | b8bc0b531098ee524d2900c7e5214da30bf6c78b (diff) |
right key open directory, left key gets back (when input is empty)
Fix #179
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | src/browser_states.rs | 18 | ||||
-rw-r--r-- | src/browser_verbs.rs | 13 | ||||
-rw-r--r-- | src/commands.rs | 10 |
4 files changed, 30 insertions, 12 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index bbe5aba..6741221 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ ### master +- right key open directory, left key gets back (when input is empty) - replace ~ in path arguments with user home dir - use $XDG_CONFIG_HOME/git/ignore when the normal core.excludesFile git setting is missing diff --git a/src/browser_states.rs b/src/browser_states.rs index 1181ee3..3dd0af3 100644 --- a/src/browser_states.rs +++ b/src/browser_states.rs @@ -166,6 +166,24 @@ impl BrowserState { } } + pub fn go_to_parent( + &mut self, + screen: &mut Screen, + ) -> AppStateCmdResult { + match &self.displayed_tree().selected_line().path.parent() { + Some(path) => AppStateCmdResult::from_optional_state( + BrowserState::new( + path.to_path_buf(), + self.displayed_tree().options.without_pattern(), + screen, + &Dam::unlimited(), + ), + Command::new(), + ), + None => AppStateCmdResult::DisplayError("no parent found".to_string()), + } + } + fn normal_status_message(&self, has_pattern: bool) -> Composite<'static> { let tree = self.displayed_tree(); if tree.selection == 0 { diff --git a/src/browser_verbs.rs b/src/browser_verbs.rs index 61d3f8f..291b6d3 100644 --- a/src/browser_verbs.rs +++ b/src/browser_verbs.rs @@ -89,18 +89,7 @@ impl VerbExecutor for BrowserState { } AppStateCmdResult::Keep } - ":parent" => match &self.displayed_tree().selected_line().path.parent() { - Some(path) => AppStateCmdResult::from_optional_state( - BrowserState::new( - path.to_path_buf(), - self.displayed_tree().options.without_pattern(), - screen, - &Dam::unlimited(), - ), - Command::new(), - ), - None => AppStateCmdResult::DisplayError("no parent found".to_string()), - }, + ":parent" => self.go_to_parent(screen), ":print_path" => { external::print_path(&self.displayed_tree().selected_line().target(), con)? } diff --git a/src/commands.rs b/src/commands.rs index b7dd44f..b2b8675 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -244,6 +244,16 @@ impl Command { return; } + if *key == keys::LEFT && self.raw.is_empty() { + self.set_action(Action::Back); + return; + } + + if *key == keys::RIGHT && self.raw.is_empty() { + self.set_action(Action::OpenSelection); + return; + } + if *key == keys::BACK_TAB { // should probably be a normal verb instead of an action with a special // handling here |