aboutsummaryrefslogtreecommitdiffstats
path: root/src/ps1.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ps1.rs')
-rw-r--r--src/ps1.rs11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/ps1.rs b/src/ps1.rs
index 05b5886..38beebb 100644
--- a/src/ps1.rs
+++ b/src/ps1.rs
@@ -5,7 +5,7 @@ use crate::parse::{ExpString, Parse};
use crate::run::{Vars, WatchId};
use crate::{BString, Session, bstr};
-pub const PROMPT_VAR: &str = "PROMPT";
+pub const PROMPT_VAR: &bstr = b"PROMPT";
#[allow(unused)]
const DEFAULT_PROMPT_VALUE_DEBUG: &bstr = b"dev [$CWD_PRETTY]# ";
@@ -19,6 +19,7 @@ pub const DEFAULT_PROMPT_VALUE: &bstr = DEFAULT_PROMPT_VALUE_DEBUG;
#[cfg(not(debug_assertions))]
pub const DEFAULT_PROMPT_VALUE: &bstr = DEFAULT_PROMPT_VALUE_RELEASE;
+#[derive(Clone)]
pub struct Prompt {
watch_var: WatchId,
watch_content: Option<WatchId>,
@@ -28,8 +29,12 @@ pub struct Prompt {
impl Prompt {
pub fn new(vars: &mut Vars) -> Self {
+ if vars.lookup(PROMPT_VAR).is_none() {
+ vars.set(PROMPT_VAR.to_owned(), DEFAULT_PROMPT_VALUE.to_owned());
+ }
+
Self {
- watch_var: vars.watch(vec![PROMPT_VAR.as_bytes().to_vec()]),
+ watch_var: vars.watch(vec![PROMPT_VAR.to_vec()]),
watch_content: None,
parsed: None,
cached_prompt: None,
@@ -45,7 +50,7 @@ impl Prompt {
pub fn load_prompt(&mut self, vars: &mut Vars) {
if vars.pop_dirty(&self.watch_var) {
let prompt = vars
- .lookup(PROMPT_VAR.as_bytes())
+ .lookup(PROMPT_VAR)
.map(Cow::into_owned)
.unwrap_or_else(|| DEFAULT_PROMPT_VALUE.to_vec());
let parsed = parse_prompt(prompt);