pub struct ReadOnlyMode;Expand description
read-only-mode — makes a buffer read-only in BOTH ways that matter:
it contributes ReadOnly = true (which gates insert-mode typing) and
declares an invocation runner that refuses operators (x, dd, cw,
p), which never pass through the option’s gate.
A user toggle on any buffer, and the mode a read-only major pulls in
through Mode::implies — declaring ReadOnly
alone leaves operators working.
Implementations§
Trait Implementations§
Source§impl Mode for ReadOnlyMode
impl Mode for ReadOnlyMode
Source§fn invocation_runner(&self) -> Option<ModeId>
fn invocation_runner(&self) -> Option<ModeId>
The host registers Editor::run_read_only_motion under this id
(see editor_boot.rs). Motions still move the cursor, : and
/ still fall through to the central dispatcher, and mutating
operators echo “buffer is read-only” rather than silently doing
nothing – a buffer that ignores keystrokes without saying so
reads as a hang.
Source§fn kind(&self) -> ModeKind
fn kind(&self) -> ModeKind
Major or minor. Read at registration and on every activation
call (
activate_major on a minor, or vice versa, is
ModeActivationError::WrongKind).Source§fn options(&self) -> OptionOverrideSet
fn options(&self) -> OptionOverrideSet
Option overrides this mode contributes. Pure declarative
(same return value every call); the host merges these
into the buffer’s option-resolution layer stack while the mode
is active, at the mode’s layer (later-activated minors win ties),
and drops them on deactivation. Build with
lattice_config::overrides! { lattice_config::Wrap = true, … }.Source§fn required_capabilities(&self) -> CapabilitySet
fn required_capabilities(&self) -> CapabilitySet
Capabilities the mode requires. Validated at activation;
missing capability ⇒
ModeActivationError::MissingCapability, never silent
skip.Source§fn on_activate(&self, _ctx: ModeContext) -> LifecycleFuture<'_, ()>
fn on_activate(&self, _ctx: ModeContext) -> LifecycleFuture<'_, ()>
Lifecycle. Called once per (buffer, activation) cycle
after the registry has applied the declarative
contributions. Returns an owned
Guard
carrying every resource the mode allocated. The
dispatcher stashes the Guard until deactivation, at which
point dropping it performs cleanup via the Guard’s Drop
impl. Read moreSource§fn target_buffer_kind(&self) -> Option<BufferKind>
fn target_buffer_kind(&self) -> Option<BufferKind>
For major modes, the [
BufferKind] this mode is the default
major for (H.2, 2026-05-31). ModeRegistry::register
indexes this so
ModeRegistry::find_major_for_kind can
dispatch buffer-creation events to the right major without
host-side match BufferKind { ... } blocks. Read moreSource§fn target_language(&self) -> Option<&str>
fn target_language(&self) -> Option<&str>
For major modes, the language this mode is the
default major for, by canonical name (
Lang::name() —
"rust", "org") (OM.1). The peer of
target_buffer_kind for the
dispatch path [BufferKind::Document] takes: language
detection rather than kind dispatch. Read moreSource§fn decorations(&self) -> Vec<DecorationProvider>
fn decorations(&self) -> Vec<DecorationProvider>
Decoration providers (gutter / inline / overlay /
statusline). Stub — reserved for the WIT plugin path (M.10).
Source§fn gutter_decorations(&self, _ctx: &DecorationCtx<'_>) -> Vec<GutterDecoration>
fn gutter_decorations(&self, _ctx: &DecorationCtx<'_>) -> Vec<GutterDecoration>
Gutter sign decorations this mode contributes while active.
Called once per pane per frame with a
DecorationCtx
carrying relevant render-state snapshots (diff sign map, LSP
diagnostics arc). Returns per-line GutterDecoration values;
the renderer partitions them by variant into the appropriate
gutter column. Default: empty (no contribution).Source§fn completion_sources(&self) -> Vec<CompletionSourceContribution>
fn completion_sources(&self) -> Vec<CompletionSourceContribution>
Insert-mode completion sources this mode contributes while
active on a buffer. Empty by default; minors that own a
completion source (
lsp-completion-mode,
snippet-completion-mode, buffer-words-mode,
tree-sitter-completion-mode, path-completion-mode,
plugin sources) override.Source§fn action_handlers(&self) -> Vec<ActionHandlerContribution>
fn action_handlers(&self) -> Vec<ActionHandlerContribution>
Global (buffer-agnostic) action handlers this
mode contributes (SN.3c.0). The host walks every registered mode’s
action_handlers() once at boot, resolves each
action_name → CommandId, registers the handler in the
ActionHandlerRegistry, and holds the tokens for the app’s
lifetime. Use this for handlers that read the active
buffer / cursor / services from the ActionContext at call
time and close over no per-buffer state (e.g. snippet
expand). Per-buffer, session-scoped handlers register in
on_activate instead, so their tokens
drop with the Guard. Default: none. See
feedback_effect_vocabulary_is_host_boundary.Source§fn conflicts_with(&self) -> &[ModeId]
fn conflicts_with(&self) -> &[ModeId]
Modes this one cannot be active alongside. Read more
Source§fn implies(&self) -> &[ModeId]
fn implies(&self) -> &[ModeId]
Minor modes activating this mode also activates.
Used by
relative-line-numbers-mode ⇒ line-numbers-mode, and by
read-only majors ⇒ read-only-mode. Read moreSource§fn presents_extensions(&self) -> &[&'static str]
fn presents_extensions(&self) -> &[&'static str]
File extensions (lowercase, no dot) this major PRESENTS rather than
edits — the file is never loaded as text. Read more
Source§fn mirrors_option(&self) -> Option<&'static str>
fn mirrors_option(&self) -> Option<&'static str>
Declarative mirror hint for “this mode is the on/off
switch for a typed option of the same observable state”.
Some(canonical_name) ⇒ a host-driven cascade keeps the
mode’s active state and the option’s value in sync.Source§fn refresh_action(&self) -> Option<&'static str>
fn refresh_action(&self) -> Option<&'static str>
Which of this mode’s own actions refreshes
its view, or
None (the default) when the mode backs nothing
refreshable (RV.1, 2026-08-10). Read moreSource§fn fold_toggle_action(&self) -> Option<&'static str>
fn fold_toggle_action(&self) -> Option<&'static str>
Which of this mode’s actions
<Tab> fires, and the declaration that
pulls in
foldable-view-mode —
the shared minor owning the chord. Read moreSource§fn refresh_on_open(&self) -> bool
fn refresh_on_open(&self) -> bool
Should re-opening this view re-run its refresh? Read more
Source§fn activation_policy(&self) -> ActivationPolicy
fn activation_policy(&self) -> ActivationPolicy
A minor mode’s default auto-activation policy
(MA.1; mode-architecture.md §7.4). The host’s minor-activation
resolver reads this for every registered minor when a buffer
enters a major mode, and activates those whose policy
admits the entered major. The
default is ActivationPolicy::Manual — auto-activate
nowhere until the mode or the user opts in. Ignored for major
modes (a buffer’s major is chosen by the major resolver, not
this allowlist).Source§fn editable_tail(&self) -> Option<EditableTail>
fn editable_tail(&self) -> Option<EditableTail>
The mode’s editable tail on an otherwise read-only buffer, or
None (the default) for a fully read-only / fully writable buffer
(AU‑3). Read moreAuto Trait Implementations§
impl Freeze for ReadOnlyMode
impl RefUnwindSafe for ReadOnlyMode
impl Send for ReadOnlyMode
impl Sync for ReadOnlyMode
impl Unpin for ReadOnlyMode
impl UnsafeUnpin for ReadOnlyMode
impl UnwindSafe for ReadOnlyMode
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
Mutably borrows from an owned value. Read more
Source§impl<M> DynMode for Mwhere
M: Mode,
impl<M> DynMode for Mwhere
M: Mode,
Source§fn kind(&self) -> ModeKind
fn kind(&self) -> ModeKind
Forwards to
Mode::kind.Source§fn target_buffer_kind(&self) -> Option<BufferKind>
fn target_buffer_kind(&self) -> Option<BufferKind>
Forwards to
Mode::target_buffer_kind.Source§fn target_language(&self) -> Option<&str>
fn target_language(&self) -> Option<&str>
Forwards to
Mode::target_language.Source§fn options(&self) -> OptionOverrideSet
fn options(&self) -> OptionOverrideSet
Forwards to
Mode::options.Source§fn keymap(&self) -> Keymap
fn keymap(&self) -> Keymap
Forwards to
Mode::keymap.Source§fn decorations(&self) -> Vec<DecorationProvider>
fn decorations(&self) -> Vec<DecorationProvider>
Forwards to
Mode::decorations.Source§fn gutter_decorations(&self, ctx: &DecorationCtx<'_>) -> Vec<GutterDecoration>
fn gutter_decorations(&self, ctx: &DecorationCtx<'_>) -> Vec<GutterDecoration>
Forwards to
Mode::gutter_decorations.Source§fn completion_sources(&self) -> Vec<CompletionSourceContribution>
fn completion_sources(&self) -> Vec<CompletionSourceContribution>
Forwards to
Mode::completion_sources.Source§fn action_handlers(&self) -> Vec<ActionHandlerContribution>
fn action_handlers(&self) -> Vec<ActionHandlerContribution>
Forwards to
Mode::action_handlers.Source§fn required_capabilities(&self) -> CapabilitySet
fn required_capabilities(&self) -> CapabilitySet
Forwards to
Mode::required_capabilities.Source§fn conflicts_with(&self) -> &[ModeId]
fn conflicts_with(&self) -> &[ModeId]
Forwards to
Mode::conflicts_with.Source§fn implies(&self) -> &[ModeId]
fn implies(&self) -> &[ModeId]
Forwards to
Mode::implies.Source§fn presents_extensions(&self) -> &[&'static str]
fn presents_extensions(&self) -> &[&'static str]
Forwards to
Mode::presents_extensions.Source§fn mirrors_option(&self) -> Option<&'static str>
fn mirrors_option(&self) -> Option<&'static str>
Forwards to
Mode::mirrors_option.Source§fn invocation_runner(&self) -> Option<ModeId>
fn invocation_runner(&self) -> Option<ModeId>
Forwards to
Mode::invocation_runner.Source§fn refresh_action(&self) -> Option<&'static str>
fn refresh_action(&self) -> Option<&'static str>
Forwards to
Mode::refresh_action.Source§fn fold_toggle_action(&self) -> Option<&'static str>
fn fold_toggle_action(&self) -> Option<&'static str>
Forwards to
Mode::fold_toggle_action.Source§fn refresh_on_open(&self) -> bool
fn refresh_on_open(&self) -> bool
Forwards to
Mode::refresh_on_open.Source§fn activation_policy(&self) -> ActivationPolicy
fn activation_policy(&self) -> ActivationPolicy
Forwards to
Mode::activation_policy.Source§fn editable_tail(&self) -> Option<EditableTail>
fn editable_tail(&self) -> Option<EditableTail>
Forwards to
Mode::editable_tail.Source§fn on_activate_dyn<'a>(
&'a self,
ctx: ModeContext,
) -> Pin<Box<dyn Future<Output = Result<Box<dyn Any + Send>, ModeActivationError>> + Send + 'a>>
fn on_activate_dyn<'a>( &'a self, ctx: ModeContext, ) -> Pin<Box<dyn Future<Output = Result<Box<dyn Any + Send>, ModeActivationError>> + Send + 'a>>
Type-erased lifecycle entry. Returns a future whose
output is the typed Guard erased to
Box<dyn Any + Send>.
The dispatcher stashes this box keyed by
(BufferId, ModeId); deactivation drops it.