got all the load script stuff done.
added script args to main shell also added userlib tests to ci
This commit is contained in:
parent
381852b3bd
commit
3f75157fac
7 changed files with 122 additions and 49 deletions
|
|
@ -16,8 +16,7 @@
|
|||
*/
|
||||
use nu_ansi_term::{Color, Style};
|
||||
use dirs::home_dir;
|
||||
use relish::ast::{eval, lex, Ctr, Seg, SymTable};
|
||||
use relish::aux::configure;
|
||||
use relish::ast::{eval, lex, Ctr, Seg, SymTable, run, load_defaults, load_environment};
|
||||
use relish::stdlib::{dynamic_stdlib, static_stdlib};
|
||||
use reedline::{
|
||||
FileBackedHistory, DefaultHinter, DefaultValidator, Reedline, Signal,
|
||||
|
|
@ -67,14 +66,43 @@ impl Prompt for CustomPrompt<'_> {
|
|||
}
|
||||
}
|
||||
|
||||
fn main() -> ! {
|
||||
fn main() {
|
||||
const HIST_FILE: &str = "/.relish_hist";
|
||||
const CONFIG_FILE_DEFAULT: &str = "/.relishrc";
|
||||
|
||||
// default config file dirs
|
||||
let home_dir = home_dir().unwrap().to_str().unwrap().to_owned();
|
||||
let hist_file_name = home_dir.clone() + HIST_FILE;
|
||||
let cfg_file_name = home_dir + CONFIG_FILE_DEFAULT;
|
||||
|
||||
// setup symtable
|
||||
let mut syms = SymTable::new();
|
||||
load_defaults(&mut syms);
|
||||
load_environment(&mut syms);
|
||||
static_stdlib(&mut syms).unwrap_or_else(|err: String| eprintln!("{}", err));
|
||||
dynamic_stdlib(&mut syms).unwrap_or_else(|err: String| eprintln!("{}", err));
|
||||
|
||||
// if there are args those are scripts, run them and exit
|
||||
if env::args().count() > 1 {
|
||||
let mut iter = env::args();
|
||||
iter.next();
|
||||
for i in iter {
|
||||
run(i, &mut syms).unwrap();
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// this is a user shell. attempt to load configuration
|
||||
{
|
||||
// scope the below borrow of syms
|
||||
let cfg_file = env::var("RELISH_CFG_FILE").unwrap_or(cfg_file_name);
|
||||
run(cfg_file.clone(), &mut syms)
|
||||
.unwrap_or_else(|err: String| eprintln!("failed to load script {}\n{}", cfg_file, err));
|
||||
}
|
||||
dynamic_stdlib(&mut syms).unwrap_or_else(|err: String| eprintln!("{}", err));
|
||||
|
||||
// setup readline
|
||||
let mut rl = Reedline::create();
|
||||
let maybe_hist: Box<FileBackedHistory>;
|
||||
if !hist_file_name.is_empty() {
|
||||
|
|
@ -82,23 +110,12 @@ fn main() -> ! {
|
|||
.expect("error reading history!"));
|
||||
rl = rl.with_history(maybe_hist);
|
||||
}
|
||||
|
||||
rl = rl.with_hinter(Box::new(
|
||||
DefaultHinter::default()
|
||||
.with_style(Style::new().italic().fg(Color::LightGray)),
|
||||
)).with_validator(Box::new(DefaultValidator));
|
||||
|
||||
let mut syms = SymTable::new();
|
||||
static_stdlib(&mut syms).unwrap_or_else(|err: String| eprintln!("{}", err));
|
||||
dynamic_stdlib(&mut syms).unwrap_or_else(|err: String| eprintln!("{}", err));
|
||||
{
|
||||
// scope the below borrow of syms
|
||||
let cfg_file = env::var("RELISH_CFG_FILE").unwrap_or(cfg_file_name);
|
||||
configure(cfg_file.clone(), &mut syms)
|
||||
.unwrap_or_else(|err: String| eprintln!("failed to load script {}\n{}", cfg_file, err));
|
||||
}
|
||||
dynamic_stdlib(&mut syms).unwrap_or_else(|err: String| eprintln!("{}", err));
|
||||
|
||||
// repl :)
|
||||
loop {
|
||||
let s = *syms
|
||||
.call_symbol(&"CFG_RELISH_PROMPT".to_string(), &Seg::new(), true)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue