Toggle macros via group

A couple things. A macro group can be available in specific applications, or available when specific applications are running. You rarely want to use the latter option unless you want to set up, say hot keys for a specific application that are available whenever that application is running. Normally you want application-specific macros only when the application is at the front. So make sure you are using the right configuration. This is yet another example where adding configuration and options adds complexity and ways to go astray.

I covered some of the design methodology in excruciating detail in a similar post recently:

So start by reading that message, because a good understanding of my basic "why" of design will inform on why I make decisions the way I do.

I get this question about why application-specific macros don't override global macros regularly, but (almost?) invariable from folks who have used Quickeys which works this year. However, Keyboard Maestro has never had any real concept of macros that are "more global" than other macros. The only reason for the Global Macro Group's existence is that there needs to be somewhere really global that macros get created when no macro group is selected.

I chose in Keyboard Maestro to make use of conflicting trigger keys in a very powerful way which allows you to use a single key to perform a range of related activities very simply and this works really well.

Certainly it is possible that I could adjust Keyboard Maestro such that if a macro has two conflicting hot keys, then instead of using the Conflict Palette, Keyboard Maestro could pick one for you based on the one that is "more specific". But then we immediately get in to complexity because Keyboard Maestro has many different ways that a macro can become active:

  • Enable/Disable the macro (manually or via a macro action).
  • Enable/Disable the macro group (manually or via a macro action).
  • By activating or deactivating a macro group (manually or via a macro action).
  • In some specific set of applications.
  • Outside of some specific set of applications.
  • In some specific set of windows.

So then we have all sorts of edge cases. Is a macro that is specific to Lightroom more or less "global" than

  • a macro that is specific to a titled window?
  • a macro that has just been explicitly activated?
  • a macro in a macro group that was just toggled on for one action?

There is no good answer to these questions.

Now, it is possible I will add in either the behaviour or the option to say:

  • If exactly two macros conflict with a hot key
  • And they are in different groups
  • And one is in the Global Macro Group (or perhaps any group that is entirely global)

then execute the other macro without the conflict palette.

But such special cases go against the design of Keyboard Maestro, which is why I have not done them, despite fairly regular requests from Quickeys refugees. Such cases are relatively infrequent, leading to either a few macros that behave differently in different applications, or a few groups with names like "Not Lightroom". Both of which are easily done in Keyboard Maestro, although Keyboard Maestro tends to be "more verbose" than Quickeys, but that is not necessarily a bad thing - being more verbose and more explicit, while using simpler concepts is part of what keeps Keyboard Maestro's complexity down.

In practice, its probably good to generally avoid a frequently used hot key globally that you then redefine to a completely different purpose in a single app. And if the purpose is to have a globally defined macro that needs to vary its behaviour in one application, then adding that variation into the global macro makes sense as well.

So that's the reasoning.

1 Like