keybinding

package
v0.173.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 16, 2026 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func HandlePasteEvent added in v0.142.2

func HandlePasteEvent(app KeyHandlerContext, pastedText string) tea.Cmd

HandlePasteEvent handles when the terminal sends clipboard content directly

func IsValidKey added in v0.77.0

func IsValidKey(key string) bool

IsValidKey checks if a key string is a known/valid key This is exposed for use in validation commands

func NewHintFormatterFromRegistry added in v0.77.0

func NewHintFormatterFromRegistry(registry *Registry) *hints.Formatter

NewHintFormatterFromRegistry creates a hints.Formatter from a keybinding Registry

Types

type ContextCondition

type ContextCondition struct {
	Name  string
	Check func(app KeyHandlerContext) bool
}

ContextCondition represents a condition that must be met for key binding to be active

type HelpShortcut

type HelpShortcut struct {
	Key         string
	Description string
	Category    string
}

HelpShortcut represents a key shortcut for help display

type KeyAction

type KeyAction struct {
	ID       string
	Category string
	Binding  key.Binding
	Handler  KeyHandler
	Context  KeyContext
}

KeyAction represents a key binding action. Keys, description, and enabled state live in the Binding, which is constructed at registry init from the resolved keybindings config (defaults + keybindings.yaml overrides) — the single source of truth shared by dispatch and help rendering.

type KeyBindingManager

type KeyBindingManager struct {
	// contains filtered or unexported fields
}

KeyBindingManager manages the key binding system for ChatApplication

func NewKeyBindingManager

func NewKeyBindingManager(app KeyHandlerContext, cfg *config.Config) *KeyBindingManager

NewKeyBindingManager creates a new key binding manager

func (*KeyBindingManager) GetHelpShortcuts

func (m *KeyBindingManager) GetHelpShortcuts() []HelpShortcut

GetHelpShortcuts returns help shortcuts for the current context

func (*KeyBindingManager) GetHintFormatter added in v0.77.0

func (m *KeyBindingManager) GetHintFormatter() *hints.Formatter

GetHintFormatter returns a hint formatter for displaying keybinding hints in UI

func (*KeyBindingManager) GetRegistry

func (m *KeyBindingManager) GetRegistry() *Registry

GetRegistry returns the underlying registry (for advanced usage)

func (*KeyBindingManager) IsKeyHandledByAction added in v0.56.0

func (m *KeyBindingManager) IsKeyHandledByAction(keyMsg tea.KeyPressMsg) bool

IsKeyHandledByAction returns true if the key would be handled by a keybinding action

func (*KeyBindingManager) ProcessKey

func (m *KeyBindingManager) ProcessKey(keyMsg tea.KeyPressMsg) tea.Cmd

ProcessKey handles key input and executes the appropriate action

func (*KeyBindingManager) ShouldSkipInputUpdate added in v0.142.0

func (m *KeyBindingManager) ShouldSkipInputUpdate(keyMsg tea.KeyPressMsg) bool

ShouldSkipInputUpdate reports whether a keybinding action fully consumed the key. Textarea-owned editing actions still pass through to InputView.Update.

type KeyContext

type KeyContext struct {
	Views        []domain.ViewState
	Conditions   []ContextCondition
	ExcludeViews []domain.ViewState
}

KeyContext defines when and where a key binding is active

type KeyHandler

type KeyHandler func(app KeyHandlerContext, keyMsg tea.KeyPressMsg) tea.Cmd

KeyHandler represents a function that handles a key binding

type KeyHandlerContext

type KeyHandlerContext interface {
	// State management
	GetStateManager() *services.StateManager
	GetConversationRepository() domain.ConversationRepository
	GetConfig() *config.Config
	GetConfigDir() string

	// Services
	GetAgentService() domain.AgentService
	GetImageService() domain.ImageService

	// UI components
	GetConversationView() ui.ConversationRenderer
	GetInputView() ui.InputComponent
	GetStatusView() ui.StatusComponent
	GetAutocomplete() ui.AutocompleteComponent

	// Actions
	ToggleToolResultExpansion()
	ToggleThinkingExpansion()
	ToggleRawFormat()
	SendMessage() tea.Cmd
	GetPageSize() int

	// Mouse mode
	GetMouseEnabled() bool
	SetMouseEnabled(bool)
}

KeyHandlerContext provides access to application context for key handlers

type Registry

type Registry struct {
	// contains filtered or unexported fields
}

Registry holds all key binding actions and resolves key presses against their bubbles/key Bindings. View-scoped actions win over global ones; within a scope, registration order breaks ties.

func NewRegistry

func NewRegistry(cfg *config.Config) *Registry

NewRegistry creates a registry whose action Bindings are resolved from the keybindings config: built-in defaults merged with any keybindings.yaml overrides. Dispatch and help both read these same Bindings.

func (*Registry) GetAction

func (r *Registry) GetAction(id string) *KeyAction

GetAction retrieves an action by ID

func (*Registry) GetActiveActions

func (r *Registry) GetActiveActions(app KeyHandlerContext) []*KeyAction

GetActiveActions returns all currently active actions

func (*Registry) GetHelpShortcuts

func (r *Registry) GetHelpShortcuts(app KeyHandlerContext) []HelpShortcut

GetHelpShortcuts generates help shortcuts for current context

func (*Registry) GetSequenceActionForPrefix added in v0.91.0

func (r *Registry) GetSequenceActionForPrefix(prefix string, app KeyHandlerContext) *KeyAction

GetSequenceActionForPrefix returns the action that matches a sequence starting with the given prefix

func (*Registry) HasSequenceWithPrefix added in v0.91.0

func (r *Registry) HasSequenceWithPrefix(prefix string, app KeyHandlerContext) bool

HasSequenceWithPrefix checks if any registered action has a key sequence that starts with the given prefix

func (*Registry) KnownActionIDs added in v0.128.0

func (r *Registry) KnownActionIDs() []string

KnownActionIDs returns every action ID the application recognises: the runtime registry actions unioned with the default keybindings config IDs (which include the namespace-path actions consumed directly via config.ResolveNamespaceBindings). The CLI validator shares this notion of "valid" so they agree on what is a genuine typo.

func (*Registry) ListAllActions added in v0.77.0

func (r *Registry) ListAllActions() []*KeyAction

ListAllActions returns all registered actions for debugging/management

func (*Registry) Register

func (r *Registry) Register(action *KeyAction) error

Register adds a key binding action to the registry. Multiple actions can share the same key - view context resolves conflicts.

func (*Registry) Resolve

func (r *Registry) Resolve(msg tea.KeyPressMsg, app KeyHandlerContext) *KeyAction

Resolve finds the action bound to a pressed key via key.Matches. View-scoped actions are consulted before global ones, mirroring the old layer priorities.

func (*Registry) ResolveKey added in v0.142.1

func (r *Registry) ResolveKey(keyStr string, app KeyHandlerContext) *KeyAction

ResolveKey resolves a raw key string, used for comma-joined sequences ("esc,esc") that never arrive as a single tea.KeyPressMsg — bubbles/key has no chord support, so sequences stay string-matched.

type Theme

type Theme = ui.Theme

Theme is an alias to the ui Theme interface

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL