Keyboard shortcuts for holding down keys

There is a feature in QuickSilver's triggers that I rely heavily on, which is assigning an action to a key when it's hold down for a minimum amount of time.

What this has allowed me to do:

  1. Short-press F1 => sends F1 to the currently focused app
  2. Longer-press F1 (e.g. for > 0.1s or 0.2s; configurable) => Do my configured action (and don't send F1)

I have hold keys assigned to all my function keys that activate specific apps, and I'd really love to be able to do it without relying on Quicksilver

I do the same with the right command key and key sequencer.

Short-press looks like this

Longer-press looks like this

Important is the short delay 0.2 sec and the long delay 2 sec

works perfectly.

I've tried this with my F10 key, but I can't seem to get it to work.

This action is set to "Default Apple or No Action"

This action is set up to "Show Google Chrome"

Both short-press and long-press have the same effect: they always open the Google Chrome, and they still send F10 keystrokes to the application.

What am I missing?

Ah, sorry, of course you have to delete all pre defined F10 Mac Os or App actions first in the system preferences. Otherwise these actions are also executed. F10 should only do what you record with key sequencer.

What you recorded looks like it should.

To be sure, I did a few attempts with F10. For example:

Short pressed: launch App A
Long pressed: launch App B

Or different action in the same App

Everything works perfectly.

Your long pressed action is launch Chrome? What is the short pressed action?

It's in my first post :-). I want short-pressed keys to send the keystroke (so it gets caught by either the OS or the currently active app) and do nothing else, and long-press keys to be swallowed (i.e. not to be sent to the OS or app) and do the action instead. (So your suggestion - to disable the original keystrokes from the app or macOS obviously defeats the purpose)

For example, in multiple of my apps, the F2 key allows me to rename an object. (Every spreadsheet has this, for example). I also want to use it - when long pressed - to open my calendar, and NOT trigger the rename action on any other app.

What QuickSilver does: it defers the keypress on key down, and when the key is lifted up again, depending on how long it's been held, it either sends the deferred keystroke, or it disposes of it and executes the action.

The reason why this can never work with key sequences is that key sequences never defer or swallow keystrokes, it's simply not what they're designed to do. (It would be horrible if they did, imagine a key sequence that requires you to press "A-B-C" in order; your A-key would globally completely stop working because BTT would be waiting for you to press B.)

The alternative that BTT has (sending or after completing a sequence) is fine for simple text replacements, but not really useful if you don't know what the effect of the keypresses has been.

IMO there should be a third option:

[ ] Defer keystrokes during sequence and do not send them on recognition

1 Like