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.
This commit is contained in:
parent
7b1131adf6
commit
6492f17e7d
2 changed files with 27 additions and 14 deletions
|
@ -2243,15 +2243,13 @@ fn global_search(cx: &mut Context) {
|
|||
path: PathBuf,
|
||||
/// 0 indexed lines
|
||||
line_num: usize,
|
||||
line_content: String,
|
||||
}
|
||||
|
||||
impl FileResult {
|
||||
fn new(path: &Path, line_num: usize, line_content: String) -> Self {
|
||||
fn new(path: &Path, line_num: usize) -> Self {
|
||||
Self {
|
||||
path: path.to_path_buf(),
|
||||
line_num,
|
||||
line_content,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2272,10 +2270,7 @@ fn global_search(cx: &mut Context) {
|
|||
let path = helix_stdx::path::get_relative_path(&item.path);
|
||||
format!("{}:{}", path.to_string_lossy(), item.line_num + 1).into()
|
||||
}),
|
||||
PickerColumn::new("contents", |item: &FileResult, _| {
|
||||
item.line_content.as_str().into()
|
||||
})
|
||||
.without_filtering(),
|
||||
PickerColumn::hidden("contents"),
|
||||
];
|
||||
|
||||
let get_files = |query: &str,
|
||||
|
@ -2355,13 +2350,9 @@ fn global_search(cx: &mut Context) {
|
|||
};
|
||||
|
||||
let mut stop = false;
|
||||
let sink = sinks::UTF8(|line_num, line_content| {
|
||||
let sink = sinks::UTF8(|line_num, _line_content| {
|
||||
stop = injector
|
||||
.push(FileResult::new(
|
||||
entry.path(),
|
||||
line_num as usize - 1,
|
||||
line_content.to_string(),
|
||||
))
|
||||
.push(FileResult::new(entry.path(), line_num as usize - 1))
|
||||
.is_err();
|
||||
|
||||
Ok(!stop)
|
||||
|
|
|
@ -191,6 +191,7 @@ pub struct Column<T, D> {
|
|||
/// `DynamicPicker` uses this so that the dynamic column (for example regex in
|
||||
/// global search) is not used for filtering twice.
|
||||
filter: bool,
|
||||
hidden: bool,
|
||||
}
|
||||
|
||||
impl<T, D> Column<T, D> {
|
||||
|
@ -199,6 +200,19 @@ impl<T, D> Column<T, D> {
|
|||
name: name.into(),
|
||||
format,
|
||||
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;
|
||||
|
||||
Row::new(self.columns.iter().map(|column| {
|
||||
if column.hidden {
|
||||
return Cell::default();
|
||||
}
|
||||
|
||||
let Some(Constraint::Length(max_width)) = widths.next() else {
|
||||
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");
|
||||
|
||||
table = table.header(Row::new(self.columns.iter().map(|column| {
|
||||
Cell::from(Span::styled(Cow::from(&*column.name), header_style))
|
||||
if column.hidden {
|
||||
Cell::default()
|
||||
} else {
|
||||
Cell::from(Span::styled(Cow::from(&*column.name), header_style))
|
||||
}
|
||||
})));
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue