2021-01-10 02:50:49 +00:00
|
|
|
use crate::history_path::history_path;
|
|
|
|
use indexmap::IndexMap;
|
2020-02-11 23:25:56 +00:00
|
|
|
use nu_errors::ShellError;
|
2020-05-27 04:50:26 +00:00
|
|
|
use nu_protocol::{TaggedDictBuilder, UntaggedValue, Value};
|
2020-02-11 23:25:56 +00:00
|
|
|
use nu_source::Tag;
|
|
|
|
|
2020-05-27 04:50:26 +00:00
|
|
|
pub fn nu(env: &IndexMap<String, String>, tag: impl Into<Tag>) -> Result<Value, ShellError> {
|
2020-02-11 23:25:56 +00:00
|
|
|
let tag = tag.into();
|
|
|
|
|
|
|
|
let mut nu_dict = TaggedDictBuilder::new(&tag);
|
|
|
|
|
|
|
|
let mut dict = TaggedDictBuilder::new(&tag);
|
2020-05-27 04:50:26 +00:00
|
|
|
for v in env.iter() {
|
2020-02-11 23:25:56 +00:00
|
|
|
if v.0 != "PATH" && v.0 != "Path" {
|
|
|
|
dict.insert_untagged(v.0, UntaggedValue::string(v.1));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
nu_dict.insert_value("env", dict.into_value());
|
|
|
|
|
2020-08-18 07:00:02 +00:00
|
|
|
let config = nu_data::config::read(&tag, &None)?;
|
2020-02-11 23:25:56 +00:00
|
|
|
nu_dict.insert_value("config", UntaggedValue::row(config).into_value(&tag));
|
|
|
|
|
|
|
|
let mut table = vec![];
|
2021-02-18 02:56:14 +00:00
|
|
|
for v in env.iter() {
|
|
|
|
if v.0 == "PATH" || v.0 == "Path" {
|
|
|
|
for path in std::env::split_paths(&v.1) {
|
|
|
|
table.push(UntaggedValue::filepath(path).into_value(&tag));
|
|
|
|
}
|
2020-02-11 23:25:56 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
nu_dict.insert_value("path", UntaggedValue::table(&table).into_value(&tag));
|
|
|
|
|
2020-03-08 05:33:30 +00:00
|
|
|
let path = std::env::current_dir()?;
|
2021-01-08 07:30:41 +00:00
|
|
|
nu_dict.insert_value("cwd", UntaggedValue::filepath(path).into_value(&tag));
|
2020-03-08 05:33:30 +00:00
|
|
|
|
2021-01-10 02:50:49 +00:00
|
|
|
if let Some(home) = crate::filesystem::filesystem_shell::homedir_if_possible() {
|
2021-01-08 07:30:41 +00:00
|
|
|
nu_dict.insert_value("home-dir", UntaggedValue::filepath(home).into_value(&tag));
|
2020-03-08 05:33:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
let temp = std::env::temp_dir();
|
2021-01-08 07:30:41 +00:00
|
|
|
nu_dict.insert_value("temp-dir", UntaggedValue::filepath(temp).into_value(&tag));
|
2020-03-08 05:33:30 +00:00
|
|
|
|
2020-08-18 07:00:02 +00:00
|
|
|
let config = nu_data::config::default_path()?;
|
2021-01-08 07:30:41 +00:00
|
|
|
nu_dict.insert_value(
|
|
|
|
"config-path",
|
|
|
|
UntaggedValue::filepath(config).into_value(&tag),
|
|
|
|
);
|
2020-03-08 05:33:30 +00:00
|
|
|
|
2020-09-17 06:02:30 +00:00
|
|
|
#[cfg(feature = "rustyline-support")]
|
|
|
|
{
|
2021-01-13 17:31:47 +00:00
|
|
|
let keybinding_path = nu_data::keybinding::keybinding_path()?;
|
2020-09-17 06:02:30 +00:00
|
|
|
nu_dict.insert_value(
|
|
|
|
"keybinding-path",
|
2021-01-08 07:30:41 +00:00
|
|
|
UntaggedValue::filepath(keybinding_path).into_value(&tag),
|
2020-09-17 06:02:30 +00:00
|
|
|
);
|
|
|
|
}
|
2020-07-15 07:51:59 +00:00
|
|
|
|
2020-09-16 23:22:58 +00:00
|
|
|
let config: Box<dyn nu_data::config::Conf> = Box::new(nu_data::config::NuConfig::new());
|
2021-01-10 02:50:49 +00:00
|
|
|
let history = history_path(&config);
|
2020-03-08 05:33:30 +00:00
|
|
|
nu_dict.insert_value(
|
|
|
|
"history-path",
|
2021-01-08 07:30:41 +00:00
|
|
|
UntaggedValue::filepath(history).into_value(&tag),
|
2020-03-08 05:33:30 +00:00
|
|
|
);
|
|
|
|
|
2020-02-11 23:25:56 +00:00
|
|
|
Ok(nu_dict.into_value())
|
|
|
|
}
|