Skip to content

Frustrated that OS X doesn't have a simple software keyboard debouncer. Here's my hack.

License

Notifications You must be signed in to change notification settings

toothbrush/debounce-mac

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

debounce-mac

This is for those annoying moments when you wished that macOS had XkbSetBounceKeysDelay like Linux does.

This is a bog-simple keyboard event tap that intercepts any (identical) keystrokes that happen within a configurable time window. Magic. See here for the genesis story.

Credit where credit is due: i mostly stole this idea and sample code off another StackOverflow answer.

How do?

You should be able to make this work with something like the following:

$ make
$ sudo ./debounce

It needs root because it intercepts keystrokes.

If you really want, you can "install" it. Assuming that /usr/local/bin is in your $PATH (which it is if you use Homebrew) you can:

$ make install

Auto-start at login

Another helpful contribution, this time from @cpouldev. If you'd like to auto-start debounce at login, you might find something like the included LaunchAgent configuration helpful.

Put that somewhere launchctl can find it, like ~/Library/LaunchAgents/com.debounceMac.app.plist, then load the configuration. macOS will automatically prompt you to give debounce Accessibility access, this is needed to be able to intercept and modify keystrokes.

$ launchctl load ~/Library/LaunchAgents/com.debounceMac.app.plist

macOS will automatically prompt you to give debounce Accessibility access, this is needed to be able to intercept and modify keystrokes. When that's done, start it.

$ launchctl start com.debounceMac.app

To remove / uninstall completely:

$ launchctl stop com.debounceMac.app
$ launchctl unload ~/Library/LaunchAgents/com.debounceMac.app.plist
$ rm ~/Library/LaunchAgents/com.debounceMac.app.plist
$ launchctl list
$ rm /usr/local/bin/debounce

Accessibility / permissions

You might get an error something like the following, even when running as root.

$ sudo ./debounce
2019-03-03 10:47:02.194 debounce[59588:499245] Initializing an event tap.
2019-03-03 10:47:02.205 debounce[59588:499245] Unable to create event tap.  Must run as root or add Accessibility privileges to this app.
2019-03-03 10:47:02.205 debounce[59588:499245] No Event tap in place!  You will need to call listen after tapEvents to get events.

@DanGrayson kindly alerted me to the fact that on modern macOS, you'll need to enable universal accessibility features to let this work. It appears that you'll need to go to System Preferences > Privacy > Accessibility, and grant Terminal.app permission, not the debounce binary as you might expect.

About

Frustrated that OS X doesn't have a simple software keyboard debouncer. Here's my hack.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published