Skip to main content

scarab_plugin_api/
lib.rs

1//! Scarab Plugin API
2//!
3//! This crate provides the core plugin API for the Scarab terminal emulator.
4//! It defines traits, types, and utilities for building 3rd-party plugins.
5//!
6//! # ECS-Safe Host Bindings
7//!
8//! Fusabi plugins interact with Scarab's ECS through the [`host_bindings`] module,
9//! which provides safe APIs with capability checks, quotas, and rate limiting.
10//!
11//! See [`host_bindings::HostBindings`] for the main entry point.
12
13pub mod config;
14pub mod context;
15pub mod copy_mode;
16pub mod delight;
17pub mod error;
18pub mod events;
19pub mod host_bindings;
20pub mod key_tables;
21pub mod manifest;
22pub mod menu;
23pub mod navigation;
24pub mod object_model;
25pub mod plugin;
26pub mod status_bar;
27pub mod types;
28
29pub use config::{PluginConfig, PluginDiscovery};
30pub use context::PluginContext;
31pub use copy_mode::{
32    get_selection_bounds, normalize_selection, CopyModeCursor, CopyModeState, SearchDirection,
33    SearchMatch, SearchState, Selection, SelectionMode,
34};
35pub use delight::{Achievement, PluginMood};
36pub use error::{PluginError, Result};
37
38// Note: EventRegistry is deprecated for client-side use. See events module docs for migration guide.
39#[allow(deprecated)]
40pub use events::{
41    EventArgs, EventData, EventHandler, EventRegistry, EventResult, EventType, HandlerEntry,
42};
43pub use host_bindings::{
44    HostBindingLimits, HostBindings, NavKeymap, NavStyle, ResourceUsage, DEFAULT_MAX_FOCUSABLES,
45    DEFAULT_MAX_OVERLAYS, DEFAULT_MAX_STATUS_ITEMS, DEFAULT_RATE_LIMIT,
46};
47pub use key_tables::{
48    ActivateKeyTableMode, ClipboardKind, CopyModeAction, Direction, KeyAction, KeyCode, KeyCombo,
49    KeyModifiers, KeyTable, KeyTableActivation, KeyTableStack, LeaderKeyConfig, LeaderKeyState,
50    SearchAction, SplitDirection,
51};
52pub use manifest::{Capability, FusabiModule, ManifestError, PluginManifest};
53pub use menu::{MenuAction, MenuItem};
54pub use navigation::{
55    validate_focusable, NavigationExt, PluginFocusable, PluginFocusableAction,
56    PluginNavCapabilities, ValidationError,
57};
58pub use object_model::{ObjectError, ObjectHandle, ObjectRegistry, ObjectType, RegistryEntry};
59pub use plugin::{Plugin, PluginMetadata};
60pub use status_bar::{
61    AnsiColor, Color, RenderItem, StatusBarSide, StatusBarUpdate, UnderlineStyle,
62};
63pub use types::{Action, HookType, PluginInfo};
64
65/// Current plugin API version
66pub const API_VERSION: &str = "0.1.0";