Skip to main content

PluginCommand

Enum PluginCommand 

Source
pub enum PluginCommand {
Show 117 variants InsertText { buffer_id: BufferId, position: usize, text: String, }, DeleteRange { buffer_id: BufferId, range: Range<usize>, }, AddOverlay { buffer_id: BufferId, namespace: Option<OverlayNamespace>, range: Range<usize>, options: OverlayOptions, }, RemoveOverlay { buffer_id: BufferId, handle: OverlayHandle, }, SetStatus { message: String, }, ApplyTheme { theme_name: String, }, ReloadConfig, RegisterCommand { command: Command, }, UnregisterCommand { name: String, }, OpenFileInBackground { path: PathBuf, }, InsertAtCursor { text: String, }, SpawnProcess { command: String, args: Vec<String>, cwd: Option<String>, callback_id: JsCallbackId, }, Delay { callback_id: JsCallbackId, duration_ms: u64, }, SpawnBackgroundProcess { process_id: u64, command: String, args: Vec<String>, cwd: Option<String>, callback_id: JsCallbackId, }, KillBackgroundProcess { process_id: u64, }, SpawnProcessWait { process_id: u64, callback_id: JsCallbackId, }, SetLayoutHints { buffer_id: BufferId, split_id: Option<SplitId>, range: Range<usize>, hints: LayoutHints, }, SetLineNumbers { buffer_id: BufferId, enabled: bool, }, SetViewMode { buffer_id: BufferId, mode: String, }, SetLineWrap { buffer_id: BufferId, split_id: Option<SplitId>, enabled: bool, }, SubmitViewTransform { buffer_id: BufferId, split_id: Option<SplitId>, payload: ViewTransformPayload, }, ClearViewTransform { buffer_id: BufferId, split_id: Option<SplitId>, }, SetViewState { buffer_id: BufferId, key: String, value: Option<Value>, }, SetGlobalState { plugin_name: String, key: String, value: Option<Value>, }, ClearAllOverlays { buffer_id: BufferId, }, ClearNamespace { buffer_id: BufferId, namespace: OverlayNamespace, }, ClearOverlaysInRange { buffer_id: BufferId, start: usize, end: usize, }, AddVirtualText { buffer_id: BufferId, virtual_text_id: String, position: usize, text: String, color: (u8, u8, u8), use_bg: bool, before: bool, }, RemoveVirtualText { buffer_id: BufferId, virtual_text_id: String, }, RemoveVirtualTextsByPrefix { buffer_id: BufferId, prefix: String, }, ClearVirtualTexts { buffer_id: BufferId, }, AddVirtualLine { buffer_id: BufferId, position: usize, text: String, fg_color: (u8, u8, u8), bg_color: Option<(u8, u8, u8)>, above: bool, namespace: String, priority: i32, }, ClearVirtualTextNamespace { buffer_id: BufferId, namespace: String, }, AddConceal { buffer_id: BufferId, namespace: OverlayNamespace, start: usize, end: usize, replacement: Option<String>, }, ClearConcealNamespace { buffer_id: BufferId, namespace: OverlayNamespace, }, ClearConcealsInRange { buffer_id: BufferId, start: usize, end: usize, }, AddSoftBreak { buffer_id: BufferId, namespace: OverlayNamespace, position: usize, indent: u16, }, ClearSoftBreakNamespace { buffer_id: BufferId, namespace: OverlayNamespace, }, ClearSoftBreaksInRange { buffer_id: BufferId, start: usize, end: usize, }, RefreshLines { buffer_id: BufferId, }, RefreshAllLines, HookCompleted { hook_name: String, }, SetLineIndicator { buffer_id: BufferId, line: usize, namespace: String, symbol: String, color: (u8, u8, u8), priority: i32, }, SetLineIndicators { buffer_id: BufferId, lines: Vec<usize>, namespace: String, symbol: String, color: (u8, u8, u8), priority: i32, }, ClearLineIndicators { buffer_id: BufferId, namespace: String, }, SetFileExplorerDecorations { namespace: String, decorations: Vec<FileExplorerDecoration>, }, ClearFileExplorerDecorations { namespace: String, }, OpenFileAtLocation { path: PathBuf, line: Option<usize>, column: Option<usize>, }, OpenFileInSplit { split_id: usize, path: PathBuf, line: Option<usize>, column: Option<usize>, }, StartPrompt { label: String, prompt_type: String, }, StartPromptWithInitial { label: String, prompt_type: String, initial_value: String, }, StartPromptAsync { label: String, initial_value: String, callback_id: JsCallbackId, }, SetPromptSuggestions { suggestions: Vec<Suggestion>, }, SetPromptInputSync { sync: bool, }, AddMenuItem { menu_label: String, item: MenuItem, position: MenuPosition, }, AddMenu { menu: Menu, position: MenuPosition, }, RemoveMenuItem { menu_label: String, item_label: String, }, RemoveMenu { menu_label: String, }, CreateVirtualBuffer { name: String, mode: String, read_only: bool, }, CreateVirtualBufferWithContent { name: String, mode: String, read_only: bool, entries: Vec<TextPropertyEntry>, show_line_numbers: bool, show_cursors: bool, editing_disabled: bool, hidden_from_tabs: bool, request_id: Option<u64>, }, CreateVirtualBufferInSplit {
Show 13 fields name: String, mode: String, read_only: bool, entries: Vec<TextPropertyEntry>, ratio: f32, direction: Option<String>, panel_id: Option<String>, show_line_numbers: bool, show_cursors: bool, editing_disabled: bool, line_wrap: Option<bool>, before: bool, request_id: Option<u64>,
}, SetVirtualBufferContent { buffer_id: BufferId, entries: Vec<TextPropertyEntry>, }, GetTextPropertiesAtCursor { buffer_id: BufferId, }, DefineMode { name: String, bindings: Vec<(String, String)>, read_only: bool, allow_text_input: bool, plugin_name: Option<String>, }, ShowBuffer { buffer_id: BufferId, }, CreateVirtualBufferInExistingSplit { name: String, mode: String, read_only: bool, entries: Vec<TextPropertyEntry>, split_id: SplitId, show_line_numbers: bool, show_cursors: bool, editing_disabled: bool, line_wrap: Option<bool>, request_id: Option<u64>, }, CloseBuffer { buffer_id: BufferId, }, CreateCompositeBuffer { name: String, mode: String, layout: CompositeLayoutConfig, sources: Vec<CompositeSourceConfig>, hunks: Option<Vec<CompositeHunk>>, request_id: Option<u64>, }, UpdateCompositeAlignment { buffer_id: BufferId, hunks: Vec<CompositeHunk>, }, CloseCompositeBuffer { buffer_id: BufferId, }, FocusSplit { split_id: SplitId, }, SetSplitBuffer { split_id: SplitId, buffer_id: BufferId, }, SetSplitScroll { split_id: SplitId, top_byte: usize, }, RequestHighlights { buffer_id: BufferId, range: Range<usize>, request_id: u64, }, CloseSplit { split_id: SplitId, }, SetSplitRatio { split_id: SplitId, ratio: f32, }, SetSplitLabel { split_id: SplitId, label: String, }, ClearSplitLabel { split_id: SplitId, }, GetSplitByLabel { label: String, request_id: u64, }, DistributeSplitsEvenly { split_ids: Vec<SplitId>, }, SetBufferCursor { buffer_id: BufferId, position: usize, }, SendLspRequest { language: String, method: String, params: Option<Value>, request_id: u64, }, SetClipboard { text: String, }, DeleteSelection, SetContext { name: String, active: bool, }, SetReviewDiffHunks { hunks: Vec<ReviewHunk>, }, ExecuteAction { action_name: String, }, ExecuteActions { actions: Vec<ActionSpec>, }, GetBufferText { buffer_id: BufferId, start: usize, end: usize, request_id: u64, }, GetLineStartPosition { buffer_id: BufferId, line: u32, request_id: u64, }, GetLineEndPosition { buffer_id: BufferId, line: u32, request_id: u64, }, GetBufferLineCount { buffer_id: BufferId, request_id: u64, }, ScrollToLineCenter { split_id: SplitId, buffer_id: BufferId, line: usize, }, SetEditorMode { mode: Option<String>, }, ShowActionPopup { popup_id: String, title: String, message: String, actions: Vec<ActionPopupAction>, }, DisableLspForLanguage { language: String, }, RestartLspForLanguage { language: String, }, SetLspRootUri { language: String, uri: String, }, CreateScrollSyncGroup { group_id: u32, left_split: SplitId, right_split: SplitId, }, SetScrollSyncAnchors { group_id: u32, anchors: Vec<(usize, usize)>, }, RemoveScrollSyncGroup { group_id: u32, }, SaveBufferToPath { buffer_id: BufferId, path: PathBuf, }, LoadPlugin { path: PathBuf, callback_id: JsCallbackId, }, UnloadPlugin { name: String, callback_id: JsCallbackId, }, ReloadPlugin { name: String, callback_id: JsCallbackId, }, ListPlugins { callback_id: JsCallbackId, }, ReloadThemes { apply_theme: Option<String>, }, RegisterGrammar { language: String, grammar_path: String, extensions: Vec<String>, }, RegisterLanguageConfig { language: String, config: LanguagePackConfig, }, RegisterLspServer { language: String, config: LspServerPackConfig, }, ReloadGrammars { callback_id: JsCallbackId, }, CreateTerminal { cwd: Option<String>, direction: Option<String>, ratio: Option<f32>, focus: Option<bool>, request_id: u64, }, SendTerminalInput { terminal_id: TerminalId, data: String, }, CloseTerminal { terminal_id: TerminalId, }, GrepProject { pattern: String, fixed_string: bool, case_sensitive: bool, max_results: usize, whole_words: bool, callback_id: JsCallbackId, }, GrepProjectStreaming { pattern: String, fixed_string: bool, case_sensitive: bool, max_results: usize, whole_words: bool, search_id: u64, callback_id: JsCallbackId, }, ReplaceInBuffer { file_path: PathBuf, matches: Vec<(usize, usize)>, replacement: String, callback_id: JsCallbackId, },
}
Expand description

Plugin command - allows plugins to send commands to the editor

Variants§

§

InsertText

Insert text at a position in a buffer

Fields

§buffer_id: BufferId
§position: usize
§text: String
§

DeleteRange

Delete a range of text from a buffer

Fields

§buffer_id: BufferId
§range: Range<usize>
§

AddOverlay

Add an overlay to a buffer, returns handle via response channel

Colors can be specified as RGB tuples or theme keys. When theme keys are provided, they take precedence and are resolved at render time.

Fields

§buffer_id: BufferId
§range: Range<usize>
§options: OverlayOptions

Overlay styling options (colors, modifiers, etc.)

§

RemoveOverlay

Remove an overlay by its opaque handle

Fields

§buffer_id: BufferId
§

SetStatus

Set status message

Fields

§message: String
§

ApplyTheme

Apply a theme by name

Fields

§theme_name: String
§

ReloadConfig

Reload configuration from file After a plugin saves config changes, it should call this to reload the config

§

RegisterCommand

Register a custom command

Fields

§command: Command
§

UnregisterCommand

Unregister a command by name

Fields

§name: String
§

OpenFileInBackground

Open a file in the editor (in background, without switching focus)

Fields

§path: PathBuf
§

InsertAtCursor

Insert text at the current cursor position in the active buffer

Fields

§text: String
§

SpawnProcess

Spawn an async process

Fields

§command: String
§args: Vec<String>
§callback_id: JsCallbackId
§

Delay

Delay/sleep for a duration (async, resolves callback when done)

Fields

§callback_id: JsCallbackId
§duration_ms: u64
§

SpawnBackgroundProcess

Spawn a long-running background process Unlike SpawnProcess, this returns immediately with a process handle and provides streaming output via hooks

Fields

§process_id: u64

Unique ID for this process (generated by plugin runtime)

§command: String

Command to execute

§args: Vec<String>

Arguments to pass

§cwd: Option<String>

Working directory (optional)

§callback_id: JsCallbackId

Callback ID to call when process exits

§

KillBackgroundProcess

Kill a background process by ID

Fields

§process_id: u64
§

SpawnProcessWait

Wait for a process to complete and get its result Used with processes started via SpawnProcess

Fields

§process_id: u64

Process ID to wait for

§callback_id: JsCallbackId

Callback ID for async response

§

SetLayoutHints

Set layout hints for a buffer/viewport

Fields

§buffer_id: BufferId
§split_id: Option<SplitId>
§range: Range<usize>
§

SetLineNumbers

Enable/disable line numbers for a buffer

Fields

§buffer_id: BufferId
§enabled: bool
§

SetViewMode

Set the view mode for a buffer (“source” or “compose”)

Fields

§buffer_id: BufferId
§mode: String
§

SetLineWrap

Enable/disable line wrapping for a buffer

Fields

§buffer_id: BufferId
§split_id: Option<SplitId>
§enabled: bool
§

SubmitViewTransform

Submit a transformed view stream for a viewport

Fields

§buffer_id: BufferId
§split_id: Option<SplitId>
§

ClearViewTransform

Clear view transform for a buffer/split (returns to normal rendering)

Fields

§buffer_id: BufferId
§split_id: Option<SplitId>
§

SetViewState

Set plugin-managed view state for a buffer in the active split. Stored in BufferViewState.plugin_state and persisted across sessions.

Fields

§buffer_id: BufferId
§value: Option<Value>
§

SetGlobalState

Set plugin-managed global state (not tied to any buffer or split). Isolated per plugin by plugin_name. TODO: Need to think about plugin isolation / namespacing strategy for these APIs.

Fields

§plugin_name: String
§value: Option<Value>
§

ClearAllOverlays

Remove all overlays from a buffer

Fields

§buffer_id: BufferId
§

ClearNamespace

Remove all overlays in a namespace

Fields

§buffer_id: BufferId
§

ClearOverlaysInRange

Remove all overlays that overlap with a byte range Used for targeted invalidation when content in a range changes

Fields

§buffer_id: BufferId
§start: usize
§end: usize
§

AddVirtualText

Add virtual text (inline text that doesn’t exist in the buffer) Used for color swatches, type hints, parameter hints, etc.

Fields

§buffer_id: BufferId
§virtual_text_id: String
§position: usize
§text: String
§color: (u8, u8, u8)
§use_bg: bool
§before: bool
§

RemoveVirtualText

Remove a virtual text by ID

Fields

§buffer_id: BufferId
§virtual_text_id: String
§

RemoveVirtualTextsByPrefix

Remove virtual texts whose ID starts with the given prefix

Fields

§buffer_id: BufferId
§prefix: String
§

ClearVirtualTexts

Clear all virtual texts from a buffer

Fields

§buffer_id: BufferId
§

AddVirtualLine

Add a virtual LINE (full line above/below a position) Used for git blame headers, code coverage, inline documentation, etc. These lines do NOT show line numbers in the gutter.

Fields

§buffer_id: BufferId
§position: usize

Byte position to anchor the line to

§text: String

Full line content to display

§fg_color: (u8, u8, u8)

Foreground color (RGB)

§bg_color: Option<(u8, u8, u8)>

Background color (RGB), None = transparent

§above: bool

true = above the line containing position, false = below

§namespace: String

Namespace for bulk removal (e.g., “git-blame”)

§priority: i32

Priority for ordering multiple lines at same position (higher = later)

§

ClearVirtualTextNamespace

Clear all virtual texts in a namespace This is the primary way to remove a plugin’s virtual lines before updating them.

Fields

§buffer_id: BufferId
§namespace: String
§

AddConceal

Add a conceal range that hides or replaces a byte range during rendering. Used for Typora-style seamless markdown: hiding syntax markers like **, [](url), etc.

Fields

§buffer_id: BufferId
§namespace: OverlayNamespace

Namespace for bulk removal (shared with overlay namespace system)

§start: usize

Byte range to conceal

§end: usize
§replacement: Option<String>

Optional replacement text to show instead. None = hide completely.

§

ClearConcealNamespace

Clear all conceal ranges in a namespace

Fields

§buffer_id: BufferId
§

ClearConcealsInRange

Remove all conceal ranges that overlap with a byte range Used for targeted invalidation when content in a range changes

Fields

§buffer_id: BufferId
§start: usize
§end: usize
§

AddSoftBreak

Add a soft break point for marker-based line wrapping. The break is stored as a marker that auto-adjusts on buffer edits, eliminating the flicker caused by async view_transform round-trips.

Fields

§buffer_id: BufferId
§namespace: OverlayNamespace

Namespace for bulk removal (shared with overlay namespace system)

§position: usize

Byte offset where the break should be injected

§indent: u16

Number of hanging indent spaces after the break

§

ClearSoftBreakNamespace

Clear all soft breaks in a namespace

Fields

§buffer_id: BufferId
§

ClearSoftBreaksInRange

Remove all soft breaks that fall within a byte range

Fields

§buffer_id: BufferId
§start: usize
§end: usize
§

RefreshLines

Refresh lines for a buffer (clear seen_lines cache to re-trigger lines_changed hook)

Fields

§buffer_id: BufferId
§

RefreshAllLines

Refresh lines for ALL buffers (clear entire seen_lines cache) Sent when a plugin registers for the lines_changed hook to handle the race where render marks lines as “seen” before the plugin has registered.

§

HookCompleted

Sentinel sent by the plugin thread after a hook has been fully processed. Used by the render loop to wait deterministically for plugin responses (e.g., conceal commands from lines_changed) instead of polling.

Fields

§hook_name: String
§

SetLineIndicator

Set a line indicator in the gutter’s indicator column Used for git gutter, breakpoints, bookmarks, etc.

Fields

§buffer_id: BufferId
§line: usize

Line number (0-indexed)

§namespace: String

Namespace for grouping (e.g., “git-gutter”, “breakpoints”)

§symbol: String

Symbol to display (e.g., “│”, “●”, “★”)

§color: (u8, u8, u8)

Color as RGB tuple

§priority: i32

Priority for display when multiple indicators exist (higher wins)

§

SetLineIndicators

Batch set line indicators in the gutter’s indicator column Optimized for setting many lines with the same namespace/symbol/color/priority

Fields

§buffer_id: BufferId
§lines: Vec<usize>

Line numbers (0-indexed)

§namespace: String

Namespace for grouping (e.g., “git-gutter”, “breakpoints”)

§symbol: String

Symbol to display (e.g., “│”, “●”, “★”)

§color: (u8, u8, u8)

Color as RGB tuple

§priority: i32

Priority for display when multiple indicators exist (higher wins)

§

ClearLineIndicators

Clear all line indicators for a specific namespace

Fields

§buffer_id: BufferId
§namespace: String

Namespace to clear (e.g., “git-gutter”)

§

SetFileExplorerDecorations

Set file explorer decorations for a namespace

Fields

§namespace: String

Namespace for grouping (e.g., “git-status”)

§decorations: Vec<FileExplorerDecoration>

Decorations to apply

§

ClearFileExplorerDecorations

Clear file explorer decorations for a namespace

Fields

§namespace: String

Namespace to clear (e.g., “git-status”)

§

OpenFileAtLocation

Open a file at a specific line and column Line and column are 1-indexed to match git grep output

Fields

§path: PathBuf
§column: Option<usize>
§

OpenFileInSplit

Open a file in a specific split at a given line and column Line and column are 1-indexed to match git grep output

Fields

§split_id: usize
§path: PathBuf
§column: Option<usize>
§

StartPrompt

Start a prompt (minibuffer) with a custom type identifier This allows plugins to create interactive prompts

Fields

§label: String
§prompt_type: String
§

StartPromptWithInitial

Start a prompt with pre-filled initial value

Fields

§label: String
§prompt_type: String
§initial_value: String
§

StartPromptAsync

Start an async prompt that returns result via callback The callback_id is used to resolve the promise when the prompt is confirmed or cancelled

Fields

§label: String
§initial_value: String
§callback_id: JsCallbackId
§

SetPromptSuggestions

Update the suggestions list for the current prompt Uses the editor’s Suggestion type

Fields

§suggestions: Vec<Suggestion>
§

SetPromptInputSync

When enabled, navigating suggestions updates the prompt input text

Fields

§sync: bool
§

AddMenuItem

Add a menu item to an existing menu Add a menu item to an existing menu

Fields

§menu_label: String
§position: MenuPosition
§

AddMenu

Add a new top-level menu

Fields

§menu: Menu
§position: MenuPosition
§

RemoveMenuItem

Remove a menu item from a menu

Fields

§menu_label: String
§item_label: String
§

RemoveMenu

Remove a top-level menu

Fields

§menu_label: String
§

CreateVirtualBuffer

Create a new virtual buffer (not backed by a file)

Fields

§name: String

Display name (e.g., “Diagnostics”)

§mode: String

Mode name for buffer-local keybindings (e.g., “diagnostics-list”)

§read_only: bool

Whether the buffer is read-only

§

CreateVirtualBufferWithContent

Create a virtual buffer and set its content in one operation This is preferred over CreateVirtualBuffer + SetVirtualBufferContent because it doesn’t require tracking the buffer ID

Fields

§name: String

Display name (e.g., “Diagnostics”)

§mode: String

Mode name for buffer-local keybindings (e.g., “diagnostics-list”)

§read_only: bool

Whether the buffer is read-only

§entries: Vec<TextPropertyEntry>

Entries with text and embedded properties

§show_line_numbers: bool

Whether to show line numbers in the gutter

§show_cursors: bool

Whether to show cursors in the buffer

§editing_disabled: bool

Whether editing is disabled (blocks editing commands)

§hidden_from_tabs: bool

Whether this buffer should be hidden from tabs (for composite source buffers)

§request_id: Option<u64>

Optional request ID for async response

§

CreateVirtualBufferInSplit

Create a virtual buffer in a horizontal split Opens the buffer in a new pane below the current one

Fields

§name: String

Display name (e.g., “Diagnostics”)

§mode: String

Mode name for buffer-local keybindings (e.g., “diagnostics-list”)

§read_only: bool

Whether the buffer is read-only

§entries: Vec<TextPropertyEntry>

Entries with text and embedded properties

§ratio: f32

Split ratio (0.0 to 1.0, where 0.5 = equal split)

§direction: Option<String>

Split direction (“horizontal” or “vertical”), default horizontal

§panel_id: Option<String>

Optional panel ID for idempotent operations (if panel exists, update content)

§show_line_numbers: bool

Whether to show line numbers in the buffer (default true)

§show_cursors: bool

Whether to show cursors in the buffer (default true)

§editing_disabled: bool

Whether editing is disabled for this buffer (default false)

§line_wrap: Option<bool>

Whether line wrapping is enabled for this split (None = use global setting)

§before: bool

Place the new buffer before (left/top of) the existing content (default: false/after)

§request_id: Option<u64>

Optional request ID for async response (if set, editor will send back buffer ID)

§

SetVirtualBufferContent

Set the content of a virtual buffer with text properties

Fields

§buffer_id: BufferId
§entries: Vec<TextPropertyEntry>

Entries with text and embedded properties

§

GetTextPropertiesAtCursor

Get text properties at the cursor position in a buffer

Fields

§buffer_id: BufferId
§

DefineMode

Define a buffer mode with keybindings

Fields

§name: String
§bindings: Vec<(String, String)>
§read_only: bool
§allow_text_input: bool

When true, unbound character keys dispatch as mode_text_input:<char>.

§plugin_name: Option<String>

Name of the plugin that defined this mode (for attribution)

§

ShowBuffer

Switch the current split to display a buffer

Fields

§buffer_id: BufferId
§

CreateVirtualBufferInExistingSplit

Create a virtual buffer in an existing split (replaces current buffer in that split)

Fields

§name: String

Display name (e.g., “Commit Details”)

§mode: String

Mode name for buffer-local keybindings

§read_only: bool

Whether the buffer is read-only

§entries: Vec<TextPropertyEntry>

Entries with text and embedded properties

§split_id: SplitId

Target split ID where the buffer should be displayed

§show_line_numbers: bool

Whether to show line numbers in the buffer (default true)

§show_cursors: bool

Whether to show cursors in the buffer (default true)

§editing_disabled: bool

Whether editing is disabled for this buffer (default false)

§line_wrap: Option<bool>

Whether line wrapping is enabled for this split (None = use global setting)

§request_id: Option<u64>

Optional request ID for async response

§

CloseBuffer

Close a buffer and remove it from all splits

Fields

§buffer_id: BufferId
§

CreateCompositeBuffer

Create a composite buffer that displays multiple source buffers Used for side-by-side diff, unified diff, and 3-way merge views

Fields

§name: String

Display name (shown in tab bar)

§mode: String

Mode name for keybindings (e.g., “diff-view”)

§layout: CompositeLayoutConfig

Layout configuration

§sources: Vec<CompositeSourceConfig>

Source pane configurations

§hunks: Option<Vec<CompositeHunk>>

Diff hunks for line alignment (optional)

§request_id: Option<u64>

Request ID for async response

§

UpdateCompositeAlignment

Update alignment for a composite buffer (e.g., after source edit)

Fields

§buffer_id: BufferId
§

CloseCompositeBuffer

Close a composite buffer

Fields

§buffer_id: BufferId
§

FocusSplit

Focus a specific split

Fields

§split_id: SplitId
§

SetSplitBuffer

Set the buffer displayed in a specific split

Fields

§split_id: SplitId
§buffer_id: BufferId
§

SetSplitScroll

Set the scroll position of a specific split

Fields

§split_id: SplitId
§top_byte: usize
§

RequestHighlights

Request syntax highlights for a buffer range

Fields

§buffer_id: BufferId
§range: Range<usize>
§request_id: u64
§

CloseSplit

Close a split (if not the last one)

Fields

§split_id: SplitId
§

SetSplitRatio

Set the ratio of a split container

Fields

§split_id: SplitId
§ratio: f32

Ratio between 0.0 and 1.0 (0.5 = equal split)

§

SetSplitLabel

Set a label on a leaf split (e.g., “sidebar”)

Fields

§split_id: SplitId
§label: String
§

ClearSplitLabel

Remove a label from a split

Fields

§split_id: SplitId
§

GetSplitByLabel

Find a split by its label (async)

Fields

§label: String
§request_id: u64
§

DistributeSplitsEvenly

Distribute splits evenly - make all given splits equal size

Fields

§split_ids: Vec<SplitId>

Split IDs to distribute evenly

§

SetBufferCursor

Set cursor position in a buffer (also scrolls viewport to show cursor)

Fields

§buffer_id: BufferId
§position: usize

Byte offset position for the cursor

§

SendLspRequest

Send an arbitrary LSP request and return the raw JSON response

Fields

§language: String
§method: String
§params: Option<Value>
§request_id: u64
§

SetClipboard

Set the internal clipboard content

Fields

§text: String
§

DeleteSelection

Delete the current selection in the active buffer This deletes all selected text across all cursors

§

SetContext

Set or unset a custom context Custom contexts are plugin-defined states that can be used to control command visibility For example, “config-editor” context could make config editor commands available

Fields

§name: String

Context name (e.g., “config-editor”)

§active: bool

Whether the context is active

§

SetReviewDiffHunks

Set the hunks for the Review Diff tool

Fields

§

ExecuteAction

Execute an editor action by name (e.g., “move_word_right”, “delete_line”) Used by vi mode plugin to run motions and calculate cursor ranges

Fields

§action_name: String

Action name (e.g., “move_word_right”, “move_line_end”)

§

ExecuteActions

Execute multiple actions in sequence, each with an optional repeat count Used by vi mode for count prefix (e.g., “3dw” = delete 3 words) All actions execute atomically with no plugin roundtrips between them

Fields

§actions: Vec<ActionSpec>

List of actions to execute in sequence

§

GetBufferText

Get text from a buffer range (for yank operations)

Fields

§buffer_id: BufferId

Buffer ID

§start: usize

Start byte offset

§end: usize

End byte offset

§request_id: u64

Request ID for async response

§

GetLineStartPosition

Get byte offset of the start of a line (async) Line is 0-indexed (0 = first line)

Fields

§buffer_id: BufferId

Buffer ID (0 for active buffer)

§line: u32

Line number (0-indexed)

§request_id: u64

Request ID for async response

§

GetLineEndPosition

Get byte offset of the end of a line (async) Line is 0-indexed (0 = first line) Returns the byte offset after the last character of the line (before newline)

Fields

§buffer_id: BufferId

Buffer ID (0 for active buffer)

§line: u32

Line number (0-indexed)

§request_id: u64

Request ID for async response

§

GetBufferLineCount

Get the total number of lines in a buffer (async)

Fields

§buffer_id: BufferId

Buffer ID (0 for active buffer)

§request_id: u64

Request ID for async response

§

ScrollToLineCenter

Scroll a split to center a specific line in the viewport Line is 0-indexed (0 = first line)

Fields

§split_id: SplitId

Split ID to scroll

§buffer_id: BufferId

Buffer ID containing the line

§line: usize

Line number to center (0-indexed)

§

SetEditorMode

Set the global editor mode (for modal editing like vi mode) When set, the mode’s keybindings take precedence over normal editing

Fields

§mode: Option<String>

Mode name (e.g., “vi-normal”, “vi-insert”) or None to clear

§

ShowActionPopup

Show an action popup with buttons for user interaction When the user selects an action, the ActionPopupResult hook is fired

Fields

§popup_id: String

Unique identifier for the popup (used in ActionPopupResult)

§title: String

Title text for the popup

§message: String

Body message (supports basic formatting)

§actions: Vec<ActionPopupAction>

Action buttons to display

§

DisableLspForLanguage

Disable LSP for a specific language and persist to config

Fields

§language: String

The language to disable LSP for (e.g., “python”, “rust”)

§

RestartLspForLanguage

Restart LSP server for a specific language

Fields

§language: String

The language to restart LSP for (e.g., “python”, “rust”)

§

SetLspRootUri

Set the workspace root URI for a specific language’s LSP server This allows plugins to specify project roots (e.g., directory containing .csproj) If the LSP is already running, it will be restarted with the new root

Fields

§language: String

The language to set root URI for (e.g., “csharp”, “rust”)

§uri: String

The root URI (file:// URL format)

§

CreateScrollSyncGroup

Create a scroll sync group for anchor-based synchronized scrolling Used for side-by-side diff views where two panes need to scroll together The plugin provides the group ID (must be unique per plugin)

Fields

§group_id: u32

Plugin-assigned group ID

§left_split: SplitId

The left (primary) split - scroll position is tracked in this split’s line space

§right_split: SplitId

The right (secondary) split - position is derived from anchors

§

SetScrollSyncAnchors

Set sync anchors for a scroll sync group Anchors map corresponding line numbers between left and right buffers

Fields

§group_id: u32

The group ID returned by CreateScrollSyncGroup

§anchors: Vec<(usize, usize)>

List of (left_line, right_line) pairs marking corresponding positions

§

RemoveScrollSyncGroup

Remove a scroll sync group

Fields

§group_id: u32

The group ID returned by CreateScrollSyncGroup

§

SaveBufferToPath

Save a buffer to a specific file path Used by :w filename command to save unnamed buffers or save-as

Fields

§buffer_id: BufferId

Buffer ID to save

§path: PathBuf

Path to save to

§

LoadPlugin

Load a plugin from a file path The plugin will be initialized and start receiving events

Fields

§path: PathBuf

Path to the plugin file (.ts or .js)

§callback_id: JsCallbackId

Callback ID for async response (success/failure)

§

UnloadPlugin

Unload a plugin by name The plugin will stop receiving events and be removed from memory

Fields

§name: String

Plugin name (as registered)

§callback_id: JsCallbackId

Callback ID for async response (success/failure)

§

ReloadPlugin

Reload a plugin by name (unload + load) Useful for development when plugin code changes

Fields

§name: String

Plugin name (as registered)

§callback_id: JsCallbackId

Callback ID for async response (success/failure)

§

ListPlugins

List all loaded plugins Returns plugin info (name, path, enabled) for all loaded plugins

Fields

§callback_id: JsCallbackId

Callback ID for async response (JSON array of plugin info)

§

ReloadThemes

Reload the theme registry from disk Call this after installing a theme package or saving a new theme. If apply_theme is set, apply that theme immediately after reloading.

Fields

§apply_theme: Option<String>
§

RegisterGrammar

Register a TextMate grammar file for a language The grammar will be added to pending_grammars until ReloadGrammars is called

Fields

§language: String

Language identifier (e.g., “elixir”, “zig”)

§grammar_path: String

Path to the grammar file (.sublime-syntax or .tmLanguage)

§extensions: Vec<String>

File extensions to associate with this grammar (e.g., [“ex”, “exs”])

§

RegisterLanguageConfig

Register language configuration (comment prefix, indentation, formatter) This is applied immediately to the runtime config

Fields

§language: String

Language identifier (e.g., “elixir”)

§config: LanguagePackConfig

Language configuration

§

RegisterLspServer

Register an LSP server for a language This is applied immediately to the LSP manager and runtime config

Fields

§language: String

Language identifier (e.g., “elixir”)

§config: LspServerPackConfig

LSP server configuration

§

ReloadGrammars

Reload the grammar registry to apply registered grammars (async) Call this after registering one or more grammars to rebuild the syntax set. The callback is resolved when the background grammar build completes.

Fields

§callback_id: JsCallbackId
§

CreateTerminal

Create a new terminal in a split (async, returns TerminalResult) This spawns a PTY-backed terminal that plugins can write to and read from.

Fields

§cwd: Option<String>

Working directory for the terminal (defaults to editor cwd)

§direction: Option<String>

Split direction (“horizontal” or “vertical”), default vertical

§ratio: Option<f32>

Split ratio (0.0 to 1.0), default 0.5

§focus: Option<bool>

Whether to focus the new terminal split (default true)

§request_id: u64

Callback ID for async response

§

SendTerminalInput

Send input data to a terminal by its terminal ID

Fields

§terminal_id: TerminalId

The terminal ID (from TerminalResult)

§data: String

Data to write to the terminal PTY (UTF-8 string, may include escape sequences)

§

CloseTerminal

Close a terminal by its terminal ID

Fields

§terminal_id: TerminalId

The terminal ID to close

§

GrepProject

Project-wide grep search (async) Searches all project files via FileSystem trait, respecting .gitignore. For open buffers with dirty edits, searches the buffer’s piece tree.

Fields

§pattern: String

Search pattern (literal string)

§fixed_string: bool

Whether the pattern is a fixed string (true) or regex (false)

§case_sensitive: bool

Whether the search is case-sensitive

§max_results: usize

Maximum number of results to return

§whole_words: bool

Whether to match whole words only

§callback_id: JsCallbackId

Callback ID for async response

§

GrepProjectStreaming

Project-wide streaming grep search (async, parallel) Like GrepProject but streams results incrementally via progress callback. Searches files in parallel using tokio tasks, sending per-file results back to the plugin as they complete.

Fields

§pattern: String

Search pattern

§fixed_string: bool

Whether the pattern is a fixed string (true) or regex (false)

§case_sensitive: bool

Whether the search is case-sensitive

§max_results: usize

Maximum number of results to return

§whole_words: bool

Whether to match whole words only

§search_id: u64

Search ID — used to route progress callbacks and for cancellation

§callback_id: JsCallbackId

Callback ID for the completion promise

§

ReplaceInBuffer

Replace matches in a buffer (async) Opens the file if not already open, applies edits through the buffer model, groups as a single undo action, and saves via FileSystem trait.

Fields

§file_path: PathBuf

File path to edit (will open if not already in a buffer)

§matches: Vec<(usize, usize)>

Matches to replace, each is (byte_offset, length)

§replacement: String

Replacement text

§callback_id: JsCallbackId

Callback ID for async response

Implementations§

Source§

impl PluginCommand

Source

pub fn debug_variant_name(&self) -> String

Extract the enum variant name from the Debug representation.

Trait Implementations§

Source§

impl Clone for PluginCommand

Source§

fn clone(&self) -> PluginCommand

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 PluginCommand

Source§

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

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

impl<'de> Deserialize<'de> for PluginCommand

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 Serialize for PluginCommand

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

impl TS for PluginCommand

Source§

type WithoutGenerics = PluginCommand

If this type does not have generic parameters, then WithoutGenerics should just be Self. If the type does have generic parameters, then all generic parameters must be replaced with a dummy type, e.g ts_rs::Dummy or ().
The only requirement for these dummy types is that EXPORT_TO must be None. Read more
Source§

type OptionInnerType = PluginCommand

If the implementing type is std::option::Option<T>, then this associated type is set to T. All other implementations of TS should set this type to Self instead.
Source§

fn ident(cfg: &Config) -> String

Identifier of this type, excluding generic parameters.
Source§

fn docs() -> Option<String>

JSDoc comment to describe this type in TypeScript - when TS is derived, docs are automatically read from your doc comments or #[doc = ".."] attributes
Source§

fn name(cfg: &Config) -> String

Name of this type in TypeScript, including generic parameters
Source§

fn decl_concrete(cfg: &Config) -> String

Declaration of this type using the supplied generic arguments. The resulting TypeScript definition will not be generic. For that, see TS::decl(). If this type is not generic, then this function is equivalent to TS::decl().
Source§

fn decl(cfg: &Config) -> String

Declaration of this type, e.g. type User = { user_id: number, ... }. This function will panic if the type has no declaration. Read more
Source§

fn inline(cfg: &Config) -> String

Formats this types definition in TypeScript, e.g { user_id: number }. This function will panic if the type cannot be inlined.
Source§

fn inline_flattened(cfg: &Config) -> String

Flatten a type declaration. This function will panic if the type cannot be flattened.
Source§

fn visit_generics(v: &mut impl TypeVisitor)
where Self: 'static,

Iterates over all type parameters of this type.
Source§

fn output_path() -> Option<PathBuf>

Returns the output path to where T should be exported, relative to the output directory. The returned path does not include any base directory. Read more
Source§

fn visit_dependencies(v: &mut impl TypeVisitor)
where Self: 'static,

Iterates over all dependency of this type.
Source§

fn dependencies(cfg: &Config) -> Vec<Dependency>
where Self: 'static,

Resolves all dependencies of this type recursively.
Source§

fn export(cfg: &Config) -> Result<(), ExportError>
where Self: 'static,

Manually export this type to the filesystem. To export this type together with all of its dependencies, use TS::export_all. Read more
Source§

fn export_all(cfg: &Config) -> Result<(), ExportError>
where Self: 'static,

Manually export this type to the filesystem, together with all of its dependencies. To export only this type, without its dependencies, use TS::export. Read more
Source§

fn export_to_string(cfg: &Config) -> Result<String, ExportError>
where Self: 'static,

Manually generate bindings for this type, returning a String. This function does not format the output, even if the format feature is enabled. 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
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> 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<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> 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.
Source§

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