Compare commits
No commits in common. "d101367e34d60e5a5961b1b1bd459d1c29356f6b" and "454b0e4b78b5b8ed16c8360e21659f706d6e9579" have entirely different histories.
d101367e34
...
454b0e4b78
|
@ -205,6 +205,7 @@ impl Directory {
|
||||||
let selected_subtree = self.subtree_indices(self.selection());
|
let selected_subtree = self.subtree_indices(self.selection());
|
||||||
let sibling_subtree = self.subtree_indices(index);
|
let sibling_subtree = self.subtree_indices(index);
|
||||||
|
|
||||||
|
let delta = if selected_subtree.len() < sibling_subtree.len() {
|
||||||
let select_len = selected_subtree.len();
|
let select_len = selected_subtree.len();
|
||||||
let sibling_len = sibling_subtree.len();
|
let sibling_len = sibling_subtree.len();
|
||||||
|
|
||||||
|
@ -217,38 +218,22 @@ impl Directory {
|
||||||
*dst = item;
|
*dst = item;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.selection += u16::try_from(sibling_len).unwrap_or(u16::MAX);
|
sibling_len
|
||||||
}
|
} else if selected_subtree.len() == sibling_subtree.len() {
|
||||||
|
let (selected, sibling) = self.dirs.split_at_mut(index);
|
||||||
|
|
||||||
fn move_up(&mut self) {
|
let len = selected.len();
|
||||||
let current_depth = self.selected().depth;
|
let lhs = &mut selected[len - selected_subtree.len() .. ];
|
||||||
|
let rhs = &mut sibling[0 .. sibling_subtree.len()];
|
||||||
|
|
||||||
let Some(index) = (0 .. self.selection())
|
lhs.swap_with_slice(rhs);
|
||||||
.rev()
|
|
||||||
.take_while(|&i| self.dirs[i].depth >= current_depth)
|
selected_subtree.len()
|
||||||
.filter(|&i| self.dirs[i].depth == current_depth)
|
} else {
|
||||||
.next()
|
todo!()
|
||||||
else {
|
|
||||||
return
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let selected_subtree = self.subtree_indices(self.selection());
|
self.selection += u16::try_from(delta).unwrap_or(u16::MAX);
|
||||||
let sibling_subtree = self.subtree_indices(index);
|
|
||||||
|
|
||||||
let select_len = selected_subtree.len();
|
|
||||||
let sibling_len = sibling_subtree.len();
|
|
||||||
|
|
||||||
let selected_copy = self.dirs[selected_subtree].to_owned();
|
|
||||||
let sibling_copy = self.dirs[sibling_subtree].to_owned();
|
|
||||||
let back_to_back = selected_copy.into_iter().chain(sibling_copy);
|
|
||||||
|
|
||||||
let full_range = index .. index+select_len+sibling_len;
|
|
||||||
for (dst, item) in self.dirs[full_range].iter_mut().zip(back_to_back) {
|
|
||||||
*dst = item;
|
|
||||||
}
|
|
||||||
|
|
||||||
self.selection -= u16::try_from(sibling_len).unwrap_or(u16::MAX);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn selected(&self) -> &Item {
|
fn selected(&self) -> &Item {
|
||||||
|
@ -347,9 +332,6 @@ impl Directory {
|
||||||
},
|
},
|
||||||
KeyCode::Down => {
|
KeyCode::Down => {
|
||||||
self.move_down();
|
self.move_down();
|
||||||
},
|
|
||||||
KeyCode::Up => {
|
|
||||||
self.move_up();
|
|
||||||
}
|
}
|
||||||
_ => (),
|
_ => (),
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue