cicada 0.9.4

A simple Unix shell.
Documentation
use std::env;

use linefeed::complete::{Completer, Completion, Suffix};
use linefeed::prompter::Prompter;
use linefeed::terminal::Terminal;

pub struct EnvCompleter;

impl<Term: Terminal> Completer<Term> for EnvCompleter {
    fn complete(
        &self,
        word: &str,
        _reader: &Prompter<Term>,
        _start: usize,
        _end: usize,
    ) -> Option<Vec<Completion>> {
        Some(complete_env(word))
    }
}

fn complete_env(path: &str) -> Vec<Completion> {
    let mut res = Vec::new();
    if path.trim().is_empty() {
        return res;
    }
    let mut prefix = path.to_string();
    prefix.remove(0);

    for (key, _) in env::vars_os() {
        let env_name = key.to_string_lossy().to_string();
        if env_name.starts_with(&prefix) {
            res.push(Completion {
                completion: format!("${}", env_name),
                display: None,
                suffix: Suffix::Default,
            });
        }
    }
    res
}