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 { let Ok(prompt) = env::var("PS1") else { // username@hostname // short/path/to/pwd/ // $ let default = "\\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!("\n{}",expand_prompt(default)?)) }; Ok(format!("\n{}",expand_prompt(&prompt)?)) } pub fn read_line(edit_mode: FernEditMode) -> ShResult { dbg!("hi"); let prompt = get_prompt()?; let mut reader: Box = match edit_mode { FernEditMode::Vi => Box::new(FernVi::new(Some(prompt))), FernEditMode::Emacs => todo!() }; dbg!("there"); reader.readline() }