pub struct Sort<'a> { /* private fields */ }
Expand description
Renders a sort prompt.
Returns list of indices in original items list sorted according to user input.
Example
use dialoguer::Sort;
fn main() {
let items = vec!["foo", "bar", "baz"];
let ordered = Sort::new()
.with_prompt("Which order do you prefer?")
.items(&items)
.interact()
.unwrap();
println!("You prefer:");
for i in ordered {
println!("{}", items[i]);
}
}
Implementations§
source§impl Sort<'_>
impl Sort<'_>
sourcepub fn clear(self, val: bool) -> Self
pub fn clear(self, val: bool) -> Self
Sets the clear behavior of the menu.
The default is to clear the menu after user interaction.
sourcepub fn max_length(self, val: usize) -> Self
pub fn max_length(self, val: usize) -> Self
Sets an optional max length for a page
Max length is disabled by None
Examples found in repository?
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
fn main() {
let list = &[
"Ice Cream",
"Vanilla Cupcake",
"Chocolate Muffin",
"A Pile of sweet, sweet mustard",
];
let sorted = Sort::with_theme(&ColorfulTheme::default())
.with_prompt("Order your foods by preference")
.items(&list[..])
.interact()
.unwrap();
println!("Your favorite item:");
println!(" {}", list[sorted[0]]);
println!("Your least favorite item:");
println!(" {}", list[sorted[sorted.len() - 1]]);
let sorted = Sort::with_theme(&ColorfulTheme::default())
.with_prompt("Order your foods by preference")
.items(&list[..])
.max_length(2)
.interact()
.unwrap();
println!("Your favorite item:");
println!(" {}", list[sorted[0]]);
println!("Your least favorite item:");
println!(" {}", list[sorted[sorted.len() - 1]]);
}
sourcepub fn items<T: ToString>(self, items: &[T]) -> Self
pub fn items<T: ToString>(self, items: &[T]) -> Self
Adds multiple items to the selector.
Examples found in repository?
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
fn main() {
let list = &[
"Ice Cream",
"Vanilla Cupcake",
"Chocolate Muffin",
"A Pile of sweet, sweet mustard",
];
let sorted = Sort::with_theme(&ColorfulTheme::default())
.with_prompt("Order your foods by preference")
.items(&list[..])
.interact()
.unwrap();
println!("Your favorite item:");
println!(" {}", list[sorted[0]]);
println!("Your least favorite item:");
println!(" {}", list[sorted[sorted.len() - 1]]);
let sorted = Sort::with_theme(&ColorfulTheme::default())
.with_prompt("Order your foods by preference")
.items(&list[..])
.max_length(2)
.interact()
.unwrap();
println!("Your favorite item:");
println!(" {}", list[sorted[0]]);
println!("Your least favorite item:");
println!(" {}", list[sorted[sorted.len() - 1]]);
}
More examples
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
fn main() {
let items = &[
"Ice Cream",
"Vanilla Cupcake",
"Chocolate Muffin",
"A Pile of sweet, sweet mustard",
];
let term = Term::buffered_stderr();
let theme = ColorfulTheme::default();
println!("All the following controls are run in a buffered terminal");
Confirm::with_theme(&theme)
.with_prompt("Do you want to continue?")
.interact_on(&term)
.unwrap();
let _: String = Input::with_theme(&theme)
.with_prompt("Your name")
.interact_on(&term)
.unwrap();
Select::with_theme(&theme)
.with_prompt("Pick an item")
.items(items)
.interact_on(&term)
.unwrap();
MultiSelect::with_theme(&theme)
.with_prompt("Pick some items")
.items(items)
.interact_on(&term)
.unwrap();
Sort::with_theme(&theme)
.with_prompt("Order these items")
.items(items)
.interact_on(&term)
.unwrap();
}
sourcepub fn with_prompt<S: Into<String>>(self, prompt: S) -> Self
pub fn with_prompt<S: Into<String>>(self, prompt: S) -> Self
Prefaces the menu with a prompt.
By default, when a prompt is set the system also prints out a confirmation after
the selection. You can opt-out of this with report
.
Examples found in repository?
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
fn main() {
let list = &[
"Ice Cream",
"Vanilla Cupcake",
"Chocolate Muffin",
"A Pile of sweet, sweet mustard",
];
let sorted = Sort::with_theme(&ColorfulTheme::default())
.with_prompt("Order your foods by preference")
.items(&list[..])
.interact()
.unwrap();
println!("Your favorite item:");
println!(" {}", list[sorted[0]]);
println!("Your least favorite item:");
println!(" {}", list[sorted[sorted.len() - 1]]);
let sorted = Sort::with_theme(&ColorfulTheme::default())
.with_prompt("Order your foods by preference")
.items(&list[..])
.max_length(2)
.interact()
.unwrap();
println!("Your favorite item:");
println!(" {}", list[sorted[0]]);
println!("Your least favorite item:");
println!(" {}", list[sorted[sorted.len() - 1]]);
}
More examples
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
fn main() {
let items = &[
"Ice Cream",
"Vanilla Cupcake",
"Chocolate Muffin",
"A Pile of sweet, sweet mustard",
];
let term = Term::buffered_stderr();
let theme = ColorfulTheme::default();
println!("All the following controls are run in a buffered terminal");
Confirm::with_theme(&theme)
.with_prompt("Do you want to continue?")
.interact_on(&term)
.unwrap();
let _: String = Input::with_theme(&theme)
.with_prompt("Your name")
.interact_on(&term)
.unwrap();
Select::with_theme(&theme)
.with_prompt("Pick an item")
.items(items)
.interact_on(&term)
.unwrap();
MultiSelect::with_theme(&theme)
.with_prompt("Pick some items")
.items(items)
.interact_on(&term)
.unwrap();
Sort::with_theme(&theme)
.with_prompt("Order these items")
.items(items)
.interact_on(&term)
.unwrap();
}
sourcepub fn report(self, val: bool) -> Self
pub fn report(self, val: bool) -> Self
Indicates whether to report the selected order after interaction.
The default is to report the selected order.
sourcepub fn interact(self) -> Result<Vec<usize>>
pub fn interact(self) -> Result<Vec<usize>>
Enables user interaction and returns the result.
The user can order the items with the ‘Space’ bar and the arrows. On ‘Enter’ ordered list of the incides of items will be returned.
The dialog is rendered on stderr.
Result contains Vec<index>
if user hit ‘Enter’.
This unlike interact_opt
does not allow to quit with ‘Esc’ or ‘q’.
Examples found in repository?
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
fn main() {
let list = &[
"Ice Cream",
"Vanilla Cupcake",
"Chocolate Muffin",
"A Pile of sweet, sweet mustard",
];
let sorted = Sort::with_theme(&ColorfulTheme::default())
.with_prompt("Order your foods by preference")
.items(&list[..])
.interact()
.unwrap();
println!("Your favorite item:");
println!(" {}", list[sorted[0]]);
println!("Your least favorite item:");
println!(" {}", list[sorted[sorted.len() - 1]]);
let sorted = Sort::with_theme(&ColorfulTheme::default())
.with_prompt("Order your foods by preference")
.items(&list[..])
.max_length(2)
.interact()
.unwrap();
println!("Your favorite item:");
println!(" {}", list[sorted[0]]);
println!("Your least favorite item:");
println!(" {}", list[sorted[sorted.len() - 1]]);
}
sourcepub fn interact_opt(self) -> Result<Option<Vec<usize>>>
pub fn interact_opt(self) -> Result<Option<Vec<usize>>>
Enables user interaction and returns the result.
The user can order the items with the ‘Space’ bar and the arrows. On ‘Enter’ ordered list of the incides of items will be returned.
The dialog is rendered on stderr.
Result contains Some(Vec<index>)
if user hit ‘Enter’ or None
if user cancelled with ‘Esc’ or ‘q’.
Example
use dialoguer::Sort;
fn main() {
let items = vec!["foo", "bar", "baz"];
let ordered = Sort::new()
.items(&items)
.interact_opt()
.unwrap();
match ordered {
Some(positions) => {
println!("You prefer:");
for i in positions {
println!("{}", items[i]);
}
},
None => println!("You did not prefer anything.")
}
}
sourcepub fn interact_on(self, term: &Term) -> Result<Vec<usize>>
pub fn interact_on(self, term: &Term) -> Result<Vec<usize>>
Like interact
but allows a specific terminal to be set.
Examples found in repository?
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
fn main() {
let items = &[
"Ice Cream",
"Vanilla Cupcake",
"Chocolate Muffin",
"A Pile of sweet, sweet mustard",
];
let term = Term::buffered_stderr();
let theme = ColorfulTheme::default();
println!("All the following controls are run in a buffered terminal");
Confirm::with_theme(&theme)
.with_prompt("Do you want to continue?")
.interact_on(&term)
.unwrap();
let _: String = Input::with_theme(&theme)
.with_prompt("Your name")
.interact_on(&term)
.unwrap();
Select::with_theme(&theme)
.with_prompt("Pick an item")
.items(items)
.interact_on(&term)
.unwrap();
MultiSelect::with_theme(&theme)
.with_prompt("Pick some items")
.items(items)
.interact_on(&term)
.unwrap();
Sort::with_theme(&theme)
.with_prompt("Order these items")
.items(items)
.interact_on(&term)
.unwrap();
}
sourcepub fn interact_on_opt(self, term: &Term) -> Result<Option<Vec<usize>>>
pub fn interact_on_opt(self, term: &Term) -> Result<Option<Vec<usize>>>
Like interact_opt
but allows a specific terminal to be set.
source§impl<'a> Sort<'a>
impl<'a> Sort<'a>
sourcepub fn with_theme(theme: &'a dyn Theme) -> Self
pub fn with_theme(theme: &'a dyn Theme) -> Self
Creates a sort prompt with a specific theme.
Example
use dialoguer::{theme::ColorfulTheme, Sort};
fn main() {
let ordered = Sort::with_theme(&ColorfulTheme::default())
.items(&["foo", "bar", "baz"])
.interact()
.unwrap();
}
Examples found in repository?
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
fn main() {
let list = &[
"Ice Cream",
"Vanilla Cupcake",
"Chocolate Muffin",
"A Pile of sweet, sweet mustard",
];
let sorted = Sort::with_theme(&ColorfulTheme::default())
.with_prompt("Order your foods by preference")
.items(&list[..])
.interact()
.unwrap();
println!("Your favorite item:");
println!(" {}", list[sorted[0]]);
println!("Your least favorite item:");
println!(" {}", list[sorted[sorted.len() - 1]]);
let sorted = Sort::with_theme(&ColorfulTheme::default())
.with_prompt("Order your foods by preference")
.items(&list[..])
.max_length(2)
.interact()
.unwrap();
println!("Your favorite item:");
println!(" {}", list[sorted[0]]);
println!("Your least favorite item:");
println!(" {}", list[sorted[sorted.len() - 1]]);
}
More examples
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
fn main() {
let items = &[
"Ice Cream",
"Vanilla Cupcake",
"Chocolate Muffin",
"A Pile of sweet, sweet mustard",
];
let term = Term::buffered_stderr();
let theme = ColorfulTheme::default();
println!("All the following controls are run in a buffered terminal");
Confirm::with_theme(&theme)
.with_prompt("Do you want to continue?")
.interact_on(&term)
.unwrap();
let _: String = Input::with_theme(&theme)
.with_prompt("Your name")
.interact_on(&term)
.unwrap();
Select::with_theme(&theme)
.with_prompt("Pick an item")
.items(items)
.interact_on(&term)
.unwrap();
MultiSelect::with_theme(&theme)
.with_prompt("Pick some items")
.items(items)
.interact_on(&term)
.unwrap();
Sort::with_theme(&theme)
.with_prompt("Order these items")
.items(items)
.interact_on(&term)
.unwrap();
}