From 340e0bc6bbad72bf248317fe94f416771d1dbc30 Mon Sep 17 00:00:00 2001 From: ynqa Date: Sat, 30 Mar 2024 22:54:08 +0900 Subject: [PATCH 1/7] pub for engine/grapheme/DynEvaluator/ResultProducer --- src/lib.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 34bff98d..8bd99cbf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -97,10 +97,10 @@ pub use serde_json; mod core; pub use core::*; -mod engine; +pub mod engine; mod error; pub use error::{Error, Result}; -mod grapheme; +pub mod grapheme; pub mod keymap; mod macros; pub mod pane; @@ -181,7 +181,7 @@ pub trait AsAny { /// # Returns /// /// Returns a `Result` with a `PromptSignal`, indicating the next action for the prompt. -type DynEvaluator = dyn Fn(&Event, &mut Box) -> Result; +pub type DynEvaluator = dyn Fn(&Event, &mut Box) -> Result; /// Type alias for a result producer function. /// @@ -196,7 +196,7 @@ type DynEvaluator = dyn Fn(&Event, &mut Box) -> Result = fn(&dyn Renderer) -> Result; +pub type ResultProducer = fn(&dyn Renderer) -> Result; /// Represents a customizable prompt that can handle user input and produce a result. /// From 1afebabcce47d4e5b302deca73adc1d74b0814e0 Mon Sep 17 00:00:00 2001 From: ynqa Date: Thu, 4 Apr 2024 00:03:23 +0900 Subject: [PATCH 2/7] ToString for StyledGraphemes --- src/grapheme/styled.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/grapheme/styled.rs b/src/grapheme/styled.rs index ed417eac..2b85616f 100644 --- a/src/grapheme/styled.rs +++ b/src/grapheme/styled.rs @@ -93,6 +93,12 @@ impl fmt::Debug for StyledGraphemes { } } +impl ToString for StyledGraphemes { + fn to_string(&self) -> String { + self.iter().map(|g| g.ch).collect() + } +} + impl StyledGraphemes { pub fn from_str>(string: S, style: ContentStyle) -> Self { string From f919f06bd6fc255bb38e05f444d4ca1650b64e27 Mon Sep 17 00:00:00 2001 From: ynqa Date: Fri, 5 Apr 2024 00:54:31 +0900 Subject: [PATCH 3/7] Clone for pane --- src/pane.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pane.rs b/src/pane.rs index f09923b8..a0622014 100644 --- a/src/pane.rs +++ b/src/pane.rs @@ -1,5 +1,6 @@ use crate::grapheme::StyledGraphemes; +#[derive(Clone)] pub struct Pane { /// The layout of graphemes within the pane. /// This vector stores the styled graphemes that make up the content of the pane. From e53d32f838144076729be6a3a2dbb50eb3e1f004 Mon Sep 17 00:00:00 2001 From: ynqa Date: Fri, 5 Apr 2024 21:38:27 +0900 Subject: [PATCH 4/7] add: clear_current_line --- src/engine.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/engine.rs b/src/engine.rs index 0689cae6..03921a55 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -61,6 +61,10 @@ impl Engine { queue!(self.out, Clear(ClearType::FromCursorDown)).map_err(Error::from) } + pub fn clear_current_line(&mut self) -> Result { + queue!(self.out, Clear(ClearType::CurrentLine)).map_err(Error::from) + } + /// Writes a string to the terminal. /// /// # Arguments From fe0c41ce11c53dc84b7722c6d5843f8e66b94302 Mon Sep 17 00:00:00 2001 From: ynqa Date: Sat, 6 Apr 2024 16:17:47 +0900 Subject: [PATCH 5/7] prepare workspace for promkit --- promkit/Cargo.toml | 26 +++++++++++++++++++ {src => promkit/src}/core.rs | 0 {src => promkit/src}/core/checkbox.rs | 0 {src => promkit/src}/core/checkbox/render.rs | 0 {src => promkit/src}/core/cursor.rs | 0 {src => promkit/src}/core/cursor/composite.rs | 0 {src => promkit/src}/core/cursor/len.rs | 0 {src => promkit/src}/core/json.rs | 0 {src => promkit/src}/core/json/node.rs | 0 {src => promkit/src}/core/json/render.rs | 0 {src => promkit/src}/core/listbox.rs | 0 {src => promkit/src}/core/listbox/render.rs | 0 {src => promkit/src}/core/text.rs | 0 {src => promkit/src}/core/text_editor.rs | 0 .../src}/core/text_editor/history.rs | 0 .../src}/core/text_editor/render.rs | 0 {src => promkit/src}/core/tree.rs | 0 {src => promkit/src}/core/tree/node.rs | 0 {src => promkit/src}/core/tree/render.rs | 0 {src => promkit/src}/engine.rs | 0 {src => promkit/src}/error.rs | 0 {src => promkit/src}/grapheme.rs | 0 {src => promkit/src}/grapheme/styled.rs | 0 {src => promkit/src}/keymap.rs | 0 {src => promkit/src}/lib.rs | 0 {src => promkit/src}/macros.rs | 0 {src => promkit/src}/pane.rs | 0 {src => promkit/src}/preset.rs | 0 {src => promkit/src}/preset/checkbox.rs | 0 .../src}/preset/checkbox/keymap.rs | 0 .../src}/preset/checkbox/render.rs | 0 {src => promkit/src}/preset/json.rs | 0 {src => promkit/src}/preset/json/keymap.rs | 0 {src => promkit/src}/preset/json/render.rs | 0 {src => promkit/src}/preset/listbox.rs | 0 {src => promkit/src}/preset/listbox/keymap.rs | 0 {src => promkit/src}/preset/listbox/render.rs | 0 {src => promkit/src}/preset/query_selector.rs | 0 .../src}/preset/query_selector/keymap.rs | 0 .../src}/preset/query_selector/render.rs | 0 {src => promkit/src}/preset/readline.rs | 0 .../src}/preset/readline/confirm.rs | 0 .../src}/preset/readline/keymap.rs | 0 .../src}/preset/readline/password.rs | 0 .../src}/preset/readline/render.rs | 0 {src => promkit/src}/preset/tree.rs | 0 {src => promkit/src}/preset/tree/keymap.rs | 0 {src => promkit/src}/preset/tree/render.rs | 0 {src => promkit/src}/snapshot.rs | 0 {src => promkit/src}/style.rs | 0 {src => promkit/src}/suggest.rs | 0 {src => promkit/src}/terminal.rs | 0 {src => promkit/src}/validate.rs | 0 53 files changed, 26 insertions(+) create mode 100644 promkit/Cargo.toml rename {src => promkit/src}/core.rs (100%) rename {src => promkit/src}/core/checkbox.rs (100%) rename {src => promkit/src}/core/checkbox/render.rs (100%) rename {src => promkit/src}/core/cursor.rs (100%) rename {src => promkit/src}/core/cursor/composite.rs (100%) rename {src => promkit/src}/core/cursor/len.rs (100%) rename {src => promkit/src}/core/json.rs (100%) rename {src => promkit/src}/core/json/node.rs (100%) rename {src => promkit/src}/core/json/render.rs (100%) rename {src => promkit/src}/core/listbox.rs (100%) rename {src => promkit/src}/core/listbox/render.rs (100%) rename {src => promkit/src}/core/text.rs (100%) rename {src => promkit/src}/core/text_editor.rs (100%) rename {src => promkit/src}/core/text_editor/history.rs (100%) rename {src => promkit/src}/core/text_editor/render.rs (100%) rename {src => promkit/src}/core/tree.rs (100%) rename {src => promkit/src}/core/tree/node.rs (100%) rename {src => promkit/src}/core/tree/render.rs (100%) rename {src => promkit/src}/engine.rs (100%) rename {src => promkit/src}/error.rs (100%) rename {src => promkit/src}/grapheme.rs (100%) rename {src => promkit/src}/grapheme/styled.rs (100%) rename {src => promkit/src}/keymap.rs (100%) rename {src => promkit/src}/lib.rs (100%) rename {src => promkit/src}/macros.rs (100%) rename {src => promkit/src}/pane.rs (100%) rename {src => promkit/src}/preset.rs (100%) rename {src => promkit/src}/preset/checkbox.rs (100%) rename {src => promkit/src}/preset/checkbox/keymap.rs (100%) rename {src => promkit/src}/preset/checkbox/render.rs (100%) rename {src => promkit/src}/preset/json.rs (100%) rename {src => promkit/src}/preset/json/keymap.rs (100%) rename {src => promkit/src}/preset/json/render.rs (100%) rename {src => promkit/src}/preset/listbox.rs (100%) rename {src => promkit/src}/preset/listbox/keymap.rs (100%) rename {src => promkit/src}/preset/listbox/render.rs (100%) rename {src => promkit/src}/preset/query_selector.rs (100%) rename {src => promkit/src}/preset/query_selector/keymap.rs (100%) rename {src => promkit/src}/preset/query_selector/render.rs (100%) rename {src => promkit/src}/preset/readline.rs (100%) rename {src => promkit/src}/preset/readline/confirm.rs (100%) rename {src => promkit/src}/preset/readline/keymap.rs (100%) rename {src => promkit/src}/preset/readline/password.rs (100%) rename {src => promkit/src}/preset/readline/render.rs (100%) rename {src => promkit/src}/preset/tree.rs (100%) rename {src => promkit/src}/preset/tree/keymap.rs (100%) rename {src => promkit/src}/preset/tree/render.rs (100%) rename {src => promkit/src}/snapshot.rs (100%) rename {src => promkit/src}/style.rs (100%) rename {src => promkit/src}/suggest.rs (100%) rename {src => promkit/src}/terminal.rs (100%) rename {src => promkit/src}/validate.rs (100%) diff --git a/promkit/Cargo.toml b/promkit/Cargo.toml new file mode 100644 index 00000000..c774edac --- /dev/null +++ b/promkit/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "promkit" +version = "0.3.3" +authors = ["ynqa "] +edition = "2021" +description = "A toolkit for building your own interactive command-line tools" +repository = "https://github.com/ynqa/promkit" +license = "MIT" +readme = "README.md" + +[lib] +name = "promkit" +path = "src/lib.rs" + +[dependencies] +anyhow = "1.0.81" +crossterm = { version = "0.27.0", features = ["use-dev-tty"] } +indexmap = "2.2.3" +radix_trie = "0.2.1" +serde = { version = "1.0.197" } +serde_json = { version = "1.0.114", features = ["preserve_order"] } +thiserror = "1.0.50" +unicode-width = "0.1.8" + +[dev-dependencies] +strip-ansi-escapes = "0.2.0" diff --git a/src/core.rs b/promkit/src/core.rs similarity index 100% rename from src/core.rs rename to promkit/src/core.rs diff --git a/src/core/checkbox.rs b/promkit/src/core/checkbox.rs similarity index 100% rename from src/core/checkbox.rs rename to promkit/src/core/checkbox.rs diff --git a/src/core/checkbox/render.rs b/promkit/src/core/checkbox/render.rs similarity index 100% rename from src/core/checkbox/render.rs rename to promkit/src/core/checkbox/render.rs diff --git a/src/core/cursor.rs b/promkit/src/core/cursor.rs similarity index 100% rename from src/core/cursor.rs rename to promkit/src/core/cursor.rs diff --git a/src/core/cursor/composite.rs b/promkit/src/core/cursor/composite.rs similarity index 100% rename from src/core/cursor/composite.rs rename to promkit/src/core/cursor/composite.rs diff --git a/src/core/cursor/len.rs b/promkit/src/core/cursor/len.rs similarity index 100% rename from src/core/cursor/len.rs rename to promkit/src/core/cursor/len.rs diff --git a/src/core/json.rs b/promkit/src/core/json.rs similarity index 100% rename from src/core/json.rs rename to promkit/src/core/json.rs diff --git a/src/core/json/node.rs b/promkit/src/core/json/node.rs similarity index 100% rename from src/core/json/node.rs rename to promkit/src/core/json/node.rs diff --git a/src/core/json/render.rs b/promkit/src/core/json/render.rs similarity index 100% rename from src/core/json/render.rs rename to promkit/src/core/json/render.rs diff --git a/src/core/listbox.rs b/promkit/src/core/listbox.rs similarity index 100% rename from src/core/listbox.rs rename to promkit/src/core/listbox.rs diff --git a/src/core/listbox/render.rs b/promkit/src/core/listbox/render.rs similarity index 100% rename from src/core/listbox/render.rs rename to promkit/src/core/listbox/render.rs diff --git a/src/core/text.rs b/promkit/src/core/text.rs similarity index 100% rename from src/core/text.rs rename to promkit/src/core/text.rs diff --git a/src/core/text_editor.rs b/promkit/src/core/text_editor.rs similarity index 100% rename from src/core/text_editor.rs rename to promkit/src/core/text_editor.rs diff --git a/src/core/text_editor/history.rs b/promkit/src/core/text_editor/history.rs similarity index 100% rename from src/core/text_editor/history.rs rename to promkit/src/core/text_editor/history.rs diff --git a/src/core/text_editor/render.rs b/promkit/src/core/text_editor/render.rs similarity index 100% rename from src/core/text_editor/render.rs rename to promkit/src/core/text_editor/render.rs diff --git a/src/core/tree.rs b/promkit/src/core/tree.rs similarity index 100% rename from src/core/tree.rs rename to promkit/src/core/tree.rs diff --git a/src/core/tree/node.rs b/promkit/src/core/tree/node.rs similarity index 100% rename from src/core/tree/node.rs rename to promkit/src/core/tree/node.rs diff --git a/src/core/tree/render.rs b/promkit/src/core/tree/render.rs similarity index 100% rename from src/core/tree/render.rs rename to promkit/src/core/tree/render.rs diff --git a/src/engine.rs b/promkit/src/engine.rs similarity index 100% rename from src/engine.rs rename to promkit/src/engine.rs diff --git a/src/error.rs b/promkit/src/error.rs similarity index 100% rename from src/error.rs rename to promkit/src/error.rs diff --git a/src/grapheme.rs b/promkit/src/grapheme.rs similarity index 100% rename from src/grapheme.rs rename to promkit/src/grapheme.rs diff --git a/src/grapheme/styled.rs b/promkit/src/grapheme/styled.rs similarity index 100% rename from src/grapheme/styled.rs rename to promkit/src/grapheme/styled.rs diff --git a/src/keymap.rs b/promkit/src/keymap.rs similarity index 100% rename from src/keymap.rs rename to promkit/src/keymap.rs diff --git a/src/lib.rs b/promkit/src/lib.rs similarity index 100% rename from src/lib.rs rename to promkit/src/lib.rs diff --git a/src/macros.rs b/promkit/src/macros.rs similarity index 100% rename from src/macros.rs rename to promkit/src/macros.rs diff --git a/src/pane.rs b/promkit/src/pane.rs similarity index 100% rename from src/pane.rs rename to promkit/src/pane.rs diff --git a/src/preset.rs b/promkit/src/preset.rs similarity index 100% rename from src/preset.rs rename to promkit/src/preset.rs diff --git a/src/preset/checkbox.rs b/promkit/src/preset/checkbox.rs similarity index 100% rename from src/preset/checkbox.rs rename to promkit/src/preset/checkbox.rs diff --git a/src/preset/checkbox/keymap.rs b/promkit/src/preset/checkbox/keymap.rs similarity index 100% rename from src/preset/checkbox/keymap.rs rename to promkit/src/preset/checkbox/keymap.rs diff --git a/src/preset/checkbox/render.rs b/promkit/src/preset/checkbox/render.rs similarity index 100% rename from src/preset/checkbox/render.rs rename to promkit/src/preset/checkbox/render.rs diff --git a/src/preset/json.rs b/promkit/src/preset/json.rs similarity index 100% rename from src/preset/json.rs rename to promkit/src/preset/json.rs diff --git a/src/preset/json/keymap.rs b/promkit/src/preset/json/keymap.rs similarity index 100% rename from src/preset/json/keymap.rs rename to promkit/src/preset/json/keymap.rs diff --git a/src/preset/json/render.rs b/promkit/src/preset/json/render.rs similarity index 100% rename from src/preset/json/render.rs rename to promkit/src/preset/json/render.rs diff --git a/src/preset/listbox.rs b/promkit/src/preset/listbox.rs similarity index 100% rename from src/preset/listbox.rs rename to promkit/src/preset/listbox.rs diff --git a/src/preset/listbox/keymap.rs b/promkit/src/preset/listbox/keymap.rs similarity index 100% rename from src/preset/listbox/keymap.rs rename to promkit/src/preset/listbox/keymap.rs diff --git a/src/preset/listbox/render.rs b/promkit/src/preset/listbox/render.rs similarity index 100% rename from src/preset/listbox/render.rs rename to promkit/src/preset/listbox/render.rs diff --git a/src/preset/query_selector.rs b/promkit/src/preset/query_selector.rs similarity index 100% rename from src/preset/query_selector.rs rename to promkit/src/preset/query_selector.rs diff --git a/src/preset/query_selector/keymap.rs b/promkit/src/preset/query_selector/keymap.rs similarity index 100% rename from src/preset/query_selector/keymap.rs rename to promkit/src/preset/query_selector/keymap.rs diff --git a/src/preset/query_selector/render.rs b/promkit/src/preset/query_selector/render.rs similarity index 100% rename from src/preset/query_selector/render.rs rename to promkit/src/preset/query_selector/render.rs diff --git a/src/preset/readline.rs b/promkit/src/preset/readline.rs similarity index 100% rename from src/preset/readline.rs rename to promkit/src/preset/readline.rs diff --git a/src/preset/readline/confirm.rs b/promkit/src/preset/readline/confirm.rs similarity index 100% rename from src/preset/readline/confirm.rs rename to promkit/src/preset/readline/confirm.rs diff --git a/src/preset/readline/keymap.rs b/promkit/src/preset/readline/keymap.rs similarity index 100% rename from src/preset/readline/keymap.rs rename to promkit/src/preset/readline/keymap.rs diff --git a/src/preset/readline/password.rs b/promkit/src/preset/readline/password.rs similarity index 100% rename from src/preset/readline/password.rs rename to promkit/src/preset/readline/password.rs diff --git a/src/preset/readline/render.rs b/promkit/src/preset/readline/render.rs similarity index 100% rename from src/preset/readline/render.rs rename to promkit/src/preset/readline/render.rs diff --git a/src/preset/tree.rs b/promkit/src/preset/tree.rs similarity index 100% rename from src/preset/tree.rs rename to promkit/src/preset/tree.rs diff --git a/src/preset/tree/keymap.rs b/promkit/src/preset/tree/keymap.rs similarity index 100% rename from src/preset/tree/keymap.rs rename to promkit/src/preset/tree/keymap.rs diff --git a/src/preset/tree/render.rs b/promkit/src/preset/tree/render.rs similarity index 100% rename from src/preset/tree/render.rs rename to promkit/src/preset/tree/render.rs diff --git a/src/snapshot.rs b/promkit/src/snapshot.rs similarity index 100% rename from src/snapshot.rs rename to promkit/src/snapshot.rs diff --git a/src/style.rs b/promkit/src/style.rs similarity index 100% rename from src/style.rs rename to promkit/src/style.rs diff --git a/src/suggest.rs b/promkit/src/suggest.rs similarity index 100% rename from src/suggest.rs rename to promkit/src/suggest.rs diff --git a/src/terminal.rs b/promkit/src/terminal.rs similarity index 100% rename from src/terminal.rs rename to promkit/src/terminal.rs diff --git a/src/validate.rs b/promkit/src/validate.rs similarity index 100% rename from src/validate.rs rename to promkit/src/validate.rs From 5ddcd9056399a3b96b3352d757e232c491d45cb7 Mon Sep 17 00:00:00 2001 From: ynqa Date: Sat, 6 Apr 2024 16:18:23 +0900 Subject: [PATCH 6/7] modify Cargo.toml for workspace --- Cargo.toml | 31 +++++-------------------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index c774edac..34c44d23 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,26 +1,5 @@ -[package] -name = "promkit" -version = "0.3.3" -authors = ["ynqa "] -edition = "2021" -description = "A toolkit for building your own interactive command-line tools" -repository = "https://github.com/ynqa/promkit" -license = "MIT" -readme = "README.md" - -[lib] -name = "promkit" -path = "src/lib.rs" - -[dependencies] -anyhow = "1.0.81" -crossterm = { version = "0.27.0", features = ["use-dev-tty"] } -indexmap = "2.2.3" -radix_trie = "0.2.1" -serde = { version = "1.0.197" } -serde_json = { version = "1.0.114", features = ["preserve_order"] } -thiserror = "1.0.50" -unicode-width = "0.1.8" - -[dev-dependencies] -strip-ansi-escapes = "0.2.0" +[workspace] +resolver = "2" +members = [ + "promkit", +] From 7224e6cfea67281050e56e02d1490eda7f9f589e Mon Sep 17 00:00:00 2001 From: ynqa Date: Sat, 6 Apr 2024 18:26:04 +0900 Subject: [PATCH 7/7] bump up version to v0.3.4 --- README.md | 2 +- promkit/Cargo.toml | 2 +- promkit/src/lib.rs | 18 +++++++++--------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index b7ce3979..3712ef1b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Put the package in your `Cargo.toml`. ```toml [dependencies] -promkit = "0.3.3" +promkit = "0.3.4" ``` ## Features diff --git a/promkit/Cargo.toml b/promkit/Cargo.toml index c774edac..46b77b34 100644 --- a/promkit/Cargo.toml +++ b/promkit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "promkit" -version = "0.3.3" +version = "0.3.4" authors = ["ynqa "] edition = "2021" description = "A toolkit for building your own interactive command-line tools" diff --git a/promkit/src/lib.rs b/promkit/src/lib.rs index 8bd99cbf..216befd4 100644 --- a/promkit/src/lib.rs +++ b/promkit/src/lib.rs @@ -11,7 +11,7 @@ //! //! ```toml //! [dependencies] -//! promkit = "0.3.3" +//! promkit = "0.3.4" //! ``` //! //! ## Features @@ -19,13 +19,13 @@ //! - Support cross-platform both UNIX and Windows owing to [crossterm](https://github.com/crossterm-rs/crossterm) //! - Various building methods //! - Preset; Support for quickly setting up a UI by providing simple parameters. -//! - [Readline](https://github.com/ynqa/promkit/tree/v0.3.3#readline) -//! - [Confirm](https://github.com/ynqa/promkit/tree/v0.3.3#confirm) -//! - [Password](https://github.com/ynqa/promkit/tree/v0.3.3#password) -//! - [Select](https://github.com/ynqa/promkit/tree/v0.3.3#select) -//! - [QuerySelect](https://github.com/ynqa/promkit/tree/v0.3.3#queryselect) -//! - [Checkbox](https://github.com/ynqa/promkit/tree/v0.3.3#checkbox) -//! - [Tree](https://github.com/ynqa/promkit/tree/v0.3.3#tree) +//! - [Readline](https://github.com/ynqa/promkit/tree/v0.3.4#readline) +//! - [Confirm](https://github.com/ynqa/promkit/tree/v0.3.4#confirm) +//! - [Password](https://github.com/ynqa/promkit/tree/v0.3.4#password) +//! - [Select](https://github.com/ynqa/promkit/tree/v0.3.4#select) +//! - [QuerySelect](https://github.com/ynqa/promkit/tree/v0.3.4#queryselect) +//! - [Checkbox](https://github.com/ynqa/promkit/tree/v0.3.4#checkbox) +//! - [Tree](https://github.com/ynqa/promkit/tree/v0.3.4#tree) //! - Combining various UI components. //! - They are provided with the same interface, allowing users to choose and //! assemble them according to their preferences. @@ -39,7 +39,7 @@ //! //! ## Examples/Demos //! -//! See [here](https://github.com/ynqa/promkit/tree/v0.3.2#examplesdemos) +//! See [here](https://github.com/ynqa/promkit/tree/v0.3.4#examplesdemos) //! //! ## Why *promkit*? //!