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 value_and_reset(&mut self) -> String
pub fn value_and_reset(&mut self) -> String
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/ratatui_crossterm_input.rs (line 117)
109 fn render_input(&self, frame: &mut Frame, area: Rect) {
110 // keep 2 for borders and 1 for cursor
111 let width = area.width.max(3) - 3;
112 let scroll = self.input.visual_scroll(width as usize);
113 let style = match self.input_mode {
114 InputMode::Normal => Style::default(),
115 InputMode::Editing => Color::Yellow.into(),
116 };
117 let input = Paragraph::new(self.input.value())
118 .style(style)
119 .scroll((0, scroll as u16))
120 .block(Block::bordered().title("Input"));
121 frame.render_widget(input, area);
122
123 if self.input_mode == InputMode::Editing {
124 // Ratatui hides the cursor unless it's explicitly set. Position the cursor past the
125 // end of the input text and one line down from the border to the input line
126 let x = self.input.visual_cursor().max(scroll) - scroll + 1;
127 frame.set_cursor_position((area.x + x as u16, area.y + 1))
128 }
129 }
Sourcepub fn visual_cursor(&self) -> usize
pub fn visual_cursor(&self) -> usize
Get the current cursor position with account for multispace characters.
Examples found in repository?
examples/ratatui_crossterm_input.rs (line 126)
109 fn render_input(&self, frame: &mut Frame, area: Rect) {
110 // keep 2 for borders and 1 for cursor
111 let width = area.width.max(3) - 3;
112 let scroll = self.input.visual_scroll(width as usize);
113 let style = match self.input_mode {
114 InputMode::Normal => Style::default(),
115 InputMode::Editing => Color::Yellow.into(),
116 };
117 let input = Paragraph::new(self.input.value())
118 .style(style)
119 .scroll((0, scroll as u16))
120 .block(Block::bordered().title("Input"));
121 frame.render_widget(input, area);
122
123 if self.input_mode == InputMode::Editing {
124 // Ratatui hides the cursor unless it's explicitly set. Position the cursor past the
125 // end of the input text and one line down from the border to the input line
126 let x = self.input.visual_cursor().max(scroll) - scroll + 1;
127 frame.set_cursor_position((area.x + x as u16, area.y + 1))
128 }
129 }
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.
Examples found in repository?
examples/ratatui_crossterm_input.rs (line 112)
109 fn render_input(&self, frame: &mut Frame, area: Rect) {
110 // keep 2 for borders and 1 for cursor
111 let width = area.width.max(3) - 3;
112 let scroll = self.input.visual_scroll(width as usize);
113 let style = match self.input_mode {
114 InputMode::Normal => Style::default(),
115 InputMode::Editing => Color::Yellow.into(),
116 };
117 let input = Paragraph::new(self.input.value())
118 .style(style)
119 .scroll((0, scroll as u16))
120 .block(Block::bordered().title("Input"));
121 frame.render_widget(input, area);
122
123 if self.input_mode == InputMode::Editing {
124 // Ratatui hides the cursor unless it's explicitly set. Position the cursor past the
125 // end of the input text and one line down from the border to the input line
126 let x = self.input.visual_cursor().max(scroll) - scroll + 1;
127 frame.set_cursor_position((area.x + x as u16, area.y + 1))
128 }
129 }
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