Skip to content

Releases: danburkhol/ExtendedMacroUI

Release list

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 20:16

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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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 ...
Read more