aboutsummaryrefslogtreecommitdiffstats
path: root/src/run
diff options
context:
space:
mode:
Diffstat (limited to 'src/run')
-rw-r--r--src/run/builtin.rs27
-rw-r--r--src/run/mod.rs1
2 files changed, 28 insertions, 0 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs
index 141357f..f0cb999 100644
--- a/src/run/builtin.rs
+++ b/src/run/builtin.rs
@@ -375,6 +375,33 @@ impl Builtin for parse {
}
}
+pub struct completion;
+impl Builtin for completion {
+ fn name(&self) -> &str {
+ "completion"
+ }
+
+ fn io(
+ &self,
+ session: Arc<Mutex<Session>>,
+ args: &[BString],
+ _stdin: &mut dyn Read,
+ stdout: &mut dyn Write,
+ ) -> Result {
+ for arg in args {
+ let c = crate::completion(session.clone(), &arg);
+ write!(stdout, "{:?} ", c.kind)?;
+ stdout.write_all(&c.shared_prefix)?;
+ for s in c.suggestions {
+ stdout.write_all(b" ")?;
+ stdout.write_all(&s.display)?;
+ }
+ stdout.write_all(b"\n")?;
+ }
+ Ok(())
+ }
+}
+
pub struct null;
impl Builtin for null {
fn name(&self) -> &str {
diff --git a/src/run/mod.rs b/src/run/mod.rs
index 1133ddb..2224eac 100644
--- a/src/run/mod.rs
+++ b/src/run/mod.rs
@@ -491,6 +491,7 @@ const BUILTINS: &[&'static dyn Builtin] = &[
&builtin::parse,
&builtin::null,
&builtin::var,
+ &builtin::completion,
];
pub fn builtin_map() -> HashMap<BString, &'static dyn Builtin> {