Skip to content

feat: fast keybind mode + per-spec keybind profiles#246

Open
bulshack wants to merge 7 commits intoEllesmereGaming:mainfrom
bulshack:keybind-system
Open

feat: fast keybind mode + per-spec keybind profiles#246
bulshack wants to merge 7 commits intoEllesmereGaming:mainfrom
bulshack:keybind-system

Conversation

@bulshack
Copy link
Copy Markdown

Summary

  • Fast Keybind Mode: A full-screen overlay where you hover over any action button and press a key to bind it instantly. No more digging through Blizzard's keybind menu. Accessible via the "Enter Keybind Mode" button in ActionBars options or /eui kb.
  • Per-Spec Keybind Profiles: Keybinds are automatically saved and restored per specialization. Switch from Vengeance to Havoc and back — each spec keeps its own bindings.
  • Live UI updates: The KEYBINDS section in ActionBars options shows the active profile and per-spec assignments, updating in real-time when you switch specs.

I really enjoy using this addon and wanted a faster way to rebind keys when switching between specs. This was built to match EllesmereUI's visual style — accent colors, ShowWidgetTooltip, MakeBorder, MakeFont, RegisterWidgetRefresh, etc.

What's included

File Change
EUI_KeybindMode.lua New file — keybind overlay, profile snapshot/restore, combat safety
EllesmereUI.toc Added EUI_KeybindMode.lua to load order
EllesmereUI.lua Added /eui keybind and /eui kb slash commands
EllesmereUI_Profiles.lua SwitchKeybindProfile — auto-switches keybind profiles on spec change
EllesmereUIActionBars.lua Exposes _barFrames / _barButtons for keybind mode button discovery
EUI_ActionBars_Options.lua KEYBINDS section with button, active profile display, per-spec rows

How it works

  1. Open EllesmereUI options → ActionBars → any bar → KEYBINDS section
  2. Click "Enter Keybind Mode" (or type /eui kb)
  3. Hover any action button, press a key — bound instantly
  4. ESC while hovering = unbind, ESC with nothing hovered = exit
  5. On close, bindings are saved to a profile named after your current spec
  6. Switching specs auto-restores that spec's keybind profile

Safety

  • Combat lockdown: keybind mode auto-closes on combat, login restore defers if in combat
  • No modifications to existing features — all changes are additive
  • Debug logging is off by default (enable with EllesmereUIDB.keybindDebug = true)
  • Single SaveBindings(2) call on close instead of per-bind disk writes
  • Keybind data stored in EllesmereUIDB (WTF folder) — survives addon updates

Test plan

  • Enter keybind mode, bind keys to action buttons, verify they persist after /reload
  • Switch specs, verify keybind profile auto-restores correct bindings
  • Enter combat while in keybind mode — should auto-close
  • Test with multiple themes — accent colors should match
  • Verify existing features (profiles, unlock mode, rename button) are unaffected

🤖 Generated with Claude Code

bulshack and others added 7 commits April 9, 2026 02:29
- Add EUI_KeybindMode.lua: full keybind mode overlay with ToggleKeybindMode,
  SnapshotKeybinds, and RestoreKeybinds
- Add /eui keybind (or /eui kb) slash command to toggle keybind mode
- Add SwitchKeybindProfile for automatic keybind switching on spec change
- Add EUI_KeybindDebugLog SavedVariable for debug logging
- Hide profile rename button in options (name set at creation)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Expose barFrames/barButtons so keybind mode can discover action buttons
- Add Keybind Mode button to ActionBars options panel
- Add Keybind Profiles section showing active profile and per-spec assignments

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ActionBars Options:
- Replace custom keybind button with proper KEYBINDS section header
- Accent-colored wide button with icon, shortcut hint, and detailed tooltip
- Styled profile rows with spec icons, active-spec indicator, alternating
  backgrounds, and per-row hover tooltips explaining profile status

Keybind Mode HUD:
- Wider HUD (680px) with accent glow top edge and keybind icon
- Profile indicator shows spec icon + profile name with hover tooltip
- Instructions text is hoverable with full usage guide tooltip
- Close button shows red on hover with auto-save reminder tooltip
- Filter pills show bar state tooltip on hover
- Dynamic accent color via GetAccentColor() to match active theme

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Critical:
- Remove EUI_KeybindDebugLog SavedVariable (unbounded growth on disk)
- Gate DebugLog behind EllesmereUIDB.keybindDebug flag (silent by default)
- Guard login RestoreKeybinds against combat lockdown with PLAYER_REGEN_ENABLED defer

Important:
- Revert all editBtn changes in EUI__General_Options.lua (preserve author's rename behavior)
- Add isActive guard to FlashFeedback and conflict timer callbacks (prevent orphan frame ops)

Optimization:
- Defer SaveBindings(2) to CloseKeybindMode instead of per-bind disk writes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The keybind profile rows and active profile display were built once
and never refreshed. Now uses RegisterWidgetRefresh callback to
update all dynamic elements (active indicator, spec icons, profile
names, colors) when RefreshPage is called.

Adds PLAYER_SPECIALIZATION_CHANGED listener to trigger RefreshPage
so the keybind section updates immediately when switching specs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant