Skip to main content

Event

Enum Event 

Source
pub enum Event {
Show 37 variants Insert { position: usize, text: String, cursor_id: CursorId, }, Delete { range: Range<usize>, deleted_text: String, cursor_id: CursorId, }, MoveCursor { cursor_id: CursorId, old_position: usize, new_position: usize, old_anchor: Option<usize>, new_anchor: Option<usize>, old_sticky_column: usize, new_sticky_column: usize, }, AddCursor { cursor_id: CursorId, position: usize, anchor: Option<usize>, }, RemoveCursor { cursor_id: CursorId, position: usize, anchor: Option<usize>, }, Scroll { line_offset: isize, }, SetViewport { top_line: usize, }, Recenter, SetAnchor { cursor_id: CursorId, position: usize, }, ClearAnchor { cursor_id: CursorId, }, ChangeMode { mode: String, }, AddOverlay { namespace: Option<OverlayNamespace>, range: Range<usize>, face: OverlayFace, priority: i32, message: Option<String>, extend_to_line_end: bool, url: Option<String>, }, RemoveOverlay { handle: OverlayHandle, }, RemoveOverlaysInRange { range: Range<usize>, }, ClearNamespace { namespace: OverlayNamespace, }, ClearOverlays, ShowPopup { popup: PopupData, }, HidePopup, ClearPopups, PopupSelectNext, PopupSelectPrev, PopupPageDown, PopupPageUp, AddMarginAnnotation { line: usize, position: MarginPositionData, content: MarginContentData, annotation_id: Option<String>, }, RemoveMarginAnnotation { annotation_id: String, }, RemoveMarginAnnotationsAtLine { line: usize, position: MarginPositionData, }, ClearMarginPosition { position: MarginPositionData, }, ClearMargins, SetLineNumbers { enabled: bool, }, SplitPane { direction: SplitDirection, new_buffer_id: BufferId, ratio: f32, }, CloseSplit { split_id: SplitId, }, SetActiveSplit { split_id: SplitId, }, AdjustSplitRatio { split_id: SplitId, delta: f32, }, NextSplit, PrevSplit, Batch { events: Vec<Event>, description: String, }, BulkEdit { old_snapshot: Option<Arc<BufferSnapshot>>, new_snapshot: Option<Arc<BufferSnapshot>>, old_cursors: Vec<(CursorId, usize, Option<usize>)>, new_cursors: Vec<(CursorId, usize, Option<usize>)>, description: String, edits: Vec<(usize, usize, usize)>, displaced_markers: Vec<(u64, usize)>, },
}
Expand description

Core event types representing all possible state changes

Variants§

§

Insert

Insert text at a position

Fields

§position: usize
§text: String
§cursor_id: CursorId
§

Delete

Delete a range of text

Fields

§range: Range<usize>
§deleted_text: String
§cursor_id: CursorId
§

MoveCursor

Move a cursor to a new position

Fields

§cursor_id: CursorId
§old_position: usize
§new_position: usize
§old_anchor: Option<usize>
§new_anchor: Option<usize>
§old_sticky_column: usize
§new_sticky_column: usize
§

AddCursor

Add a new cursor

Fields

§cursor_id: CursorId
§position: usize
§anchor: Option<usize>
§

RemoveCursor

Remove a cursor (stores cursor state for undo)

Fields

§cursor_id: CursorId
§position: usize
§anchor: Option<usize>
§

Scroll

Scroll the viewport

Fields

§line_offset: isize
§

SetViewport

Set viewport to specific position

Fields

§top_line: usize
§

Recenter

Center the viewport on the cursor

§

SetAnchor

Set the anchor (selection start) for a cursor

Fields

§cursor_id: CursorId
§position: usize
§

ClearAnchor

Clear the anchor and reset deselect_on_move for a cursor Used to cancel Emacs mark mode

Fields

§cursor_id: CursorId
§

ChangeMode

Change mode (if implementing modal editing)

Fields

§mode: String
§

AddOverlay

Add an overlay (for decorations like underlines, highlights)

Fields

§range: Range<usize>
§priority: i32
§message: Option<String>
§extend_to_line_end: bool

Whether to extend the overlay’s background to the end of the visual line

§url: Option<String>

Optional URL for OSC 8 terminal hyperlinks

§

RemoveOverlay

Remove overlay by handle

Fields

§

RemoveOverlaysInRange

Remove all overlays in a range

Fields

§range: Range<usize>
§

ClearNamespace

Clear all overlays in a namespace

Fields

§

ClearOverlays

Clear all overlays

§

ShowPopup

Show a popup

Fields

§

HidePopup

Hide the topmost popup

§

ClearPopups

Clear all popups

§

PopupSelectNext

Navigate popup selection (for list popups)

§

PopupSelectPrev

§

PopupPageDown

§

PopupPageUp

§

AddMarginAnnotation

Margin events Add a margin annotation

Fields

§line: usize
§annotation_id: Option<String>
§

RemoveMarginAnnotation

Remove margin annotation by ID

Fields

§annotation_id: String
§

RemoveMarginAnnotationsAtLine

Remove all margin annotations at a specific line

Fields

§line: usize
§

ClearMarginPosition

Clear all margin annotations in a position

Fields

§

ClearMargins

Clear all margin annotations

§

SetLineNumbers

Enable/disable line numbers

Fields

§enabled: bool
§

SplitPane

Split view events Split the active pane

Fields

§direction: SplitDirection
§new_buffer_id: BufferId
§ratio: f32
§

CloseSplit

Close a split pane

Fields

§split_id: SplitId
§

SetActiveSplit

Set the active split pane

Fields

§split_id: SplitId
§

AdjustSplitRatio

Adjust the split ratio

Fields

§split_id: SplitId
§delta: f32
§

NextSplit

Navigate to next split

§

PrevSplit

Navigate to previous split

§

Batch

Batch of events that should be undone/redone atomically Used for multi-cursor operations where all cursors perform the same action

Fields

§events: Vec<Event>
§description: String
§

BulkEdit

Efficient bulk edit that stores tree snapshots for O(1) undo/redo Used for multi-cursor operations, toggle comment, indent/dedent, etc. This avoids O(n²) complexity by applying all edits in a single tree pass.

Key insight: PieceTree uses Arc (persistent data structure), so storing trees for undo/redo is O(1) (Arc clone), not O(n) (content copy).

Fields

§old_snapshot: Option<Arc<BufferSnapshot>>

Buffer state before the edit (for undo)

§new_snapshot: Option<Arc<BufferSnapshot>>

Buffer state after the edit (for redo)

§old_cursors: Vec<(CursorId, usize, Option<usize>)>

Cursor states before the edit

§new_cursors: Vec<(CursorId, usize, Option<usize>)>

Cursor states after the edit

§description: String

Human-readable description

§edits: Vec<(usize, usize, usize)>

Edit operations as (position, delete_len, insert_len), sorted descending by position. Used to replay marker adjustments on undo/redo:

  • On redo: replayed as-is (same adjustments as the forward path)
  • On undo: inverse() swaps del_len/ins_len (reverse adjustments)
§displaced_markers: Vec<(u64, usize)>

Marker positions displaced by deletions: (marker_id_raw, original_byte_position). On undo, after marker adjustments, these markers are restored to their original positions. This fixes the limitation where markers inside a deleted range collapse and can’t be precisely restored by undo.

Implementations§

Source§

impl Event

Source

pub fn inverse(&self) -> Option<Self>

Returns the inverse event for undo functionality Uses UNDO_SENTINEL cursor_id to avoid moving the cursor during undo

Source

pub fn modifies_buffer(&self) -> bool

Returns true if this event modifies the buffer content

Source

pub fn is_write_action(&self) -> bool

Returns true if this event is a write action (modifies state in a way that should be undoable) Returns false for readonly actions like cursor movement, scrolling, viewport changes, etc.

Write actions include:

  • Buffer modifications (Insert, Delete)
  • Cursor structure changes (AddCursor, RemoveCursor)
  • Batches containing write actions

Readonly actions include:

  • Cursor movement (MoveCursor)
  • Scrolling and viewport changes (Scroll, SetViewport)
  • UI events (overlays, popups, margins, mode changes, etc.)
Source

pub fn cursor_id(&self) -> Option<CursorId>

Returns the cursor ID associated with this event, if any

Trait Implementations§

Source§

impl Clone for Event

Source§

fn clone(&self) -> Event

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 Debug for Event

Source§

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

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

impl<'de> Deserialize<'de> for Event

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl EventHooks for Event

Source§

fn before_hook(&self, buffer_id: BufferId) -> Option<HookArgs>

Get the “before” hook args for this event (if any)
Source§

fn after_hook(&self, buffer_id: BufferId) -> Option<HookArgs>

Get the “after” hook args for this event (if any)
Source§

impl Serialize for Event

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Event

§

impl RefUnwindSafe for Event

§

impl Send for Event

§

impl Sync for Event

§

impl Unpin for Event

§

impl UnsafeUnpin for Event

§

impl UnwindSafe for Event

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> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
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<'a, T> FromIn<'a, T> for T

Source§

fn from_in(t: T, _: &'a Allocator) -> T

Converts to this type from the input type within the given allocator.
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<'a, T, U> IntoIn<'a, U> for T
where U: FromIn<'a, T>,

Source§

fn into_in(self, allocator: &'a Allocator) -> U

Converts this type into the (usually inferred) input type within the given allocator.
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> Same for T

Source§

type Output = T

Should always be Self
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> TryClone for T
where T: Clone,

Source§

fn try_clone(&self) -> Result<T, Error>

Clones self, possibly returning an error.
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.
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
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> ParallelSend for T