pub struct Input { /* private fields */ }Expand description
The input buffer with cursor support.
Example:
use tui_input::Input;
let input: Input = "Hello World".into();
assert_eq!(input.cursor(), 11);
assert_eq!(input.to_string(), "Hello World");Implementations§
Source§impl Input
impl Input
Sourcepub fn new(value: String) -> Self
pub fn new(value: String) -> Self
Initialize a new instance with a given value Cursor will be set to the given value’s length.
Sourcepub fn with_value(self, value: String) -> Self
pub fn with_value(self, value: String) -> Self
Set the value manually. Cursor will be set to the given value’s length.
Sourcepub fn with_cursor(self, cursor: usize) -> Self
pub fn with_cursor(self, cursor: usize) -> Self
Set the cursor manually. If the input is larger than the value length, it’ll be auto adjusted.
pub fn reset(&mut self)
Sourcepub fn handle(&mut self, req: InputRequest) -> InputResponse
pub fn handle(&mut self, req: InputRequest) -> InputResponse
Handle request and emit response.
Sourcepub fn value(&self) -> &str
pub fn value(&self) -> &str
Get a reference to the current value.
Examples found in repository?
examples/crossterm_input.rs (line 21)
14fn main() -> Result<()> {
15 enable_raw_mode()?;
16 let stdout = stdout();
17 let mut stdout = stdout.lock();
18 execute!(stdout, Hide, EnterAlternateScreen, EnableMouseCapture)?;
19
20 let mut input: Input = "Hello ".into();
21 backend::write(&mut stdout, input.value(), input.cursor(), (0, 0), 15)?;
22 stdout.flush()?;
23
24 loop {
25 let event = read()?;
26
27 if let Event::Key(KeyEvent { code, .. }) = event {
28 match code {
29 KeyCode::Esc | KeyCode::Enter => {
30 break;
31 }
32 _ => {
33 if input.handle_event(&event).is_some() {
34 backend::write(
35 &mut stdout,
36 input.value(),
37 input.cursor(),
38 (0, 0),
39 15,
40 )?;
41 stdout.flush()?;
42 }
43 }
44 }
45 }
46 }
47
48 execute!(stdout, Show, LeaveAlternateScreen, DisableMouseCapture)?;
49 disable_raw_mode()?;
50 println!("{}", input);
51 Ok(())
52}Sourcepub fn cursor(&self) -> usize
pub fn cursor(&self) -> usize
Get the currect cursor placement.
Examples found in repository?
examples/crossterm_input.rs (line 21)
14fn main() -> Result<()> {
15 enable_raw_mode()?;
16 let stdout = stdout();
17 let mut stdout = stdout.lock();
18 execute!(stdout, Hide, EnterAlternateScreen, EnableMouseCapture)?;
19
20 let mut input: Input = "Hello ".into();
21 backend::write(&mut stdout, input.value(), input.cursor(), (0, 0), 15)?;
22 stdout.flush()?;
23
24 loop {
25 let event = read()?;
26
27 if let Event::Key(KeyEvent { code, .. }) = event {
28 match code {
29 KeyCode::Esc | KeyCode::Enter => {
30 break;
31 }
32 _ => {
33 if input.handle_event(&event).is_some() {
34 backend::write(
35 &mut stdout,
36 input.value(),
37 input.cursor(),
38 (0, 0),
39 15,
40 )?;
41 stdout.flush()?;
42 }
43 }
44 }
45 }
46 }
47
48 execute!(stdout, Show, LeaveAlternateScreen, DisableMouseCapture)?;
49 disable_raw_mode()?;
50 println!("{}", input);
51 Ok(())
52}Sourcepub fn visual_cursor(&self) -> usize
pub fn visual_cursor(&self) -> usize
Get the current cursor position with account for multispace characters.
Sourcepub fn visual_scroll(&self, width: usize) -> usize
pub fn visual_scroll(&self, width: usize) -> usize
Get the scroll position with account for multispace characters.
Trait Implementations§
Source§impl EventHandler for Input
impl EventHandler for Input
Source§fn handle_event(&mut self, evt: &CrosstermEvent) -> Option<StateChanged>
fn handle_event(&mut self, evt: &CrosstermEvent) -> Option<StateChanged>
Handle crossterm event.
Auto Trait Implementations§
impl Freeze for Input
impl RefUnwindSafe for Input
impl Send for Input
impl Sync for Input
impl Unpin for Input
impl UnwindSafe for Input
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> ToCompactString for Twhere
T: Display,
impl<T> ToCompactString for Twhere
T: Display,
Source§fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
Fallible version of
ToCompactString::to_compact_string() Read moreSource§fn to_compact_string(&self) -> CompactString
fn to_compact_string(&self) -> CompactString
Converts the given value to a
CompactString. Read more