diff options
author | Sebastian Thiel <sthiel@thoughtworks.com> | 2019-06-06 20:34:57 +0530 |
---|---|---|
committer | Sebastian Thiel <sthiel@thoughtworks.com> | 2019-06-06 20:34:57 +0530 |
commit | beed74aec250823aa01f33925f2a877414c5526c (patch) | |
tree | f403a01c7d5ca7966649344efc6278fc1fcadf4e /src | |
parent | d319f0b3b293167b4dfef79fed25b305cd1309e1 (diff) |
Simplify mark selection by making it based on position in list
And not on node index, which plays much less of a role there, if any
Diffstat (limited to 'src')
-rw-r--r-- | src/interactive/widgets/mark.rs | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/src/interactive/widgets/mark.rs b/src/interactive/widgets/mark.rs index d600b34..67596bd 100644 --- a/src/interactive/widgets/mark.rs +++ b/src/interactive/widgets/mark.rs @@ -1,7 +1,6 @@ use crate::interactive::{widgets::COLOR_MARKED_LIGHT, CursorDirection, EntryMark, EntryMarkMap}; use dua::path_of; use dua::traverse::{Tree, TreeIndex}; -use itertools::Itertools; use std::borrow::Borrow; use termion::{event::Key, event::Key::*}; use tui::{ @@ -16,7 +15,7 @@ use tui_react::{List, ListProps}; #[derive(Default)] pub struct MarkPane { - selected: Option<TreeIndex>, + selected: Option<usize>, marked: EntryMarkMap, list: List, } @@ -71,18 +70,12 @@ impl MarkPane { .borders(Borders::ALL); let entry_in_view = self .selected - .and_then(|selected| { - marked - .keys() - .find_position(|&&index| index == selected) - .map(|(pos, _)| pos) - }) - .or_else(|| marked.keys().enumerate().last().map(|(pos, _)| pos)); - - let selected = self.selected.clone(); - let entries = marked.iter().map(|(idx, v)| { + .map(|selected| selected) + .or(Some(marked.len().saturating_sub(1))); + let selected = self.selected; + let entries = marked.values().enumerate().map(|(idx, v)| { let modifier = match selected { - Some(selected) if *idx == selected => Modifier::BOLD, + Some(selected) if idx == selected => Modifier::BOLD, _ => Modifier::empty(), }; let name = Text::Styled( |