Repository navigation
Releases: danburkhol/ExtendedMacroUI
Releases · danburkhol/ExtendedMacroUI
Release list
v0.11.0
Extended Macro UI
v0.11.0 (2026-10-20)
Full Changelog Previous Releases
- Add CurseForge release automation and release skill
Add a tag-triggered GitHub Actions workflow that packages the addon with
the BigWigs packager and uploads it to CurseForge, a luacheck CI workflow,
a .pkgmeta describing the package and dev-only files to exclude, and a
/release skill that bumps the version, lints, commits, tags and pushes.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Add LDB launcher and optional minimap button
Embeds LibStub, CallbackHandler-1.0, LibDataBroker-1.1 and LibDBIcon-1.0
under Libs/. A launcher data object (Titan Panel and other broker
displays, plus a LibDBIcon minimap button) toggles the window on
left-click and opens a Saved Messages send menu on right-click. The
minimap button is on by default and can be hidden in the EMU settings.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - Consolidate duplicated UI and data code into shared helpers
- Docked side panels (icon picker, macro builder, import/export) share a
mixin for IsShown/Close/Toggle and close each other via ns.CloseDockPanels. - Shared list view, empty-state text, inset-height, radio, menu-tooltip,
pipe-escape, A->Z sort helpers and the "?" icon constant in Core.lua. - Messages owns CopyOutputs and a single create path for New, Duplicate
and Import; MessageEditor and Transfer reuse it.
No behavior change intended.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- Docked side panels (icon picker, macro builder, import/export) share a
- Show item and spell tooltips beside the Macro Builder list
Hovering a list row shows the game tooltip docked to the right of the
builder: worn/bag slot for items (with enchants and durability), item or
spell id otherwise. Saved messages and ItemRack sets show none.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - Add Equip Item and ItemRack actions to the Macro Builder
- Equip Item: lists wearable gear from bags and worn slots; emits /equip,
or /equipslot with a slot choice for one-handed weapons, trinkets and
rings (defaulting to the slot the item is already worn in). - ItemRack: Equip Set: grayed out unless ItemRack is loaded; lists sets from
ItemRackUser.Sets (falls back to typing the name) and emits
/itemrack equip . - Use Item: gear that must be worn gets an /equip (or /equipslot with the
same slot choice) line before the /use; worn on-use items are listed too. - Target: add @cursor.
- Hide Target/Modifier rows for actions that don't honor them, without
leaving gaps; update the extend-macro-builder skill doc.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- Equip Item: lists wearable gear from bags and worn slots; emits /equip,
- Add Import/Export wizard for macros and saved messages
A docked side panel, opened from a new header button, that exports all or
selected General/Character macros and Saved Messages to a shareable string
(!EMU:! + Base64(Deflate(CBOR)) via C_EncodingUtil, with character,
realm, timestamp and addon version metadata) and imports one with per-item
selection, preview, and an overwrite-or-copy conflict policy. Import results
are reported in chat; failures are also raised through geterrorhandler so
BugSack/BugGrabber capture them.
The wizard and the Macro Builder now size their height to their content.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - Fix Run button hidden behind Blizzard's TimerTracker
The earlier TradeSkillMaster layering fix moved the secure Run button from
DIALOG down to the window's HIGH strata. That placed it beneath Blizzard's
TimerTracker -- a full-screen, always-present DIALOG frame -- so the button was
occluded and appeared to be missing.- Editor: the Run button is set to DIALOG strata (above TimerTracker, so it's
visible) at a low frame level (2), so a focused DIALOG-strata window still
raises above it instead of the button floating on top in the common case. - README: documents the remaining edge case -- the button can still layer above
other DIALOG-strata addon windows (e.g. TradeSkillMaster) -- as a known issue.
luacheck: 0 warnings / 0 errors.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Editor: the Run button is set to DIALOG strata (above TimerTracker, so it's
- Add a Saved Message action to the Macro Builder
The Macro Builder's action dropdown gains a "Saved Message" option alongside
Cast Spell and Use Item. It lists the player's saved messages (fuzzy-searchable
via the same search box) and, on Insert, writes an "/emu send " line into
the macro being edited.- Saved messages are picked from the list only (no manual name entry), so the
name box is hidden for this action; the list selection is the source of truth. - Target/Modifier conditionals and the Rank box are hidden for this action,
since /emu send takes only a name. - Compose emits "/emu send "; Describe reads "Sends the saved message ...".
- List rows without an icon (saved messages) now start the name at the left edge.
luacheck: 0 warnings / 0 errors.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Saved messages are picked from the list only (no manual name entry), so the
- Allow dragging macros from the list onto action bars
Macro list rows now RegisterForDrag("LeftButton") and PickupMacro(index) on
drag start -- the same mechanism Blizzard's own macro frame uses, so the macro
lands on the cursor and the player drops it on an action bar (the secure action
button handles the placement; nothing is tainted). Left-click still selects;
only a click-drag picks up. Message rows carry no macro index, so dragging them
there is a no-op.
Verified against Blizzard_MacroUI in the classic_era source.
luacheck: 0 warnings / 0 errors.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Add duplicate button for macros and saved messages
A per-row duplicate control that appears on hover, right-justified, as a small
red square button in the settings-gear style, with a tooltip. Works on General
Macros, Character Macros and Saved Messages.- MainFrame: InitRow builds the hover button (shown via the row's mouseover,
tucking the dirty dot aside so they don't overlap). It's disabled with an
explanatory tooltip when there's no free macro slot or in combat; always
enabled for messages (no slot limit). DuplicateItem routes to macro/message;
duplicating while the editor is dirty goes through the usual Save/Discard/
Cancel prompt (the copy is built from captured name/icon/body, so a reindex
after Save is fine). The new entry is selected, opened in the editor and its
name focused. - Core: ns.NameWithSuffix(name, suffix, maxLen) appends a suffix, trimming the
end of the name so a copy of a max-length (16-char) macro name still fits
instead of overflowing the limit. - Messages: Messages.Duplicate(id) copies content + checked outputs under a
unique " Copy" name (names drive /emu send).
Macros use CreateMacro (created and saved immediately); the glyph is
Character-Plus since the classic assets have no dedicated copy icon.
API verified against the classic_era source. luacheck: 0 warnings / 0 errors.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- MainFrame: InitRow builds the hover button (shown via the row's mouseover,
- Align the Saved Messages editor fields to a shared width
The message-text box was inset ~6px on each side relative to the name box and
the output checklist, so it looked narrower than the fields around it. Widen it
to the shared area +10 / -10 edges and align the "Send to:" label so the
checklist (anchored to that label) keeps the same edge. The Message Name,
message text and Send to boxes now share one width with aligned left/right edges.
luacheck: 0 warnings / 0 errors.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Lower the anti-spam minimum interval to 0.5 seconds
- Core: the settings slider now ranges 0.5-60 in 0.5s steps (so whole seconds
stay selectable) with a decimal-aware label ("%g sec", e.g. "0.5 sec"). - Messages: GetInterval clamps to a 0.5s floor (MIN_INTERVAL) instead of 1.
Default remains 15 seconds. luacheck: 0 warnings / 0 errors.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Core: the settings slider now ranges 0.5-60 in 0.5s steps (so whole seconds
- Skip ineligible message outputs to prevent chat error spam
A saved message's checked outputs are now filtered by whether they can actually
receive a message, so the addon never fires a doomed send that floods the
player's chat with "You aren't in a party" and similar error replies.
Per-output gating in Messages.Send (CanSendFixed), mirroring the eligibility the
default chat editbox uses, plus the raid-warning and officer permission checks:- Party: only when in a group (IsInGroup).
- Raid: only when in a raid (IsInRaid).
- Raid Warning: only in a raid and as leader/assistant.
- Instance (BG): only when in an instance group (IsInGroup INSTANCE).
- Guild: only when in a guild.
- Officer: only when in a guild and C_GuildInfo.IsGuildOfficer().
- Global channel: only when currently joined (unchanged behavior).
- Say/Yell: always attempted.
Ineligible outputs are skipped silently; if nothing is eligible the send is a
no-op and does not start the anti-spam cooldown (that only begins once a message ...