pub struct EditorStateSnapshot {Show 22 fields
pub active_buffer_id: BufferId,
pub active_split_id: usize,
pub buffers: HashMap<BufferId, BufferInfo>,
pub buffer_saved_diffs: HashMap<BufferId, BufferSavedDiff>,
pub primary_cursor: Option<CursorInfo>,
pub all_cursors: Vec<CursorInfo>,
pub viewport: Option<ViewportInfo>,
pub buffer_cursor_positions: HashMap<BufferId, usize>,
pub buffer_text_properties: HashMap<BufferId, Vec<TextProperty>>,
pub selected_text: Option<String>,
pub clipboard: String,
pub working_dir: PathBuf,
pub diagnostics: HashMap<String, Vec<Diagnostic>>,
pub folding_ranges: HashMap<String, Vec<FoldingRange>>,
pub config: Value,
pub user_config: Value,
pub available_grammars: Vec<GrammarInfoSnapshot>,
pub editor_mode: Option<String>,
pub plugin_view_states: HashMap<BufferId, HashMap<String, Value>>,
pub plugin_view_states_split: usize,
pub keybinding_labels: HashMap<String, String>,
pub plugin_global_states: HashMap<String, HashMap<String, Value>>,
}Expand description
Snapshot of editor state for plugin queries This is updated by the editor on each loop iteration
Fields§
§active_buffer_id: BufferIdCurrently active buffer ID
active_split_id: usizeCurrently active split ID
buffers: HashMap<BufferId, BufferInfo>Information about all open buffers
buffer_saved_diffs: HashMap<BufferId, BufferSavedDiff>Diff vs last saved snapshot for each buffer (line counts may be unknown)
primary_cursor: Option<CursorInfo>Primary cursor position for the active buffer
all_cursors: Vec<CursorInfo>All cursor positions for the active buffer
viewport: Option<ViewportInfo>Viewport information for the active buffer
buffer_cursor_positions: HashMap<BufferId, usize>Cursor positions per buffer (for buffers other than active)
buffer_text_properties: HashMap<BufferId, Vec<TextProperty>>Text properties per buffer (for virtual buffers with properties)
selected_text: Option<String>Selected text from the primary cursor (if any selection exists) This is populated on each update to avoid needing full buffer access
clipboard: StringInternal clipboard content (for plugins that need clipboard access)
working_dir: PathBufEditor’s working directory (for file operations and spawning processes)
diagnostics: HashMap<String, Vec<Diagnostic>>LSP diagnostics per file URI Maps file URI string to Vec of diagnostics for that file
folding_ranges: HashMap<String, Vec<FoldingRange>>LSP folding ranges per file URI Maps file URI string to Vec of folding ranges for that file
config: ValueRuntime config as serde_json::Value (merged user config + defaults) This is the runtime config, not just the user’s config file
user_config: ValueUser config as serde_json::Value (only what’s in the user’s config file) Fields not present here are using default values
available_grammars: Vec<GrammarInfoSnapshot>Available grammars with provenance info, updated when grammar registry changes
editor_mode: Option<String>Global editor mode for modal editing (e.g., “vi-normal”, “vi-insert”) When set, this mode’s keybindings take precedence over normal key handling
plugin_view_states: HashMap<BufferId, HashMap<String, Value>>Plugin-managed per-buffer view state for the active split. Updated from BufferViewState.plugin_state during snapshot updates. Also written directly by JS plugins via setViewState for immediate read-back.
plugin_view_states_split: usizeTracks which split was active when plugin_view_states was last populated. When the active split changes, plugin_view_states is fully repopulated.
keybinding_labels: HashMap<String, String>Keybinding labels for plugin modes, keyed by “action\0mode” for fast lookup. Updated when modes are registered via defineMode().
plugin_global_states: HashMap<String, HashMap<String, Value>>Plugin-managed global state, isolated per plugin. Outer key is plugin name, inner key is the state key set by the plugin. TODO: Need to think about plugin isolation / namespacing strategy for these APIs. Currently we isolate by plugin name, but we may want a more robust approach (e.g. preventing plugins from reading each other’s state, or providing explicit cross-plugin state sharing APIs).
Implementations§
Trait Implementations§
Source§impl Clone for EditorStateSnapshot
impl Clone for EditorStateSnapshot
Source§fn clone(&self) -> EditorStateSnapshot
fn clone(&self) -> EditorStateSnapshot
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for EditorStateSnapshot
impl Debug for EditorStateSnapshot
Source§impl Default for EditorStateSnapshot
impl Default for EditorStateSnapshot
Source§impl<'de> Deserialize<'de> for EditorStateSnapshot
impl<'de> Deserialize<'de> for EditorStateSnapshot
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Serialize for EditorStateSnapshot
impl Serialize for EditorStateSnapshot
Source§impl TS for EditorStateSnapshot
impl TS for EditorStateSnapshot
Source§type WithoutGenerics = EditorStateSnapshot
type WithoutGenerics = EditorStateSnapshot
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 moreSource§type OptionInnerType = EditorStateSnapshot
type OptionInnerType = EditorStateSnapshot
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 docs() -> Option<String>
fn docs() -> Option<String>
TS is derived, docs are
automatically read from your doc comments or #[doc = ".."] attributesSource§fn decl_concrete(cfg: &Config) -> String
fn decl_concrete(cfg: &Config) -> String
TS::decl().
If this type is not generic, then this function is equivalent to TS::decl().Source§fn decl(cfg: &Config) -> String
fn decl(cfg: &Config) -> String
type User = { user_id: number, ... }.
This function will panic if the type has no declaration. Read moreSource§fn inline(cfg: &Config) -> String
fn inline(cfg: &Config) -> String
{ user_id: number }.
This function will panic if the type cannot be inlined.Source§fn inline_flattened(cfg: &Config) -> String
fn inline_flattened(cfg: &Config) -> String
Source§fn visit_generics(v: &mut impl TypeVisitor)where
Self: 'static,
fn visit_generics(v: &mut impl TypeVisitor)where
Self: 'static,
Source§fn output_path() -> Option<PathBuf>
fn output_path() -> Option<PathBuf>
T should be exported, relative to the output directory.
The returned path does not include any base directory. Read moreSource§fn visit_dependencies(v: &mut impl TypeVisitor)where
Self: 'static,
fn visit_dependencies(v: &mut impl TypeVisitor)where
Self: 'static,
Source§fn dependencies(cfg: &Config) -> Vec<Dependency>where
Self: 'static,
fn dependencies(cfg: &Config) -> Vec<Dependency>where
Self: 'static,
Source§fn export(cfg: &Config) -> Result<(), ExportError>where
Self: 'static,
fn export(cfg: &Config) -> Result<(), ExportError>where
Self: 'static,
TS::export_all. Read moreSource§fn export_all(cfg: &Config) -> Result<(), ExportError>where
Self: 'static,
fn export_all(cfg: &Config) -> Result<(), ExportError>where
Self: 'static,
TS::export. Read more