diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-25 16:12:23 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-25 16:12:23 +0300 |
| commit | a1031b761ff0c5cd79f3f0906e5c3b33fa849f37 (patch) | |
| tree | 18e9401ecc83ebe0c1a35bf92152a81a195e24f2 /internal/appconfig/config_load.go | |
| parent | c73a92022d39e73d41b00cf72d959bf0d26c8d6f (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.go | 18 |
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) { |
