TextArea

Struct TextArea 

Source
pub struct TextArea<'a> { /* private fields */ }
Expand description

Text area widget.

Example

Backend used is ropey, so large texts are no problem. Editing time increases with the number of styles applied. Everything below a million styles should be fine.

For emoji support this uses unicode_display_width which helps with those double-width emojis. Input of emojis strongly depends on the terminal. It may or may not work. And even with display there are sometimes strange glitches that I haven’t found yet.

Keyboard and mouse are implemented for crossterm, but it should be easy to extend to other event-types. Every interaction is available as function on the state.

Scrolling doesn’t depend on the cursor, but the editing and move functions take care that the cursor stays visible.

Text wrapping is available, hard line-breaks at the right margin, or decent word-wrapping.

You can directly access the underlying Rope for readonly purposes, and conversion from/to byte/char positions are available. That should probably be enough to write a parser that generates some styling.

The cursor must set externally on the ratatui Frame as usual. screen_cursor gives you the correct value. There is the inverse too set_screen_cursor For more interactions you can use screen_to_pos, and pos_to_screen. They calculate everything, even in the presence of more complex graphemes and those double-width emojis.

§Stateful

This widget implements StatefulWidget, you can use it with TextAreaState to handle common actions.

Implementations§

Source§

impl<'a> TextArea<'a>

Source

pub fn new() -> TextArea<'a>

New widget.

Source

pub fn styles_opt(self, styles: Option<TextStyle>) -> TextArea<'a>

Set the combined style.

Source

pub fn styles(self, styles: TextStyle) -> TextArea<'a>

Set the combined style.

Source

pub fn style(self, style: Style) -> TextArea<'a>

Base style.

Source

pub fn focus_style(self, style: Style) -> TextArea<'a>

Style when focused.

Source

pub fn select_style(self, style: Style) -> TextArea<'a>

Selection style.

Source

pub fn cursor_style(self, style: impl Into<Style>) -> TextArea<'a>

Style for a rendered cursor. Only used if cursor_type is RenderedCursor.

Source

pub fn text_style_idx(self, idx: usize, style: Style) -> TextArea<'a>

Indexed text-style.

Use TextAreaState::add_style() to refer a text range to one of these styles.

Source

pub fn text_style<T>(self, styles: T) -> TextArea<'a>
where T: IntoIterator<Item = Style>,

List of text-styles.

Use TextAreaState::add_style() to refer a text range to one of these styles.

Source

pub fn text_style_map<T>(self, styles: HashMap<usize, T>) -> TextArea<'a>
where T: Into<Style>,

Map of style_id -> text_style.

Use TextAreaState::add_style() to refer a text range to one of these styles.

Source

pub fn block(self, block: Block<'a>) -> TextArea<'a>

Block.

Source

pub fn scroll(self, scroll: Scroll<'a>) -> TextArea<'a>

Set both scrollbars.

Source

pub fn hscroll(self, scroll: Scroll<'a>) -> TextArea<'a>

Set the horizontal scrollbar.

Source

pub fn text_wrap(self, wrap: TextWrap) -> TextArea<'a>

Set the text wrapping.

Source

pub fn set_horizontal_max_offset(self, offset: u32) -> TextArea<'a>

Maximum offset the horizontal scrollbar.

This widget doesn’t try to find a correct maximum value to show with the horizontal scroll bar, but uses this fixed value instead. This is the maximum offset that can be reached by using the scrollbar.

Finding the maximum line length for a text is rather expensive, so this widget doesn’t even try.

This doesn’t limit the column that can be reached with cursor positioning, just what can be done via the scrollbar.

See [self.set_horizontal_overscroll]

Default is 255.

Source

pub fn set_horizontal_overscroll(self, overscroll: u32) -> TextArea<'a>

Maximum overscroll that can be reached by using the horizontal scrollbar and dragging beyond the area of the widget.

See [self.set_horizontal_max_offset]

Default is 16384.

Source

pub fn vscroll(self, scroll: Scroll<'a>) -> TextArea<'a>

Set the vertical scrollbar.

Source

pub fn width(&self) -> u16

Preferred width: 0

Source

pub fn height(&self) -> u16

Preferred height: 1

Trait Implementations§

Source§

impl<'a> Clone for TextArea<'a>

Source§

fn clone(&self) -> TextArea<'a>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for TextArea<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<'a> Default for TextArea<'a>

Source§

fn default() -> TextArea<'a>

Returns the “default value” for a type. Read more
Source§

impl<'a> StatefulWidget for &TextArea<'a>

Source§

type State = TextAreaState

State associated with the stateful widget. Read more
Source§

fn render( self, area: Rect, buf: &mut Buffer, state: &mut <&TextArea<'a> as StatefulWidget>::State, )

Draws the current state of the widget in the given buffer. That is the only method required to implement a custom stateful widget.
Source§

impl StatefulWidget for TextArea<'_>

Source§

type State = TextAreaState

State associated with the stateful widget. Read more
Source§

fn render( self, area: Rect, buf: &mut Buffer, state: &mut <TextArea<'_> as StatefulWidget>::State, )

Draws the current state of the widget in the given buffer. That is the only method required to implement a custom stateful widget.

Auto Trait Implementations§

§

impl<'a> Freeze for TextArea<'a>

§

impl<'a> RefUnwindSafe for TextArea<'a>

§

impl<'a> Send for TextArea<'a>

§

impl<'a> Sync for TextArea<'a>

§

impl<'a> Unpin for TextArea<'a>

§

impl<'a> UnwindSafe for TextArea<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.