Skip to content

Commit ebfbf13

Browse files
committed
Better shortcuts for logs filters
Now Ctrl-F will ask for identifier, empty identifier - exit
1 parent 15920df commit ebfbf13

1 file changed

Lines changed: 39 additions & 43 deletions

File tree

src/view/log_view.rs

Lines changed: 39 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -730,49 +730,54 @@ impl LogView {
730730
);
731731
};
732732

733-
let toggle_filter_mode = |siv: &mut Cursive| {
733+
let toggle_filter_mode_and_prompt = |siv: &mut Cursive| {
734734
siv.call_on_name("logs", |base: &mut LogViewBase| {
735-
base.filter_mode = !base.filter_mode;
736-
737-
if base.filter_mode && base.active_filter.is_none() {
738-
base.extract_identifiers();
739-
base.rebuild_content_with_highlights();
740-
} else {
735+
if base.filter_mode {
736+
base.filter_mode = false;
741737
base.active_filter = None;
742738
base.rebuild_content_normal();
739+
} else {
740+
base.filter_mode = true;
741+
base.extract_identifiers();
742+
base.rebuild_content_with_highlights();
743743
}
744744
});
745-
};
746745

747-
let show_filter_prompt = |siv: &mut Cursive| {
748-
let apply_filter = move |siv: &mut Cursive, text: &str| {
749-
let identifier = text.trim().to_string();
750-
siv.pop_layer();
746+
let should_show_prompt = siv
747+
.call_on_name("logs", |base: &mut LogViewBase| base.filter_mode)
748+
.unwrap_or(false);
751749

752-
if identifier.is_empty() {
753-
siv.call_on_name("logs", |base: &mut LogViewBase| {
754-
base.active_filter = None;
755-
base.apply_filter();
756-
});
757-
return;
758-
}
750+
if should_show_prompt {
751+
let apply_filter = move |siv: &mut Cursive, text: &str| {
752+
let identifier = text.trim().to_string();
753+
siv.pop_layer();
759754

760-
let filter_result = siv.call_on_name("logs", |base: &mut LogViewBase| {
761-
if let Some(filter_type) = base.filter_identifiers.get(&identifier) {
762-
base.filter_mode = false;
763-
base.active_filter = Some(filter_type.clone());
764-
base.apply_filter();
765-
Ok(())
766-
} else {
767-
Err(format!("Unknown identifier: {}", identifier))
755+
if identifier.is_empty() {
756+
siv.call_on_name("logs", |base: &mut LogViewBase| {
757+
base.filter_mode = false;
758+
base.active_filter = None;
759+
base.rebuild_content_normal();
760+
});
761+
return;
768762
}
769-
});
770763

771-
if let Some(Err(msg)) = filter_result {
772-
siv.add_layer(Dialog::info(msg));
773-
}
774-
};
775-
show_bottom_prompt(siv, "identifier:", apply_filter);
764+
let filter_result = siv.call_on_name("logs", |base: &mut LogViewBase| {
765+
if let Some(filter_type) = base.filter_identifiers.get(&identifier) {
766+
base.filter_mode = false;
767+
base.active_filter = Some(filter_type.clone());
768+
base.apply_filter();
769+
Ok(())
770+
} else {
771+
Err(format!("Unknown identifier: {}", identifier))
772+
}
773+
});
774+
775+
if let Some(Err(msg)) = filter_result {
776+
siv.add_layer(Dialog::info(msg));
777+
}
778+
};
779+
show_bottom_prompt(siv, "identifier:", apply_filter);
780+
}
776781
};
777782

778783
let v = OnEventView::new(v)
@@ -827,17 +832,8 @@ impl LogView {
827832
})
828833
.on_event_inner(Event::CtrlChar('f'), move |_, _| {
829834
return Some(EventResult::Consumed(Some(Callback::from_fn(
830-
toggle_filter_mode,
835+
toggle_filter_mode_and_prompt,
831836
))));
832-
})
833-
.on_event_inner('f', move |v, _| {
834-
let in_filter_mode = v.get_mut().filter_mode;
835-
if in_filter_mode {
836-
return Some(EventResult::Consumed(Some(Callback::from_fn(
837-
show_filter_prompt,
838-
))));
839-
}
840-
None
841837
});
842838

843839
let log_view = LogView { inner_view: v };

0 commit comments

Comments
 (0)