From f03a0863ba3da7cf34e938a7de1cf92675b09c41 Mon Sep 17 00:00:00 2001 From: Jonas Maier <> Date: Thu, 5 Mar 2026 20:40:47 +0100 Subject: basic path completion --- src/completion.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/completion.rs (limited to 'src/completion.rs') diff --git a/src/completion.rs b/src/completion.rs new file mode 100644 index 0000000..63ac866 --- /dev/null +++ b/src/completion.rs @@ -0,0 +1,34 @@ +use crate::*; +use std::fs; + +pub struct Suggestion { + pub display: BString, + full: BString, +} + +pub fn _path_completion(mut prefix: BString) -> io::Result> { + let mut partial_entry = BString::new(); + while let Some(c) = prefix.last().cloned() { + if c == b'/' { + break; + } + partial_entry.push(c); + prefix.pop(); + } + partial_entry.reverse(); + + let mut sugs = Vec::new(); + + for entry in fs::read_dir(OsStr::from_bytes(&prefix))? { + let entry = entry?; + let name = entry.file_name().as_bytes().to_vec(); + if name.starts_with(&partial_entry) { + sugs.push(Suggestion { + display: name, + full: entry.path().as_os_str().as_bytes().to_vec(), + }); + } + } + + Ok(sugs) +} -- cgit v1.2.3