diff --git a/README.md b/README.md
index 16c2f861..1cb054c9 100644
--- a/README.md
+++ b/README.md
@@ -63,17 +63,29 @@ cargo run --example readline
Code
```rust
-use promkit::{error::Result, preset::Readline};
+use promkit::{preset::readline::Readline, suggest::Suggest, Result};
fn main() -> Result {
- let mut p = Readline::default().title("Feel free to fill in").prompt()?;
+ let mut p = Readline::default()
+ .title("Hi!")
+ .enable_suggest(Suggest::from_iter([
+ "apple",
+ "applet",
+ "application",
+ "banana",
+ ]))
+ .validator(
+ |text| text.len() > 10,
+ |text| format!("Length must be over 10 but got {}", text.len()),
+ )
+ .prompt()?;
println!("result: {:?}", p.run()?);
Ok(())
}
```
-![readline](https://github.com/ynqa/promkit/assets/6745370/7f791483-2a66-4f55-86fc-e6235f021dd2)
+![readline](https://github.com/ynqa/promkit/assets/6745370/d124268e-9496-4c4b-83be-c734e4d03591)
### Confirm
@@ -90,17 +102,17 @@ cargo run --example confirm
Code
```rust
-use promkit::{error::Result, preset::Confirm};
+use promkit::{preset::confirm::Confirm, Result};
fn main() -> Result {
- let mut p = Confirm::new("Do you like programming?").prompt()?;
+ let mut p = Confirm::new("Do you have a pet?").prompt()?;
println!("result: {:?}", p.run()?);
Ok(())
}
```
-![confirm](https://github.com/ynqa/promkit/assets/6745370/061de1db-08e6-4d6b-8c33-04b81c15b47a)
+![confirm](https://github.com/ynqa/promkit/assets/6745370/ac9bac78-66cd-4653-a39f-6c9c0c24131f)
### Password
@@ -117,7 +129,7 @@ cargo run --example password
Code
```rust
-use promkit::{error::Result, preset::Password};
+use promkit::{preset::password::Password, Result};
fn main() -> Result {
let mut p = Password::default()
@@ -133,7 +145,7 @@ fn main() -> Result {
```
-![password](https://github.com/ynqa/promkit/assets/6745370/6f96276a-be18-4f14-bba3-b7db1dc8b5ee)
+![password](https://github.com/ynqa/promkit/assets/6745370/396356ef-47de-44bc-a8d4-d03c7ac66a2f)
### Listbox
@@ -149,7 +161,7 @@ cargo run --example listbox
Code
```rust
-use promkit::{error::Result, preset::Listbox};
+use promkit::{preset::listbox::Listbox, Result};
fn main() -> Result {
let mut p = Listbox::new(0..100)
@@ -162,7 +174,7 @@ fn main() -> Result {
```
-![listbox](https://github.com/ynqa/promkit/assets/6745370/1da81584-7703-4424-b595-8f7de403e53d)
+![listbox](https://github.com/ynqa/promkit/assets/6745370/0da1b1d0-bb17-4951-8ea8-3b09cd2eb86a)
### QuerySelector
@@ -178,7 +190,7 @@ cargo run --example query_selector
Code
```rust
-use promkit::{error::Result, preset::QuerySelector};
+use promkit::{preset::query_selector::QuerySelector, Result};
fn main() -> Result {
let mut p = QuerySelector::new(0..100, |text, items| -> Vec {
@@ -201,7 +213,7 @@ fn main() -> Result {
```
-![query_selector](https://github.com/ynqa/promkit/assets/6745370/750c4964-44f7-4dbd-98b3-338d59be1bef)
+![query_selector](https://github.com/ynqa/promkit/assets/6745370/7ac2ed54-9f9e-4735-bffb-72f7cee06f6d)
### Checkbox
@@ -217,31 +229,31 @@ cargo run --example checkbox
Code
```rust
-use promkit::{error::Result, preset::Checkbox};
+use promkit::{preset::checkbox::Checkbox, Result};
fn main() -> Result {
let mut p = Checkbox::new(vec![
- "Apple",
- "Banana",
- "Orange",
- "Mango",
- "Strawberry",
- "Pineapple",
- "Grape",
- "Watermelon",
- "Kiwi",
- "Pear",
- ])
- .title("Please list as many of your favorite fruits as you can.")
- .checkbox_lines(5)
- .prompt()?;
+ "Apple",
+ "Banana",
+ "Orange",
+ "Mango",
+ "Strawberry",
+ "Pineapple",
+ "Grape",
+ "Watermelon",
+ "Kiwi",
+ "Pear",
+ ])
+ .title("What are your favorite fruits?")
+ .checkbox_lines(5)
+ .prompt()?;
println!("result: {:?}", p.run()?);
Ok(())
}
```
-![checkbox](https://github.com/ynqa/promkit/assets/6745370/e9c41dab-d0a4-45c2-91d4-4517c5970ffb)
+![checkbox](https://github.com/ynqa/promkit/assets/6745370/350b16ce-6ef4-46f2-9466-d01b9dab4eaf)
### Tree
@@ -257,7 +269,7 @@ cargo run --example tree
Code
```rust
-use promkit::{error::Result, preset::Tree, tree::Node};
+use promkit::{preset::tree::Tree, tree::Node, Result};
fn main() -> Result {
let mut p = Tree::new(Node::try_from(&std::env::current_dir()?.join("src"))?)
@@ -270,7 +282,7 @@ fn main() -> Result {
```
-![tree](https://github.com/ynqa/promkit/assets/6745370/fb720ac7-398f-459c-99f0-f453963f9c11)
+![tree](https://github.com/ynqa/promkit/assets/6745370/624cd902-5362-4baf-ad5a-f3478ed6b579)
### JSON
@@ -286,37 +298,24 @@ cargo run --example json
Code
```rust
-use promkit::{error::Result, json::JsonNode, preset::Json};
+use promkit::{json::JsonNode, preset::json::Json, Result};
fn main() -> Result {
let mut p = Json::new(JsonNode::try_from(
r#"{
- "number": 1,
+ "number": 9,
"map": {
- "string1": "aaa",
- "string2": "bbb"
+ "entry1": "first",
+ "entry2": "second"
},
"list": [
"abc",
"def"
- ],
- "map_in_map": {
- "nested": {
- "leaf": "eof"
- }
- },
- "map_in_list": [
- {
- "map1": 1
- },
- {
- "map2": 2
- }
]
}"#,
)?)
.title("JSON viewer")
- .json_lines(10)
+ .json_lines(5)
.prompt()?;
println!("result: {:?}", p.run()?);
Ok(())
@@ -324,7 +323,7 @@ fn main() -> Result {
```
-![json](https://github.com/ynqa/promkit/assets/6745370/fb2afca1-1407-49ee-bd78-1a46c05f24b6)
+![json](https://github.com/ynqa/promkit/assets/6745370/751af3ae-5aff-45ca-8729-34cd004ee7d9)
## Why *promkit*?
diff --git a/examples/json.rs b/examples/json.rs
index ccd6a435..bfdf74e6 100644
--- a/examples/json.rs
+++ b/examples/json.rs
@@ -3,32 +3,19 @@ use promkit::{json::JsonNode, preset::json::Json, Result};
fn main() -> Result {
let mut p = Json::new(JsonNode::try_from(
r#"{
- "number": 1,
+ "number": 9,
"map": {
- "string1": "aaa",
- "string2": "bbb"
+ "entry1": "first",
+ "entry2": "second"
},
"list": [
"abc",
"def"
- ],
- "map_in_map": {
- "nested": {
- "leaf": "eof"
- }
- },
- "map_in_list": [
- {
- "map1": 1
- },
- {
- "map2": 2
- }
]
}"#,
)?)
.title("JSON viewer")
- .json_lines(10)
+ .json_lines(5)
.prompt()?;
println!("result: {:?}", p.run()?);
Ok(())
diff --git a/tapes/json.tape b/tapes/json.tape
index 21790d49..fef6298b 100644
--- a/tapes/json.tape
+++ b/tapes/json.tape
@@ -11,5 +11,7 @@ Set Height 600
Type@50ms "cargo run -q --example json" Enter Sleep 1s
Down@300ms 2 Sleep 1s
Space Sleep 1s
-Down@200ms 7 Sleep 1s
+Down@300ms 1 Sleep 1s
+Space Sleep 1s
+Up@300ms 2 Sleep 1s
Enter Sleep 2s