Skip to main content

RopeBuffer

Struct RopeBuffer 

Source
pub struct RopeBuffer { /* private fields */ }
Expand description

The open note’s text, cursor, selection and history.

Implementations§

Source§

impl RopeBuffer

Source

pub fn new(text: Text) -> Self

Source

pub fn replace(&mut self, text: Text)

Replace the whole buffer, dropping the history with it.

Source

pub fn text(&self) -> &Text

Source

pub fn snapshot(&self) -> Snapshot

Source

pub fn row(&self, row: usize) -> Option<Cow<'_, str>>

One row’s text, or None past the end.

Source

pub fn row_count(&self) -> usize

How many rows the buffer has. Never zero.

Source

pub fn rows(&self) -> Vec<String>

Every row, materialised.

Not a cache: nothing is maintained between calls, so the cost lands on the caller that wants a vector rather than on every edit. That is the whole difference from the shim this replaced.

Source

pub fn joined_rows(&self, first: usize, last: usize) -> String

Rows first..=last, joined with newlines.

Source

pub fn row_len(&self, row: usize) -> usize

Characters in one row.

Source

pub fn cursor(&self) -> (usize, usize)

Source

pub fn is_empty(&self) -> bool

Source

pub fn selection_range(&self) -> Option<((usize, usize), (usize, usize))>

Source

pub fn yank_text(&self) -> String

Source

pub fn set_yank_text(&mut self, text: impl Into<String>)

Source

pub fn search_pattern(&self) -> Option<&Regex>

Source

pub fn take_outcome(&mut self) -> EditOutcome

Source

pub fn edit<R>(&mut self, f: impl FnOnce(&mut Self) -> R) -> R

Run f as one undo group.

Every mutation inside lands in a single history entry, however many primitives it takes. Nested calls belong to the outermost group, so a compound action built from the single-mutation helpers is still one undo.

Source

pub fn continue_group(&mut self)

The next mutation joins the previous group instead of starting one.

The policy is the backend’s, because only it knows what the user was doing — mid-word against after a pause, inside an Insert session against having left it. This is the mechanism; typing_run and the vim engine are the two callers that hold an opinion.

Source

pub fn insert_str(&mut self, s: impl AsRef<str>) -> bool

Source

pub fn insert_char(&mut self, c: char)

Source

pub fn insert_newline(&mut self)

Source

pub fn delete_str(&mut self, clusters: usize) -> bool

Delete clusters grapheme clusters forward, a line break counting as one.

Clusters and not scalars, because a delete may not leave half a character behind: forward_by steps whole clusters, so a caller counting scalars over a flag or a ZWJ emoji spends the difference on the text after it.

Source

pub fn delete_char(&mut self) -> bool

Backspace.

Source

pub fn delete_next_char(&mut self) -> bool

Forward delete.

Source

pub fn delete_word(&mut self) -> bool

Source

pub fn delete_next_word(&mut self) -> bool

Source

pub fn cut(&mut self) -> bool

Source

pub fn copy(&mut self)

Copying reads: it leaves the selection where it is, and an empty one leaves the register alone rather than emptying it.

Source

pub fn paste(&mut self) -> bool

Source

pub fn undo(&mut self) -> bool

Source

pub fn redo(&mut self) -> bool

Source

pub fn cluster_at(&self, row: usize, col: usize) -> (usize, usize)

The character at column col of row, as its start and end columns.

One character on screen can be several chars in the buffer — ❤️ is two, a decomposed é is e plus U+0301 — so “the char under the cursor” is a grapheme cluster, and only its edges are positions the buffer accepts. A column inside a cluster belongs to that cluster; one at or past the row’s end gives the row’s end twice.

The edges are the text’s own (motion::next_cluster), so this can never call a column an edge that the buffer would then refuse.

Source

pub fn clusters_through(&self, row: usize, from: usize, to: usize) -> usize

How many characters (grapheme clusters) columns from..=to of row span. At least one.

One segmentation pass over the row — the same Unicode rule the text applies, over the same row, so the two agree on every edge inside it. Stepping motion::next_cluster per character instead is correct but re-checks context at every step, which on a paragraph-long row is a visible stall.

Source

pub fn col_after_clusters(&self, row: usize, col: usize, n: usize) -> usize

The column n characters right of the character at col on row, stopping at the row’s last character. One pass, as Self::clusters_through.

Source

pub fn set_mark(&mut self, name: char, (row, col): (usize, usize)) -> bool

Put mark name at (row, col). false, setting nothing, when the buffer has no such position.

From here on the mark follows the text it points at: rows added or removed above it carry it along, text typed before it on its row pushes it right, and deleting the text under it collapses it to where the deletion began. Undo and redo put it back where it was before and after each change. The edit buffer owns the marks, beside the cursor and the history that saves them.

Source

pub fn mark(&self, name: char) -> Option<(usize, usize)>

Where mark name points now, if it is set.

Source

pub fn move_cursor(&mut self, movement: CursorMove)

Move the cursor, extending a live selection.

Directional movement keeps the anchor deliberately: that is how vim’s Visual mode extends.

Source

pub fn jump_to(&mut self, row: usize, col: usize) -> bool

Move the cursor to (row, col), refusing a position the buffer cannot address rather than landing somewhere else.

Source

pub fn move_to(&mut self, to: Position)

Move to a position the caller worked out itself — a visual-line motion, which needs a layout the buffer does not have.

Source

pub fn start_selection(&mut self)

Source

pub fn cancel_selection(&mut self)

Source

pub fn select_all(&mut self)

Source

pub fn set_selection( &mut self, start: (usize, usize), end: (usize, usize), ) -> bool

Source

pub fn text_between( &self, start: (usize, usize), end: (usize, usize), ) -> Option<String>

The text between two (row, col) pairs, in either order; None when the range is empty or names a position the buffer cannot address.

Source

pub fn selection_text(&self) -> Option<String>

The selected text, or None when nothing — or nothing of width — is selected.

Source

pub fn indent_rows(&mut self, rows: RangeInclusive<usize>, dedent: bool) -> bool

Indent or dedent rows by one indent step, as one undo group — and one transaction.

Indenting puts indent_width spaces at the start of every row — always spaces, never a tab. Dedenting takes up to one step of leading spaces, or the run up to and including a first tab, which counts as a whole step: " \tfoo" loses both spaces and the tab and stops there.

The cursor keeps the character it sat on — its column moves by its own row’s change, so >> on the n of one leaves it on n, neovim’s rule — and a selection is put back the same way, endpoint by endpoint. Both fall out of the engine’s own mapping across the transaction, so the history entry holds the cursor’s real before and after, and an undo or redo lands where the user was. Rows past the end are ignored. Reports whether any text changed; a dedent that finds nothing to remove changes nothing and says so.

Source

pub fn set_search_pattern(&mut self, pattern: &str) -> Result<(), Error>

Source

pub fn search_forward(&mut self, match_cursor: bool) -> bool

Move the cursor to the next match. Never extends a selection.

Source

pub fn search_back(&mut self, match_cursor: bool) -> bool

Move the cursor to the previous match. Never extends a selection.

Source

pub fn search_repeat(&mut self, backward: bool) -> bool

Repeat the persisted pattern (vim n / N).

Source

pub fn match_at_cursor(&self) -> Option<((usize, usize), (usize, usize))>

The span of the match starting exactly at the cursor, if any.

Trait Implementations§

Source§

impl Debug for RopeBuffer

Source§

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

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

impl Default for RopeBuffer

Source§

fn default() -> Self

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

Auto Trait Implementations§

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more