Struct EditCore
pub struct EditCore { /* private fields */ }Expand description
The caret + selection model, the IME composition in progress, and the
field’s admission filter. Selection offsets are bytes into the bound
text (matching text_selection and cosmic-text’s
byte-indexed layout).
The composition can be part of a secret being typed: Self::clear_preedit
zeroes it, and an owner of secret text calls it before dropping the core.
Implementations§
§impl EditCore
impl EditCore
pub fn set_filter(&mut self, filter: Option<fn(char) -> bool>)
pub fn set_filter(&mut self, filter: Option<fn(char) -> bool>)
Install (or clear) the per-character admission filter.
pub fn admit<'a>(&self, s: &'a str) -> Cow<'a, str>
pub fn admit<'a>(&self, s: &'a str) -> Cow<'a, str>
s with every character the filter rejects removed.
pub fn affinity(&self) -> TextAffinity
pub fn affinity(&self) -> TextAffinity
The caret’s visual side at an ambiguous (bidi / soft-wrap) boundary.
pub fn caret_position(&self) -> TextPosition
pub fn caret_position(&self) -> TextPosition
Live caret offset plus its visual side at an ambiguous boundary.
pub fn has_selection(&self) -> bool
pub fn has_selection(&self) -> bool
Whether any characters are selected.
pub fn selected_range(&self) -> Option<Range<usize>>
pub fn selected_range(&self) -> Option<Range<usize>>
The selected byte range, None when collapsed.
pub fn set_caret_position(&mut self, position: TextPosition)
pub fn set_caret_position(&mut self, position: TextPosition)
Move to an exact shaped position, collapsing the selection.
pub fn set_selection(&mut self, anchor: usize, cursor: usize)
pub fn set_selection(&mut self, anchor: usize, cursor: usize)
Set both endpoints explicitly.
pub fn set_selection_position(&mut self, anchor: usize, cursor: TextPosition)
pub fn set_selection_position(&mut self, anchor: usize, cursor: TextPosition)
Set both endpoints and the caret’s visual side.
pub fn collapse(&mut self)
pub fn collapse(&mut self)
Collapse the selection onto the cursor.
pub fn clamp_to(&mut self, text: &str)
pub fn clamp_to(&mut self, text: &str)
Clamp both endpoints into [0, len] and onto grapheme boundaries. Call after
the bound text changed underneath the caret (a remote / external edit) so
motion never slices a code point.
pub fn select_all(&mut self, text: &str)
pub fn select_all(&mut self, text: &str)
Select the entire buffer.
pub fn motion(&mut self, text: &str, m: Motion, extend: bool)
pub fn motion(&mut self, text: &str, m: Motion, extend: bool)
Apply a caret motion. extend keeps the anchor fixed (shift-select). A
plain (non-extend) horizontal step with a live selection collapses to
the near edge rather than stepping past it — the native editor
behaviour.
pub fn motion_to(&mut self, m: Motion, target: TextPosition, extend: bool)
pub fn motion_to(&mut self, m: Motion, target: TextPosition, extend: bool)
Apply motion m whose destination the host already resolved through
laid-out geometry (visual bidi order, a soft-wrapped row edge). Same
selection rules as Self::motion.
pub fn place(&mut self, byte: usize, extend: bool)
pub fn place(&mut self, byte: usize, extend: bool)
Seat the caret from a click at byte byte; extend (shift-click) keeps
the anchor so the selection grows.
pub fn place_position(&mut self, position: TextPosition, extend: bool)
pub fn place_position(&mut self, position: TextPosition, extend: bool)
Seat the caret from an exact shaped position.
pub fn select_word(&mut self, text: &str, byte: usize)
pub fn select_word(&mut self, text: &str, byte: usize)
Select the word under byte (double-click) and anchor to it.
pub fn select_line(&mut self, text: &str, byte: usize)
pub fn select_line(&mut self, text: &str, byte: usize)
Select the \n-delimited line under byte (triple-click).
pub fn insert(&mut self, s: &str) -> Edit
pub fn insert(&mut self, s: &str) -> Edit
Insert s through the admission filter, replacing any selection.
Returns the byte-space Edit and moves the caret to just after the
inserted text. An insert the filter empties (or an empty s) is a
no-op that leaves the selection alone.
pub fn replace(&mut self, range: Range<usize>, s: &str) -> Edit
pub fn replace(&mut self, range: Range<usize>, s: &str) -> Edit
Replace range (bytes) with s through the admission filter, leaving
the caret after the replacement — for edits that target a span other
than the selection (autocorrect, a spelling suggestion).
pub fn delete_selection(&mut self) -> Edit
pub fn delete_selection(&mut self) -> Edit
Delete the selection; a no-op when nothing is selected.
pub fn delete_backward(&mut self, text: &str, word: bool) -> Edit
pub fn delete_backward(&mut self, text: &str, word: bool) -> Edit
Backspace: delete the selection, else the grapheme (or word, with
word) before the caret. Returns the resulting Edit (a no-op at
the start).
pub fn delete_forward(&mut self, text: &str, word: bool) -> Edit
pub fn delete_forward(&mut self, text: &str, word: bool) -> Edit
Delete forward (Delete key): the selection, else the grapheme (or word) after the caret. The caret stays put. No-op at the end of the buffer.
pub fn has_preedit(&self) -> bool
pub fn has_preedit(&self) -> bool
Whether an IME composition is in progress.
pub fn preedit_cursor(&self) -> Option<(usize, usize)>
pub fn preedit_cursor(&self) -> Option<(usize, usize)>
The IME’s cursor inside the composition, as it reported it.
pub fn set_preedit(&mut self, text: &str, cursor: Option<(usize, usize)>)
pub fn set_preedit(&mut self, text: &str, cursor: Option<(usize, usize)>)
Show text as the composition at the caret. The admission filter
applies; when it drops characters the IME’s cursor no longer addresses
the shown text and falls back to the composition’s end.
pub fn clear_preedit(&mut self)
pub fn clear_preedit(&mut self)
Drop (and zero) the composition without committing it.
pub fn commit(&mut self, text: &str) -> Edit
pub fn commit(&mut self, text: &str) -> Edit
The IME committed text: the composition ends and text replaces the
selection like typing would.
pub fn display_text<'a>(&self, text: &'a str) -> Cow<'a, str>
pub fn display_text<'a>(&self, text: &'a str) -> Cow<'a, str>
text with the composition shown at the caret.
pub fn preedit_display_range(&self, text: &str) -> Option<Range<usize>>
pub fn preedit_display_range(&self, text: &str) -> Option<Range<usize>>
The display byte range the composition occupies.
pub fn to_display(&self, text: &str, byte: usize) -> usize
pub fn to_display(&self, text: &str, byte: usize) -> usize
A committed-text byte mapped into the display text: offsets after the caret shift past the composition.
pub fn from_display(&self, text: &str, byte: usize) -> usize
pub fn from_display(&self, text: &str, byte: usize) -> usize
A display byte mapped back into the committed text; anything inside the composition maps to the caret.
pub fn display_caret(&self, text: &str) -> usize
pub fn display_caret(&self, text: &str) -> usize
Where the caret draws in the display text: inside the composition at the IME’s cursor, snapped to a grapheme boundary of the composition.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for EditCore
impl RefUnwindSafe for EditCore
impl Send for EditCore
impl Sync for EditCore
impl Unpin for EditCore
impl UnsafeUnpin for EditCore
impl UnwindSafe for EditCore
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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>
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>
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