Lazy macros: write once, use forever

One bind that always does the right spell, so you stop thinking about buttons.

What lazy macros are

A lazy macro is a bind that decides for itself. You press it, the conditionals pick a path, and the spell that fits the moment goes out. No targeting, no bar-page flipping, no thinking. The "lazy" is the point: the macro holds the decision so you do not have to.

The engine is the fallback chain from theconditionals page: sections separated by semicolons, first match wins. A lazy macro is just a chain where the conditions cover real situations. A good one reads like a sentence.

The trinity of lazy binds

Three binds do most of the work on a lazy bar. The heal bind first:

#showtooltip/cast [mod:shift] Power Word: Shield; [@mouseover,help,nodead] Flash Heal; Flash Heal

Shift shields you. Hover heals the hovered ally. Plain press self-heals. Three decisions, zero inputs beyond the key.

#showtooltip/stopcasting/cast [mod:shift,@focus,harm,nodead] Counterspell; [@mouseover,harm,nodead] Counterspell; [harm] Counterspell

Shift kicks the focus target, otherwise whoever your cursor is on, otherwise your current target. The /stopcasting first line is what makes interrupts land mid-cast at all.

#showtooltip/cast [button:2] Dismount; [swimming] <water mount>; <flying mount>; <ground mount>

Replace the angle-bracket mounts with your own and the bind is done forever. Right click drops the mount, swimming picks the water one, flying picks the sky one.

The three habits that keep lazy macros honest

  • One decision per macro. A heal bind decides who, notwhat else. The moment a second, unrelated action sneaks in, the macro becomes a trap for future you.
  • The fallback is mandatory. A chain without a final unconditional section silently does nothing in the case you did not think of. Every lazy macro on this page ends with one.
  • Name it after the intent, not the spell. Name the bind "interrupt", not "counterspell", and it survives every expansion that renames the ability.

Lazy versus castsequence

Players new to macros often conflate the two, and the difference is worth owning: a castsequence is a fixed script that steps on every press. A lazy macro re-decides on every press. Fixed order, use a sequence. Context matters, use lazy. Many bars want both: a lazy interrupt and a castsequence opener on the same page.

If a bind keeps getting pressed in situations where its spell is wrong, that is not a macro problem, that is a bar layout problem. Lazy macros carry their weight best when the bind is always wanted, only the target changes. Put those buttons together and the bar stops lying to you. The classic pages (start withwarrior) are dense with era-correct examples of the style.

Questions people ask

What is a lazy macro, exactly?+
A lazy macro decides its behavior from context on every press: conditionals pick between the friendly cast, the enemy cast, and the self cast automatically. You press one button, it does the right spell, and you stop thinking about the button. The name comes from the community's habit of writing these to stop managing bars, and the style has been around since vanilla.
What is the difference between a lazy macro and a castsequence?+
A castsequence steps through a fixed list in order, one entry per press, resetting on a condition. A lazy macro re-decides everything on every press from the current game state. Use castsequence for fixed sequences like a dot opener; use lazy macros for anything contextual like heals, interrupts, and travel.
Can a lazy macro replace my whole action bar?+
No, and it shouldn't try. Lazy macros shine at contextual utility: heal, interrupt, cleanse, travel, cooldowns. Rotation spells still want their own binds. Trying to make one macro do a whole rotation is how you get a button you press once and distrust forever.
Do lazy macros work in Classic?+
Yes. The fallback chain with conditionals is vanilla-era technology. The classic pages on this site are full of them.