|
|
@ -27,7 +27,7 @@ use std::{collections::HashMap, io::Read, path::PathBuf};
|
|
|
|
|
|
|
|
|
|
|
|
use crate::ui::{Prompt, PromptEvent};
|
|
|
|
use crate::ui::{Prompt, PromptEvent};
|
|
|
|
use helix_core::{
|
|
|
|
use helix_core::{
|
|
|
|
movement::Direction, text_annotations::TextAnnotations,
|
|
|
|
char_idx_at_visual_offset, movement::Direction, text_annotations::TextAnnotations,
|
|
|
|
unicode::segmentation::UnicodeSegmentation, Position, Syntax,
|
|
|
|
unicode::segmentation::UnicodeSegmentation, Position, Syntax,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
use helix_view::{
|
|
|
|
use helix_view::{
|
|
|
@ -690,20 +690,20 @@ impl<T: Item + 'static> Picker<T> {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let mut offset = ViewPosition::default();
|
|
|
|
|
|
|
|
if let Some(range) = range {
|
|
|
|
|
|
|
|
let text_fmt = doc.text_format(inner.width, None);
|
|
|
|
|
|
|
|
let annotations = TextAnnotations::default();
|
|
|
|
|
|
|
|
(offset.anchor, offset.vertical_offset) = char_idx_at_visual_offset(
|
|
|
|
|
|
|
|
doc.text().slice(..),
|
|
|
|
|
|
|
|
doc.text().line_to_char(range.0),
|
|
|
|
// align to middle
|
|
|
|
// align to middle
|
|
|
|
let first_line = range
|
|
|
|
-(inner.height as isize / 2),
|
|
|
|
.map(|(start, end)| {
|
|
|
|
0,
|
|
|
|
let height = end.saturating_sub(start) + 1;
|
|
|
|
&text_fmt,
|
|
|
|
let middle = start + (height.saturating_sub(1) / 2);
|
|
|
|
&annotations,
|
|
|
|
middle.saturating_sub(inner.height as usize / 2).min(start)
|
|
|
|
);
|
|
|
|
})
|
|
|
|
}
|
|
|
|
.unwrap_or(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let offset = ViewPosition {
|
|
|
|
|
|
|
|
anchor: doc.text().line_to_char(first_line),
|
|
|
|
|
|
|
|
horizontal_offset: 0,
|
|
|
|
|
|
|
|
vertical_offset: 0,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let mut highlights = EditorView::doc_syntax_highlights(
|
|
|
|
let mut highlights = EditorView::doc_syntax_highlights(
|
|
|
|
doc,
|
|
|
|
doc,
|
|
|
|