feat: configure cursor distance from viewport edges

This commit is contained in:
2026-10-13 22:10:47 +02:00
parent 00628e0efd
commit b58fb085a3
11 changed files with 592 additions and 82 deletions
+8
View File
@@ -93,6 +93,7 @@ pub struct FilePicker {
tree_for_node: Vec<usize>,
tree_roots: Vec<usize>,
rows: Vec<VisibleRow>,
viewport_revision: u64,
expanded: HashSet<usize>,
filter_collapsed: HashSet<usize>,
saved_selection: [Option<usize>; 2],
@@ -298,6 +299,7 @@ impl FilePicker {
tree: Vec::new(),
tree_roots: Vec::new(),
rows: Vec::new(),
viewport_revision: 0,
expanded: HashSet::new(),
filter_collapsed: HashSet::new(),
saved_selection: [None, None],
@@ -346,6 +348,10 @@ impl FilePicker {
tree
}
pub(crate) fn viewport_revision(&self) -> u64 {
self.viewport_revision
}
pub fn entries(&self) -> impl ExactSizeIterator<Item = FileRow<'_>> + '_ {
self.rows.iter().map(|row| {
let node = &self.nodes[row.node];
@@ -542,6 +548,8 @@ impl FilePicker {
}
fn project(&mut self, selected: Option<usize>, select_match: bool) {
static NEXT_REVISION: std::sync::atomic::AtomicU64 = std::sync::atomic::AtomicU64::new(1);
self.viewport_revision = NEXT_REVISION.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
let query = self.query.to_lowercase();
let tokens: Vec<_> = query.split_whitespace().collect();
let matches = |node: &Node| tokens.iter().all(|token| node.search_label.contains(token));