Extracted readline from the dead prompt module

This commit is contained in:
2026-02-25 20:00:19 -05:00
parent ef64e22be5
commit e82f45f2ea
17 changed files with 13 additions and 35 deletions

View File

@@ -12,7 +12,7 @@ use crate::{
libsh::error::{ShErr, ShErrKind, ShResult, ShResultExt}, libsh::error::{ShErr, ShErrKind, ShResult, ShResultExt},
parse::{NdRule, Node}, parse::{NdRule, Node},
procio::{borrow_fd, IoStack}, procio::{borrow_fd, IoStack},
prompt::readline::term::RawModeGuard, readline::term::RawModeGuard,
state::{self, read_vars, write_vars, VarFlags}, state::{self, read_vars, write_vars, VarFlags},
}; };

View File

@@ -10,7 +10,7 @@ use crate::parse::execute::exec_input;
use crate::parse::lex::{LexFlags, LexStream, Tk, TkFlags, TkRule, is_field_sep, is_hard_sep}; use crate::parse::lex::{LexFlags, LexStream, Tk, TkFlags, TkRule, is_field_sep, is_hard_sep};
use crate::parse::{Redir, RedirType}; use crate::parse::{Redir, RedirType};
use crate::procio::{IoBuf, IoFrame, IoMode, IoStack}; use crate::procio::{IoBuf, IoFrame, IoMode, IoStack};
use crate::prompt::readline::markers; use crate::readline::markers;
use crate::state::{ use crate::state::{
LogTab, VarFlags, read_jobs, read_logic, read_vars, write_jobs, write_meta, write_vars LogTab, VarFlags, read_jobs, read_logic, read_vars, write_jobs, write_meta, write_vars
}; };

View File

@@ -11,7 +11,7 @@ pub mod libsh;
pub mod parse; pub mod parse;
pub mod prelude; pub mod prelude;
pub mod procio; pub mod procio;
pub mod prompt; pub mod readline;
pub mod shopt; pub mod shopt;
pub mod signal; pub mod signal;
pub mod state; pub mod state;
@@ -31,9 +31,8 @@ use crate::libsh::error::{ShErr, ShErrKind, ShResult};
use crate::libsh::sys::TTY_FILENO; use crate::libsh::sys::TTY_FILENO;
use crate::parse::execute::exec_input; use crate::parse::execute::exec_input;
use crate::prelude::*; use crate::prelude::*;
use crate::prompt::get_prompt; use crate::readline::term::{LineWriter, RawModeGuard, raw_mode};
use crate::prompt::readline::term::{LineWriter, RawModeGuard, raw_mode}; use crate::readline::{Prompt, ReadlineEvent, ShedVi};
use crate::prompt::readline::{Prompt, ReadlineEvent, ShedVi};
use crate::signal::{GOT_SIGWINCH, JOB_DONE, QUIT_CODE, check_signals, sig_setup, signals_pending}; use crate::signal::{GOT_SIGWINCH, JOB_DONE, QUIT_CODE, check_signals, sig_setup, signals_pending};
use crate::state::{read_logic, source_rc, write_jobs, write_meta}; use crate::state::{read_logic, source_rc, write_jobs, write_meta};
use clap::Parser; use clap::Parser;

View File

@@ -1,20 +0,0 @@
pub mod readline;
pub mod statusline;
use crate::{expand::expand_prompt, libsh::error::ShResult, prelude::*};
/// Initialize the line editor
pub fn get_prompt() -> ShResult<String> {
let Ok(prompt) = env::var("PS1") else {
// default prompt expands to:
//
// username@hostname
// short/path/to/pwd/
// $ _
let default = "\\e[0m\\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 expand_prompt(default);
};
let sanitized = format!("\\e[0m{prompt}");
expand_prompt(&sanitized)
}

View File

@@ -1 +0,0 @@

View File

@@ -4,7 +4,7 @@ use crate::{
builtin::BUILTINS, builtin::BUILTINS,
libsh::error::{ShErr, ShErrKind, ShResult}, libsh::error::{ShErr, ShErrKind, ShResult},
parse::lex::{self, LexFlags, Tk, TkFlags}, parse::lex::{self, LexFlags, Tk, TkFlags},
prompt::readline::{ readline::{
Marker, annotate_input, annotate_input_recursive, get_insertions, Marker, annotate_input, annotate_input_recursive, get_insertions,
markers::{self, is_marker}, markers::{self, is_marker},
}, },

View File

@@ -6,7 +6,7 @@ use std::{
use crate::{ use crate::{
libsh::term::{Style, StyleSet, Styled}, libsh::term::{Style, StyleSet, Styled},
prompt::readline::{annotate_input, markers::{self, is_marker}}, readline::{annotate_input, markers::{self, is_marker}},
state::{read_logic, read_meta, read_shopts}, state::{read_logic, read_meta, read_shopts},
}; };

View File

@@ -12,7 +12,7 @@ use std::{
use crate::prelude::*; use crate::prelude::*;
use crate::{ use crate::{
libsh::error::{ShErr, ShErrKind, ShResult}, libsh::error::{ShErr, ShErrKind, ShResult},
prompt::readline::linebuf::LineBuf, readline::linebuf::LineBuf,
}; };
use super::vicmd::Direction; // surprisingly useful use super::vicmd::Direction; // surprisingly useful

View File

@@ -14,7 +14,7 @@ use crate::{
libsh::{ libsh::{
error::ShResult, error::ShResult,
term::{Style, Styled}, term::{Style, Styled},
}, parse::lex::{LexFlags, LexStream, Tk, TkFlags, TkRule}, prelude::*, prompt::readline::{markers, register::{write_register, RegisterContent}}, state::read_shopts }, parse::lex::{LexFlags, LexStream, Tk, TkFlags, TkRule}, prelude::*, readline::{markers, register::{write_register, RegisterContent}}, state::read_shopts
}; };
const PUNCTUATION: [&str; 3] = ["?", "!", "."]; const PUNCTUATION: [&str; 3] = ["?", "!", "."];

View File

@@ -11,7 +11,7 @@ use crate::expand::expand_prompt;
use crate::libsh::sys::TTY_FILENO; use crate::libsh::sys::TTY_FILENO;
use crate::parse::lex::LexStream; use crate::parse::lex::LexStream;
use crate::prelude::*; use crate::prelude::*;
use crate::prompt::readline::term::{Pos, calc_str_width}; use crate::readline::term::{Pos, calc_str_width};
use crate::state::read_shopts; use crate::state::read_shopts;
use crate::{ use crate::{
libsh::{ libsh::{
@@ -19,7 +19,7 @@ use crate::{
term::{Style, Styled}, term::{Style, Styled},
}, },
parse::lex::{self, LexFlags, Tk, TkFlags, TkRule}, parse::lex::{self, LexFlags, Tk, TkFlags, TkRule},
prompt::readline::{complete::Completer, highlight::Highlighter}, readline::{complete::Completer, highlight::Highlighter},
}; };
pub mod complete; pub mod complete;

View File

@@ -22,7 +22,7 @@ use crate::{
error::{ShErr, ShErrKind, ShResult}, error::{ShErr, ShErrKind, ShResult},
sys::TTY_FILENO, sys::TTY_FILENO,
}, },
prompt::readline::keys::{KeyCode, ModKeys}, readline::keys::{KeyCode, ModKeys},
shopt::ShedBellStyle, shopt::ShedBellStyle,
state::read_shopts, state::read_shopts,
}; };

View File

@@ -8,7 +8,7 @@ use crate::{
builtin::{BUILTINS, trap::TrapTarget}, exec_input, jobs::JobTab, libsh::{ builtin::{BUILTINS, trap::TrapTarget}, exec_input, jobs::JobTab, libsh::{
error::{ShErr, ShErrKind, ShResult}, error::{ShErr, ShErrKind, ShResult},
utils::VecDequeExt, utils::VecDequeExt,
}, parse::{ConjunctNode, NdRule, Node, ParsedSrc}, prelude::*, prompt::readline::markers, shopt::ShOpts }, parse::{ConjunctNode, NdRule, Node, ParsedSrc}, prelude::*, readline::markers, shopt::ShOpts
}; };
pub struct Shed { pub struct Shed {