summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorqkzk <qu3nt1n@gmail.com>2023-01-14 13:47:17 +0100
committerqkzk <qu3nt1n@gmail.com>2023-01-14 13:47:17 +0100
commit5247d914a1d66e749f79453380fb6a826a94e48a (patch)
tree83ca60c84ab64680dc6b1bd58ce4bdd4c59b80a9 /src
parente7d9e34e6dcbc33f8987fe5bf28486069fbf542c (diff)
tree: left click select correct row
Diffstat (limited to 'src')
-rw-r--r--src/event_dispatch.rs2
-rw-r--r--src/event_exec.rs22
-rw-r--r--src/tree.rs23
3 files changed, 41 insertions, 6 deletions
diff --git a/src/event_dispatch.rs b/src/event_dispatch.rs
index 6da2d16..7f41410 100644
--- a/src/event_dispatch.rs
+++ b/src/event_dispatch.rs
@@ -37,7 +37,7 @@ impl EventDispatcher {
}
Event::Key(Key::SingleClick(MouseButton::Left, row, col)) => {
EventExec::event_select_pane(status, col)?;
- EventExec::event_select_row(status.selected(), row)
+ EventExec::event_select_row(status, row)
}
Event::Key(Key::SingleClick(MouseButton::Right, row, col))
| Event::Key(Key::DoubleClick(MouseButton::Left, row, col)) => {
diff --git a/src/event_exec.rs b/src/event_exec.rs
index e9d02e9..4dcc433 100644
--- a/src/event_exec.rs
+++ b/src/event_exec.rs
@@ -440,11 +440,23 @@ impl EventExec {
}
/// Select a given row, if there's something in it.
- pub fn event_select_row(tab: &mut Tab, row: u16) -> FmResult<()> {
- if let Mode::Normal = tab.mode {
- let index = Self::row_to_index(row);
- tab.path_content.select_index(index);
- tab.window.scroll_to(index);
+ pub fn event_select_row(status: &mut Status, row: u16) -> FmResult<()> {
+ let colors = &status.config_colors.clone();
+ let tab = status.selected();
+ match tab.mode {
+ Mode::Normal => {
+ let index = Self::row_to_index(row);
+ tab.path_content.select_index(index);
+ tab.window.scroll_to(index);
+ }
+ Mode::Tree => {
+ let index = Self::row_to_index(row) + 1;
+ tab.directory.tree.unselect_children();
+ tab.directory.tree.position = tab.directory.tree.position_from_index(index);
+ tab.directory.tree.select_from_position()?;
+ tab.directory.make_preview(colors)
+ }
+ _ => (),
}
Ok(())
}
diff --git a/src/tree.rs b/src/tree.rs
index 49d55e8..9bb2100 100644
--- a/src/tree.rs
+++ b/src/tree.rs
@@ -439,6 +439,29 @@ impl Tree {
}
(tree, reached_depth, last_cord)
}
+
+ pub fn position_from_index(&self, index: usize) -> Vec<usize> {
+ let mut stack = vec![];
+ stack.push(self);
+
+ let mut visited = self;
+ let mut counter = 0;
+ while !stack.is_empty() {
+ if let Some(current) = stack.pop() {
+ counter += 1;
+ visited = current;
+ if counter == index {
+ break;
+ }
+ if !current.node.folded {
+ for leaf in current.leaves.iter() {
+ stack.push(leaf);
+ }
+ }
+ }
+ }
+ visited.node.position.clone()
+ }
}
fn first_prefix(mut prefix: String) -> String {