From a1031b761ff0c5cd79f3f0906e5c3b33fa849f37 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 25 Apr 2026 16:12:23 +0300 Subject: feat: configurable hexai-tmux-action menu via [[tmux_action.menu]] When [[tmux_action.menu]] is defined in config it fully replaces the built-in menu. Each entry takes a kind (built-in or "custom"), optional title/hotkey overrides, and optional custom_id for embedding custom actions directly in the main menu. Hotkey dispatch is now dynamic so any single-character hotkey works without code changes. Co-Authored-By: Claude Sonnet 4.6 --- internal/appconfig/app_sections.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'internal/appconfig/app_sections.go') diff --git a/internal/appconfig/app_sections.go b/internal/appconfig/app_sections.go index 5426f2a..6dd60c6 100644 --- a/internal/appconfig/app_sections.go +++ b/internal/appconfig/app_sections.go @@ -114,6 +114,8 @@ type FeatureConfig struct { TmuxEditPopupHeight string `json:"-"` TmuxEditDefaultAgent string `json:"-"` TmuxEditAgents []TmuxEditAgentCfg `json:"-"` + // TmuxAction: configurable main menu for hexai-tmux-action + TmuxActionMenu []TmuxActionMenuEntry `json:"-"` // MCP: Model Context Protocol server settings MCPPromptsDir string `json:"-"` // Directory for prompt storage MCPSlashCommandSync bool `json:"-"` // Enable slash command sync @@ -205,6 +207,7 @@ func (a *App) FeatureSection() FeatureConfig { f := a.FeatureConfig f.IgnoreExtraPatterns = slices.Clone(a.IgnoreExtraPatterns) f.TmuxEditAgents = append([]TmuxEditAgentCfg{}, a.TmuxEditAgents...) + f.TmuxActionMenu = append([]TmuxActionMenuEntry{}, a.TmuxActionMenu...) return f } @@ -214,4 +217,5 @@ func (a *App) ApplyFeatureSection(features FeatureConfig) { a.FeatureConfig = features a.IgnoreExtraPatterns = slices.Clone(features.IgnoreExtraPatterns) a.TmuxEditAgents = append([]TmuxEditAgentCfg{}, features.TmuxEditAgents...) + a.TmuxActionMenu = append([]TmuxActionMenuEntry{}, features.TmuxActionMenu...) } -- cgit v1.2.3