I’ve always liked the model. I use three kinds of settings for my macro groups:
One specific app
All apps except [X, Y, Z]
I’m having trouble imagining a scenario where the organization scheme above would be needed?
On the rare occasion I do need granular control, I can just begin the macro with an IF-THEN that checks the frontmost app and cancels or continues accordingly. This action could even be made into its own macro and called from other macros as needed.
Each component works independently of each other component. Each component has lots of contained elements. So there are lots of different kinds of triggers, but:
All triggers exists to provide a way to start a macro,
You don’t need to know about trigger B to know how to use trigger A.
You don’t need to know about action A to know how to use trigger A.
Also, each component has its own function, and so if you want to know what to use, the answer should be clear. Indeed, the Quick Start makes this explicit:
If you want to make changes, use the Editor.
If you want anything to work, make sure the Engine is running.
If you want to control when a Macro is active, configure the Macro Group.
If you want to control when a Macro is executed, configure its Triggers.
If you want to control what a Macro does, configure its Actions.
You can extend this further:
If you want to work with multiple items, use a For Each action and a Collection.
If you want to make a choice, use Conditions.
If you want to work with text, use Text Tokens.
If you want to work with numbers, use Functions.
Thus the answer to “Why is it not possible to set availability in specific applications on a per macro basis?” is because “If you want to control when a Macro is active, configure the Macro Group.”
Now, obviously things are purely this simple in all cases. There are exceptions. But they are rare and typically serve a very specific purpose. And sometimes this structure leads to more verbose, more explicit, configuration than might otherwise be the sae. But in Keyboard Maestro, I heavily prefer orthogonality over brevity or special cases or duplication of responsibility.
And I think this methodology has server Keyboard Maestro well, allowing a vast expanse of power with a reasonable little expansion in the complexity. The complexity of Keyboard Maestro 7 has increased relatively little since Keyboard Maestro 4 was released, the UI is largely unchanged, the basic behaviour is largely unchanged. But Keyboard Maestro 7 has enormously more power available than version 4 - Keyboard Maestro 4 did not even have variables!
So that is the reasoning, and forms part of the basis of everything I do with Keyboard Maestro.
Somewhat embarrassingly I use KM largely (but not exclusively) to do some pretty basic functions. One of these is paste as plain text. The shortcut keys I chose are burnt into my muscle memory. If I begin using a new app which already uses that combination of keys for a function that I want to use then I need to work out what I should do.
That’s the circumstance that my multiple Not X / Not Y / Neither X nor Y) folders scenario comes up in.
Is there a better way to approach this inconvenience?
In that case, you probably want a combination of the two approaches.
You want a macro group that is active everywhere except the applications you do not want to use the Paste as Plain Text functionality, and then you want the single macro within it to include conditionals to work in the various applications. A simple way of doing that in version 7 is to use theSwitch/Case action with the text condition %Application%1%. Then you can easily add extra cases as needed, and default to Remove Styles/Paste.
Of course, for applications you already have a specific macro group for, you could alternatively set up the macro there and add it to the macro group’s exclusions list.
You cannot use Typed String triggers within the Keyboard Maestro Engine application itself (so within any Prompt dialog or the like). It is a weird quirk of the system keyboard monitoring API - it monitors keystrokes in every other application, but not keystrokes in your own application.
I recorded a simple Macro with KM in Photoshop (PS). I want to use a hotkey to activate the stroke menu. I created but I don't see a way to have it activate only when PS is active. There isn't a do-nothing action when working with if-then in KM.
Also, if you click on the gear icon for the Select Menu action, and deselect Failure Aborts Macro, then the macro will do nothing (and no failure message will appear) if the application (and therefore the menu) is not active.
I figured it out! I had to quit and restart Keyboard Maestro. Now the PS Only Macro works. Thank you to everyone who helped me. I really appreciate this community and hope that I'm not annoying anyone too much.