Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f8485c8

Browse files
author
Sebastian Thiel
committed
First half-baked version of deletion within traversal tree
No size handling for now
1 parent 1ce57a2 commit f8485c8

3 files changed

Lines changed: 33 additions & 5 deletions

File tree

src/interactive/app/handlers.rs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use crate::interactive::{
66
};
77
use dua::traverse::TreeIndex;
88
use itertools::Itertools;
9+
use petgraph::visit::Bfs;
910
use petgraph::Direction;
1011
use termion::event::Key;
1112
use tui::backend::Backend;
@@ -148,7 +149,30 @@ impl TerminalApp {
148149
}
149150
}
150151

151-
pub fn delete_entry(&mut self, _index: TreeIndex) -> Result<(), usize> {
152+
fn set_root(&mut self, root: TreeIndex) {
153+
self.state.root = root;
154+
self.state.entries = sorted_entries(&self.traversal.tree, root, self.state.sorting);
155+
}
156+
157+
pub fn delete_entry(&mut self, index: TreeIndex) -> Result<(), usize> {
158+
if let Some(_entry) = self.traversal.tree.node_weight(index) {
159+
let mut bfs = Bfs::new(&self.traversal.tree, index);
160+
while let Some(nx) = bfs.next(&self.traversal.tree) {
161+
self.traversal.tree.remove_node(nx);
162+
}
163+
self.state.entries =
164+
sorted_entries(&self.traversal.tree, self.state.root, self.state.sorting);
165+
if let None = self.traversal.tree.node_weight(self.state.root) {
166+
self.set_root(self.traversal.root_index);
167+
}
168+
if let None = self
169+
.state
170+
.selected
171+
.and_then(|selected| self.state.entries.iter().find(|e| e.index == selected))
172+
{
173+
self.state.selected = self.state.entries.get(0).map(|e| e.index);
174+
}
175+
}
152176
Ok(())
153177
}
154178

src/interactive/widgets/help.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ impl HelpPane {
146146
{
147147
hotkey("d/<space>", "remove the selected entry from the list", None);
148148
hotkey(
149-
"Ctrl + R",
149+
"Ctrl + r",
150150
"Permanently delete all marked entries without prompt!",
151151
Some("This operation cannot be undone!"),
152152
);

src/interactive/widgets/mark.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ impl MarkPane {
9292
pub fn key(mut self, key: Key) -> Option<(Self, Option<MarkMode>)> {
9393
let action = None;
9494
match key {
95-
Ctrl('R') => return self.prepare_deletion(),
95+
Ctrl('r') => return self.prepare_deletion(),
9696
Char('d') | Char(' ') => return self.remove_selected().map(|s| (s, action)),
9797
Ctrl('u') | PageUp => self.change_selection(CursorDirection::PageUp),
9898
Char('k') | Up => self.change_selection(CursorDirection::Up),
@@ -134,7 +134,11 @@ impl MarkPane {
134134
d.num_errors_during_deletion = num_errors;
135135
}
136136
}
137-
fn prepare_deletion(self) -> Option<(Self, Option<MarkMode>)> {
137+
fn prepare_deletion(mut self) -> Option<(Self, Option<MarkMode>)> {
138+
for entry in self.marked.values_mut() {
139+
entry.num_errors_during_deletion = 0;
140+
}
141+
self.selected = Some(0);
138142
Some((self, Some(MarkMode::Delete)))
139143
}
140144
fn remove_selected(mut self) -> Option<Self> {
@@ -314,7 +318,7 @@ impl MarkPane {
314318
Paragraph::new(
315319
[
316320
Text::Styled(
317-
" Ctrl + Shift + r".into(),
321+
" Ctrl + r".into(),
318322
Style {
319323
fg: Color::LightRed,
320324
modifier: default_style.modifier | Modifier::RAPID_BLINK,

0 commit comments

Comments
 (0)