on master help sign in
support toggling pickers' preview panel (#3021)

* support toggling pickers' preview panel * add doc for toggling preview

commit2a8d38c27bce34c9b6fa95a2fb063fe097e220d4 authorBob <QiBaobin@users.noreply.github.com> dateMon 18 Jul 2022, 09:11 (4 years ago) parentdbf68e0
2 files changed+12−1
book/src/keymap.md+1 helix-term/src/ui/picker.rs+11−1
book/src/keymap.md+1
@@ -352,6 +352,7 @@ Keys to use within picker. Remapping currently not supported.
352352| `Enter` | Open selected |
353353| `Ctrl-s` | Open horizontally |
354354| `Ctrl-v` | Open vertically |
355+| `Ctrl-t` | Toggle preview |
355356| `Escape`, `Ctrl-c` | Close picker |
356357
357358# Prompt
helix-term/src/ui/picker.rs+11−1
@@ -173,7 +173,7 @@ impl<T: Item + 'static> Component for FilePicker<T> {
173173 // | | | |
174174 // +---------+ +---------+
175175
176− let render_preview = area.width > MIN_AREA_WIDTH_FOR_PREVIEW;
176+ let render_preview = self.picker.show_preview && area.width > MIN_AREA_WIDTH_FOR_PREVIEW;
177177 // -- Render the frame:
178178 // clear area
179179 let background = cx.editor.theme.get("ui.background");
@@ -300,6 +300,8 @@ pub struct Picker<T: Item> {
300300 previous_pattern: String,
301301 /// Whether to truncate the start (default true)
302302 pub truncate_start: bool,
303+ /// Whether to show the preview panel (default true)
304+ show_preview: bool,
303305
304306 callback_fn: Box<dyn Fn(&mut Context, &T, Action)>,
305307}
@@ -327,6 +329,7 @@ impl<T: Item> Picker<T> {
327329 prompt,
328330 previous_pattern: String::new(),
329331 truncate_start: true,
332+ show_preview: true,
330333 callback_fn: Box::new(callback_fn),
331334 completion_height: 0,
332335 };
@@ -470,6 +473,10 @@ impl<T: Item> Picker<T> {
470473 self.filters.sort_unstable(); // used for binary search later
471474 self.prompt.clear(cx);
472475 }
476+
477+ pub fn toggle_preview(&mut self) {
478+ self.show_preview = !self.show_preview;
479+ }
473480}
474481
475482// process:
@@ -538,6 +545,9 @@ impl<T: Item + 'static> Component for Picker<T> {
538545 ctrl!(' ') => {
539546 self.save_filter(cx);
540547 }
548+ ctrl!('t') => {
549+ self.toggle_preview();
550+ }
541551 _ => {
542552 if let EventResult::Consumed(_) = self.prompt.handle_event(event, cx) {
543553 // TODO: recalculate only if pattern changed