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 ++++++++++++++++++++++++++++++++++ src/main.rs | 1 + 2 files changed, 35 insertions(+) create mode 100644 src/completion.rs (limited to 'src') 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) +} diff --git a/src/main.rs b/src/main.rs index b064fcb..5b195e4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,6 +12,7 @@ pub mod parse; pub mod raw; pub mod run; pub mod reload; +pub mod completion; use linebuf::LineBuf; use raw::*; -- cgit v1.2.3