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

Skip to content

Commit 1544e8d

Browse files
committed
feat: show and hide mtime and item count columns with 'M' and 'C' respectively
1 parent 1812227 commit 1544e8d

6 files changed

Lines changed: 40 additions & 11 deletions

File tree

src/interactive/app/eventloop.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,10 @@ impl AppState {
289289
}
290290
Char('s') => self.cycle_sorting(&tree_view),
291291
Char('m') => self.cycle_mtime_sorting(&tree_view),
292+
Char('M') => self.toggle_mtime_column(),
292293
Char('c') => self.cycle_count_sorting(&tree_view),
293-
Char('g') => display.byte_vis.cycle(),
294+
Char('C') => self.toggle_count_column(),
295+
Char('g') | Char('S') => display.byte_vis.cycle(),
294296
Char('d') => self.mark_entry(
295297
CursorMode::Advance,
296298
MarkEntryMode::Toggle,

src/interactive/app/handlers.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::interactive::{
22
app::tree_view::TreeView,
3-
widgets::{GlobPane, HelpPane, MainWindow, MarkMode, MarkPane},
3+
widgets::{Column, GlobPane, HelpPane, MainWindow, MarkMode, MarkPane},
44
DisplayOptions, EntryDataBundle,
55
};
66
use crosstermion::input::Key;
@@ -135,6 +135,22 @@ impl AppState {
135135
self.entries = tree_view.sorted_entries(self.navigation().view_root, self.sorting);
136136
}
137137

138+
pub fn toggle_mtime_column(&mut self) {
139+
self.toggle_column(Column::MTime);
140+
}
141+
142+
pub fn toggle_count_column(&mut self) {
143+
self.toggle_column(Column::Count);
144+
}
145+
146+
fn toggle_column(&mut self, column: Column) {
147+
if self.show_columns.contains(&column) {
148+
self.show_columns.remove(&column);
149+
} else {
150+
self.show_columns.insert(column);
151+
}
152+
}
153+
138154
pub fn toggle_glob_search(&mut self, window: &mut MainWindow) {
139155
self.focussed = match self.focussed {
140156
Main | Mark | Help => {

src/interactive/app/state.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
use std::collections::HashSet;
2+
13
use dua::traverse::BackgroundTraversal;
24

5+
use crate::interactive::widgets::Column;
6+
37
use super::{navigation::Navigation, EntryDataBundle, SortMode};
48

59
#[derive(Default, Copy, Clone, PartialEq)]
@@ -24,6 +28,7 @@ pub struct AppState {
2428
pub glob_navigation: Option<Navigation>,
2529
pub entries: Vec<EntryDataBundle>,
2630
pub sorting: SortMode,
31+
pub show_columns: HashSet<Column>,
2732
pub message: Option<String>,
2833
pub focussed: FocussedPane,
2934
pub received_events: bool,

src/interactive/widgets/entries.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use chrono::DateTime;
77
use dua::traverse::TreeIndex;
88
use itertools::Itertools;
99
use std::borrow::{Borrow, Cow};
10+
use std::collections::HashSet;
1011
use std::time::SystemTime;
1112
use tui::{
1213
buffer::Buffer,
@@ -33,6 +34,7 @@ pub struct EntriesProps<'a> {
3334
pub border_style: Style,
3435
pub is_focussed: bool,
3536
pub sort_mode: SortMode,
37+
pub show_columns: &'a HashSet<Column>,
3638
}
3739

3840
#[derive(Default)]
@@ -56,6 +58,7 @@ impl Entries {
5658
border_style,
5759
is_focussed,
5860
sort_mode,
61+
show_columns,
5962
} = props.borrow();
6063
let list = &mut self.list;
6164

@@ -87,7 +90,7 @@ impl Entries {
8790
let percentage_style = percentage_style(fraction, text_style);
8891

8992
let mut columns = Vec::new();
90-
if show_mtime_column(sort_mode) {
93+
if show_mtime_column(sort_mode, show_columns) {
9194
columns.push(mtime_column(
9295
bundle.mtime,
9396
column_style(Column::MTime, *sort_mode, text_style),
@@ -99,7 +102,7 @@ impl Entries {
99102
column_style(Column::Bytes, *sort_mode, text_style),
100103
));
101104
columns.push(percentage_column(*display, fraction, percentage_style));
102-
if show_count_column(sort_mode) {
105+
if show_count_column(sort_mode, show_columns) {
103106
columns.push(count_column(
104107
bundle.entry_count,
105108
column_style(Column::Count, *sort_mode, text_style),
@@ -323,8 +326,8 @@ fn bytes_column(display: DisplayOptions, entry_size: u128, style: Style) -> Span
323326
)
324327
}
325328

326-
#[derive(PartialEq)]
327-
enum Column {
329+
#[derive(PartialEq, Eq, Hash)]
330+
pub enum Column {
328331
Bytes,
329332
MTime,
330333
Count,
@@ -344,18 +347,18 @@ fn column_style(column: Column, sort_mode: SortMode, style: Style) -> Style {
344347
}
345348
}
346349

347-
fn show_mtime_column(sort_mode: &SortMode) -> bool {
350+
fn show_mtime_column(sort_mode: &SortMode, show_columns: &HashSet<Column>) -> bool {
348351
matches!(
349352
sort_mode,
350353
SortMode::MTimeAscending | SortMode::MTimeDescending
351-
)
354+
) || show_columns.contains(&Column::MTime)
352355
}
353356

354-
fn show_count_column(sort_mode: &SortMode) -> bool {
357+
fn show_count_column(sort_mode: &SortMode, show_columns: &HashSet<Column>) -> bool {
355358
matches!(
356359
sort_mode,
357360
SortMode::CountAscending | SortMode::CountDescending
358-
)
361+
) || show_columns.contains(&Column::Count)
359362
}
360363

361364
/// Note that this implementation isn't correct as `width` is the amount of blocks to display,

src/interactive/widgets/help.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,11 @@ impl HelpPane {
149149
"Toggle sort by modified time descending/ascending.",
150150
None,
151151
);
152+
hotkey("M", "Show/hide modified time.", None);
152153
hotkey("c", "Toggle sort by items descending/ascending.", None);
154+
hotkey("C", "Show/hide item count.", None);
153155
hotkey(
154-
"g",
156+
"g/S",
155157
"Cycle through percentage display and bar options.",
156158
None,
157159
);

src/interactive/widgets/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ impl MainWindow {
111111
border_style: entries_style,
112112
is_focussed: matches!(state.focussed, Main),
113113
sort_mode: state.sorting,
114+
show_columns: &state.show_columns,
114115
};
115116
self.entries_pane
116117
.render(props, entries_area, terminal.current_buffer_mut());

0 commit comments

Comments
 (0)