summaryrefslogtreecommitdiffstats
path: root/src/interactive/widgets/mark.rs
diff options
context:
space:
mode:
authorSebastian Thiel <sthiel@thoughtworks.com>2019-06-06 20:34:57 +0530
committerSebastian Thiel <sthiel@thoughtworks.com>2019-06-06 20:34:57 +0530
commitbeed74aec250823aa01f33925f2a877414c5526c (patch)
treef403a01c7d5ca7966649344efc6278fc1fcadf4e /src/interactive/widgets/mark.rs
parentd319f0b3b293167b4dfef79fed25b305cd1309e1 (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/interactive/widgets/mark.rs')
-rw-r--r--src/interactive/widgets/mark.rs19
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(