Because Fn is not, in Apple's terms, a modifier key, utilities that value compatibility/stability and so only use Apple's published public APIs won't know when it is pressed.
Some utilities go beyond those APIs, working "behind the scenes", and offer more functionality -- but there's always a risk of sudden breakage when Apple quietly change something.
Yes, Apple do also change the public APIs -- but that's usually either accidental and quickly reverted, or publicised enough in advance that developers can make changes in readiness. Although I'm sure @peternlewis has plenty of war stories from the times that process hasn't worked as advertised...
Say, for example that Keyboard Maestro tried to do this with the Fn key as a modifier.
It can track the state of the Fn key, and know if it is down or up. That's fine.
So you have a hot key trigger active for say Fn-A. But since Fn is not a modifier, that means the hot key trigger would actually be for A, and then when the trigger fired, Keyboard Maestro could check whether the Fn key is down or not. If it is it runs the macro. That's actually probably all doable.
But what if the Fn key is not down. The A key has already been swallowed by the system, and sent to Keyboard Maestro as a hot key. There is no getting out of that without problems. Keyboard Maestro cannot then type an A or add an A to the event queue, because if it did it would end up being out of sequence. For example, you type "A", and "B" in quick succession, so the event queue as "A" and then "B" in it, and then the "A" is processed, swallowed, sent as a hot key, decided that there is no Fn key pressed, added to the event queue, which then has "B" and "A" in it, and assuming the hot key was then disabled for a short (but unknown) amount of time, you would get the out of order sequence "BA".
I understand, and I've found that fast typing can sometimes be an issue with fairly complex macros, but is that really true in practice for something as simple as a single key up/down check? I've tested the same detection idea with keys other than Fn and haven't found it possible to type fast enough for the sequence to be disrupted.
The problem is that, even though Fn isn't accepted as part of a hotkey trigger, holding Fn does affect how KM sees other triggers.
Holding Fn and hitting G will be captured by KM's trigger input field as just G. So we might expect that holding Fn has no bearing on G as a hotkey trigger. However, Fn+G will not trigger the macro but G alone will.
This is unfortunate as it precludes the use of the above detection macro.
But you could do that with any key (except for one you want to use for something else, obviously!). Go wild -- plug in an external Apple Extended Keyboard and have an extra 100+ USB Device key triggers to play with!
I might be utterly wrong here, because of Device Key triggers passing through to the frontmost app, rather than being swallowed in the way that hot key triggers are. I'll have to find an external kb and have a play...
Right. Another "mode" could be activated with a macro group or a palette. But how to do that without disturbing the normal writing flow?
If you write slowly, you can solve this well with a multipress macro. In this case letters are typed when releasing the key and macros are triggered when holding the key a little longer. For fast typists this is known to be a disaster.
I wonder what it would be like if all letters were typed when the key is released. Theoretically, there shouldn't be any letter twists then. And you could easily trigger macros. But how does that feel for normal typing? Maybe I'll try that out
The original question was how to imitate a shortcut with fn + letter. @noisneil has described the problem well. A solution with a palette does not work either. Unless you choose a string, which is not really a good solution.
Well, the real power of vi[m] "control keys" comes from being able to do things like 10j to go 10 characters back, 100l to go 100 lines down, etc. So while having to type something like Fn10j⎋ does break the flow, it's not as bad as mashing an arrow key multiple times.
Agreed and agreed. I'm off on another tack, for another time.
That's true, of course. The best you could do with KM would be a palette with single key triggers. For example, "0" would stand for 10 lines up. "0" long pressed for 10 lines down ... or something similar