sofos 0.1.22

An interactive AI coding agent for your terminal
use crate::ui::{set_normal_mode_cursor_style, set_safe_mode_cursor_style};
use colored::Colorize;
use reedline::{Prompt, PromptEditMode, PromptHistorySearch};

#[derive(Clone)]
pub struct ReplPrompt {
    safe_mode: bool,
}

impl ReplPrompt {
    pub fn new(safe_mode: bool) -> Self {
        Self { safe_mode }
    }

    pub fn set_safe_mode(&mut self, safe_mode: bool) {
        if safe_mode {
            set_safe_mode_cursor_style().ok();
        } else {
            set_normal_mode_cursor_style().ok();
        }

        self.safe_mode = safe_mode;
    }
}

impl Prompt for ReplPrompt {
    fn render_prompt_left(&self) -> std::borrow::Cow<'_, str> {
        let symbol = if self.safe_mode { "λ:" } else { "λ>" };
        std::borrow::Cow::Owned(symbol.bright_green().bold().to_string() + " ")
    }

    fn render_prompt_right(&self) -> std::borrow::Cow<'_, str> {
        std::borrow::Cow::Borrowed("")
    }

    fn render_prompt_indicator(&self, _mode: PromptEditMode) -> std::borrow::Cow<'_, str> {
        std::borrow::Cow::Borrowed("")
    }

    fn render_prompt_multiline_indicator(&self) -> std::borrow::Cow<'_, str> {
        std::borrow::Cow::Borrowed("")
    }

    fn render_prompt_history_search_indicator(
        &self,
        _history_search: PromptHistorySearch,
    ) -> std::borrow::Cow<'_, str> {
        std::borrow::Cow::Borrowed("")
    }
}