Skip to main content

Selection

Enum Selection 

Source
pub enum Selection {
    Char {
        anchor: Position,
        head: Position,
    },
    Line {
        anchor_row: usize,
        head_row: usize,
    },
    Block {
        anchor: Position,
        head: Position,
    },
}
Expand description

First-class vim selection. Each variant carries the kind directly rather than relying on a single char-range primitive with separate “treat as line / block” overlays — that’s the whole point of owning the buffer model. Anchor is where the user pressed v / V / Ctrl-V; head moves with the cursor and is updated via Selection::extend_to.

Variants§

§

Char

v — character-wise. Covers anchor..=head inclusive, row-major. Empty rows in the middle of a multi-row span are treated as having one virtual cell so the highlight is visible (matches vim).

Fields

§anchor: Position
§

Line

V — line-wise. Both endpoints are pure row indices; column is irrelevant (the whole row is always covered).

Fields

§anchor_row: usize
§head_row: usize
§

Block

Ctrl-V — block-wise. Covers the inclusive rectangle whose corners are anchor and head. Row range is min..=max; column range is min..=max independently of the corner diagonals.

Fields

§anchor: Position

Implementations§

Source§

impl Selection

Source

pub fn head(self) -> Position

Where the cursor end of the selection lives. After Selection::extend_to this is the freshly-set value.

Source

pub fn anchor(self) -> Position

The opposite end of the selection — fixed when the user entered visual mode.

Source

pub fn extend_to(&mut self, pos: Position)

Move the cursor end of the selection to pos. Anchor stays put; for Line we drop the column since rows are all that matter.

Source

pub fn row_span(self, row: usize) -> RowSpan

What columns of row the selection covers. Used by the render layer to paint the selection bg without having to know each variant’s quirks.

  • Char on a single row: [min_col, max_col].
  • Char spanning rows: from head/anchor.col on the start row to end-of-line, then full rows in between, then 0..=end.col on the last row.
  • Line: (0, usize::MAX) for every row in range.
  • Block: [min_col, max_col] regardless of which row.
Source

pub fn row_bounds(self) -> (usize, usize)

Inclusive (top_row, bottom_row) covered by the selection.

Trait Implementations§

Source§

impl Clone for Selection

Source§

fn clone(&self) -> Selection

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 Selection

Source§

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

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

impl PartialEq for Selection

Source§

fn eq(&self, other: &Selection) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Selection

Source§

impl Eq for Selection

Source§

impl StructuralPartialEq for Selection

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<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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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.