Skip to main content

ScanViewMode

Struct ScanViewMode 

Source
pub struct ScanViewMode;
Expand description

agenda-view-mode — the minor the provider activates on the agenda view.

The ProjectSearchMode shape (org-mode.md §4.2): multibuffer-mode is the view’s major, and the provider contributes a minor carrying what is specific to this view.

§Why this is native and not the plugin’s org-agenda-mode

The design fragment gave gr to org-agenda-mode, which the plugin owns. It cannot have it, for a reason that is structural rather than a matter of taste: refreshing the agenda means re-running the HOST’s walk, which is AppEffect::OpenProviderView — and that effect’s plugin surface is deliberately withheld (boundary_app_effect.rs), pending the capability model for which providers a plugin may trigger. A plugin gr could bind the chord and not do the work.

It is also the better split on merit. Refreshing a host-built view is host machinery: the second scanned-excerpt-source plugin — the markdown TODO scanner the whole extensions() design exists for — inherits gr here, where under the fragment’s version every agenda plugin would re-derive it. That is the copied-keymap failure the minor-mode rule forbids, one layer up. What stays the plugin’s is what is genuinely org: acting on a TODO state from the agenda, through org-agenda-mode’s own chords and its own handler bodies. Both modes are active on the view at once; neither is a half-migration.

Implementations§

Source§

impl ScanViewMode

Source

pub fn mode_id() -> ModeId

Trait Implementations§

Source§

impl Mode for ScanViewMode

Source§

fn activation_policy(&self) -> ActivationPolicy

Manual: the provider activates it on the view it just built. An activation policy could not express “the buffer this provider made”, and a policy keyed on BufferKind::Multibuffer would attach it to every search and diff view too.

Source§

fn refresh_action(&self) -> Option<&'static str>

Returning Some is the whole of the gr wiring: it pulls refreshable-view-mode in through the implies cascade, and that mode owns the chord. One line, no second thing to remember — which matters, because forgetting the second thing kills the chord silently.

Source§

fn fold_toggle_action(&self) -> Option<&'static str>

OA.4b: this view folds by blocks, so <Tab> / <S-Tab> come from the shared foldable-view-mode. Nothing special to do on a block, so it names the generic body.

Source§

fn keymap(&self) -> Keymap

OA.16: cr toggles the clock report.

The chord lives here and not on the mode it switches, which is the one place the “modes own their full surface” rule cannot be read literally: a keymap layer is gated to buffers where its mode is active, so a cr on scan-view-clockreport-mode could turn the report off and never on. The switch belongs to the surface that offers it — this view — and everything the report does (registering its rows, its element vocabulary, tearing both down) stays with the mode. Same split as refreshable-view-mode, one layer over.

cr rather than emacs’ bare R: R is vim’s replace-mode, and while a read-only view makes it inert today, taking a grammar letter for a display toggle is a debt the moment any scan view becomes editable. c is free here — the change operator has nothing to change — and v is already the agenda’s span prefix, so a two-key form is the shape this view’s chords already have.

Source§

fn action_handlers(&self) -> Vec<ActionHandlerContribution>

The mode that declares the target also supplies the body. Leaving the handler to the host would be the half-migration the standing rule forbids.

Source§

type Guard = ()

Owned cleanup token returned by [Self::on_activate]. Read more
Source§

fn id(&self) -> ModeId

Canonical identity. Same value every call. Read more
Source§

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 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 more
§

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 more
§

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 more
§

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, … }.
§

fn decorations(&self) -> Vec<DecorationProvider>

Decoration providers (gutter / inline / overlay / statusline). Stub — reserved for the WIT plugin path (M.10).
§

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

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

fn required_capabilities(&self) -> CapabilitySet

Capabilities the mode requires. Validated at activation; missing capability ⇒ [ModeActivationError::MissingCapability], never silent skip.
§

fn conflicts_with(&self) -> &[ModeId]

Modes this one cannot be active alongside. Read more
§

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 more
§

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
§

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

fn invocation_runner(&self) -> Option<ModeId>

Invocation-runner discovery (2026-05-26). Modes that own command-invocation dispatch for their buffer kind (terminal-mode, oil-mode, file-tree-mode, help-mode, …) return their canonical [ModeId]; the host registers a runner function under that id at boot, and Editor::run_invocation looks it up by walking the active modes on the active pane’s buffer (minors first, then major) before falling back to the central grammar Action gate. Read more
§

fn refresh_on_open(&self) -> bool

Should re-opening this view re-run its refresh? Read more
§

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

impl<M> DynMode for M
where M: Mode,

§

fn id(&self) -> ModeId

Forwards to [Mode::id].
§

fn kind(&self) -> ModeKind

Forwards to [Mode::kind].
§

fn target_buffer_kind(&self) -> Option<BufferKind>

Forwards to [Mode::target_buffer_kind].
§

fn target_language(&self) -> Option<&str>

Forwards to [Mode::target_language].
§

fn options(&self) -> OptionOverrideSet

Forwards to [Mode::options].
§

fn keymap(&self) -> Keymap

Forwards to [Mode::keymap].
§

fn decorations(&self) -> Vec<DecorationProvider>

Forwards to [Mode::decorations].
§

fn gutter_decorations(&self, ctx: &DecorationCtx<'_>) -> Vec<GutterDecoration>

Forwards to [Mode::gutter_decorations].
§

fn completion_sources(&self) -> Vec<CompletionSourceContribution>

Forwards to [Mode::completion_sources].
§

fn action_handlers(&self) -> Vec<ActionHandlerContribution>

Forwards to [Mode::action_handlers].
§

fn required_capabilities(&self) -> CapabilitySet

Forwards to [Mode::required_capabilities].
§

fn conflicts_with(&self) -> &[ModeId]

Forwards to [Mode::conflicts_with].
§

fn implies(&self) -> &[ModeId]

Forwards to [Mode::implies].
§

fn presents_extensions(&self) -> &[&'static str]

Forwards to [Mode::presents_extensions].
§

fn mirrors_option(&self) -> Option<&'static str>

Forwards to [Mode::mirrors_option].
§

fn invocation_runner(&self) -> Option<ModeId>

Forwards to [Mode::invocation_runner].
§

fn refresh_action(&self) -> Option<&'static str>

Forwards to [Mode::refresh_action].
§

fn fold_toggle_action(&self) -> Option<&'static str>

Forwards to [Mode::fold_toggle_action].
§

fn refresh_on_open(&self) -> bool

Forwards to [Mode::refresh_on_open].
§

fn activation_policy(&self) -> ActivationPolicy

Forwards to [Mode::activation_policy].
§

fn editable_tail(&self) -> Option<EditableTail>

Forwards to [Mode::editable_tail].
§

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

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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.
§

impl<T> WithSubscriber for T

§

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
§

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

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