Files
shed/src/prompt/mod.rs
Kyler Clay 1c33578478 implemented more vi commands
implemented replace mode

re-implemented undo and redo
2025-05-28 01:01:49 -04:00

33 lines
874 B
Rust

pub mod readline;
pub mod highlight;
use std::path::Path;
use readline::{FernVi, Readline};
use crate::{expand::expand_prompt, libsh::error::ShResult, prelude::*, shopt::FernEditMode, state::read_shopts};
/// Initialize the line editor
fn get_prompt() -> ShResult<String> {
let Ok(prompt) = env::var("PS1") else {
// prompt expands to:
//
// username@hostname
// short/path/to/pwd/
// $
let default = "\\n\\e[1;0m\\u\\e[1;36m@\\e[1;31m\\h\\n\\e[1;36m\\W\\e[1;32m/\\n\\e[1;32m\\$\\e[0m ";
return Ok(format!("{}",expand_prompt(default)?))
};
Ok(format!("\n{}",expand_prompt(&prompt)?))
}
pub fn read_line(edit_mode: FernEditMode) -> ShResult<String> {
let prompt = get_prompt()?;
let mut reader: Box<dyn Readline> = match edit_mode {
FernEditMode::Vi => Box::new(FernVi::new(Some(prompt))),
FernEditMode::Emacs => todo!()
};
reader.readline()
}