Add a hidden column for the global search line contents

We could expand on this in the future to have different preview modes
that you can toggle between with C-t. Currently that binding just hides
the preview but it could switch between different preview modes and in
one mode hide the path and just show the line contents.
pull/9647/head
Michael Davis 8 months ago
parent 7b1131adf6
commit 6492f17e7d
No known key found for this signature in database

@ -2243,15 +2243,13 @@ fn global_search(cx: &mut Context) {
path: PathBuf, path: PathBuf,
/// 0 indexed lines /// 0 indexed lines
line_num: usize, line_num: usize,
line_content: String,
} }
impl FileResult { impl FileResult {
fn new(path: &Path, line_num: usize, line_content: String) -> Self { fn new(path: &Path, line_num: usize) -> Self {
Self { Self {
path: path.to_path_buf(), path: path.to_path_buf(),
line_num, line_num,
line_content,
} }
} }
} }
@ -2272,10 +2270,7 @@ fn global_search(cx: &mut Context) {
let path = helix_stdx::path::get_relative_path(&item.path); let path = helix_stdx::path::get_relative_path(&item.path);
format!("{}:{}", path.to_string_lossy(), item.line_num + 1).into() format!("{}:{}", path.to_string_lossy(), item.line_num + 1).into()
}), }),
PickerColumn::new("contents", |item: &FileResult, _| { PickerColumn::hidden("contents"),
item.line_content.as_str().into()
})
.without_filtering(),
]; ];
let get_files = |query: &str, let get_files = |query: &str,
@ -2355,13 +2350,9 @@ fn global_search(cx: &mut Context) {
}; };
let mut stop = false; let mut stop = false;
let sink = sinks::UTF8(|line_num, line_content| { let sink = sinks::UTF8(|line_num, _line_content| {
stop = injector stop = injector
.push(FileResult::new( .push(FileResult::new(entry.path(), line_num as usize - 1))
entry.path(),
line_num as usize - 1,
line_content.to_string(),
))
.is_err(); .is_err();
Ok(!stop) Ok(!stop)

@ -191,6 +191,7 @@ pub struct Column<T, D> {
/// `DynamicPicker` uses this so that the dynamic column (for example regex in /// `DynamicPicker` uses this so that the dynamic column (for example regex in
/// global search) is not used for filtering twice. /// global search) is not used for filtering twice.
filter: bool, filter: bool,
hidden: bool,
} }
impl<T, D> Column<T, D> { impl<T, D> Column<T, D> {
@ -199,6 +200,19 @@ impl<T, D> Column<T, D> {
name: name.into(), name: name.into(),
format, format,
filter: true, filter: true,
hidden: false,
}
}
/// A column which does not display any contents
pub fn hidden(name: impl Into<Arc<str>>) -> Self {
let format = |_: &T, _: &D| unreachable!();
Self {
name: name.into(),
format,
filter: false,
hidden: true,
} }
} }
@ -677,6 +691,10 @@ impl<T: 'static + Send + Sync, D: 'static + Send + Sync> Picker<T, D> {
let mut matcher_index = 0; let mut matcher_index = 0;
Row::new(self.columns.iter().map(|column| { Row::new(self.columns.iter().map(|column| {
if column.hidden {
return Cell::default();
}
let Some(Constraint::Length(max_width)) = widths.next() else { let Some(Constraint::Length(max_width)) = widths.next() else {
unreachable!(); unreachable!();
}; };
@ -757,7 +775,11 @@ impl<T: 'static + Send + Sync, D: 'static + Send + Sync> Picker<T, D> {
let header_style = cx.editor.theme.get("ui.picker.header"); let header_style = cx.editor.theme.get("ui.picker.header");
table = table.header(Row::new(self.columns.iter().map(|column| { table = table.header(Row::new(self.columns.iter().map(|column| {
if column.hidden {
Cell::default()
} else {
Cell::from(Span::styled(Cow::from(&*column.name), header_style)) Cell::from(Span::styled(Cow::from(&*column.name), header_style))
}
}))); })));
} }

Loading…
Cancel
Save