mirror of https://github.com/helix-editor/helix
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
parent
7b1131adf6
commit
6492f17e7d
|
@ -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| {
|
||||||
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…
Reference in New Issue