summaryrefslogtreecommitdiff
path: root/internal/appconfig/config_load.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-25 16:12:23 +0300
committerPaul Buetow <paul@buetow.org>2026-04-25 16:12:23 +0300
commita1031b761ff0c5cd79f3f0906e5c3b33fa849f37 (patch)
tree18e9401ecc83ebe0c1a35bf92152a81a195e24f2 /internal/appconfig/config_load.go
parentc73a92022d39e73d41b00cf72d959bf0d26c8d6f (diff)
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 <noreply@anthropic.com>
Diffstat (limited to 'internal/appconfig/config_load.go')
-rw-r--r--internal/appconfig/config_load.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/internal/appconfig/config_load.go b/internal/appconfig/config_load.go
index 88750fd..aa169bc 100644
--- a/internal/appconfig/config_load.go
+++ b/internal/appconfig/config_load.go
@@ -284,6 +284,24 @@ func applyFeatureSections(fc *fileConfig, out *App) {
applyStatsSection(fc, out)
fc.applyTmuxEdit(out)
applyMCPSection(fc, out)
+ applyTmuxActionSection(fc, out)
+}
+
+// applyTmuxActionSection converts [[tmux_action.menu]] entries into App fields.
+func applyTmuxActionSection(fc *fileConfig, out *App) {
+ if len(fc.TmuxAction.Menu) == 0 {
+ return
+ }
+ entries := make([]TmuxActionMenuEntry, 0, len(fc.TmuxAction.Menu))
+ for _, e := range fc.TmuxAction.Menu {
+ entries = append(entries, TmuxActionMenuEntry{
+ Kind: strings.TrimSpace(e.Kind),
+ CustomID: strings.TrimSpace(e.CustomID),
+ Title: strings.TrimSpace(e.Title),
+ Hotkey: strings.TrimSpace(e.Hotkey),
+ })
+ }
+ out.TmuxActionMenu = entries
}
func applyGeneralSection(fc *fileConfig, out *App) {