From 1c9ca1b002badb511ff21d58b3f20986741ab31f Mon Sep 17 00:00:00 2001 From: sigoden Date: Sun, 24 Dec 2023 16:04:18 +0800 Subject: feat: custom REPL prompt (#283) --- src/utils/mod.rs | 2 + src/utils/render_prompt.rs | 155 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+) create mode 100644 src/utils/render_prompt.rs (limited to 'src/utils') diff --git a/src/utils/mod.rs b/src/utils/mod.rs index bd9f381..04c5668 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -1,11 +1,13 @@ mod abort_signal; mod clipboard; mod prompt_input; +mod render_prompt; mod tiktoken; pub use self::abort_signal::{create_abort_signal, AbortSignal}; pub use self::clipboard::set_text; pub use self::prompt_input::*; +pub use self::render_prompt::render_prompt; pub use self::tiktoken::cl100k_base_singleton; use sha2::{Digest, Sha256}; diff --git a/src/utils/render_prompt.rs b/src/utils/render_prompt.rs new file mode 100644 index 0000000..12661fa --- /dev/null +++ b/src/utils/render_prompt.rs @@ -0,0 +1,155 @@ +use std::collections::HashMap; + +/// Render REPL prompt +/// +/// The template comprises plain text and `{...}`. +/// +/// The syntax of `{...}`: +/// - `{var}` - When `var` has a value, replace `var` with the value and eval `template` +/// - `{?var