Skip to content

Record you keystrokes and replay them just like in vim macro!

License

Notifications You must be signed in to change notification settings

Darukutsu/keystrokes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Keystrokes

Record you keystrokes and replay them just like in vim macro!

Why does this exist?

I wanted to make something that is somewhat portable across linux/unix. And easily works under X11 and Wayland. Firstly I thought about parsing contents of x11/wayland screenkey variants, but soon I withdrew from that thought, because of wayland inconsistencies. Then I thought, maybe I should parse only from showmethekey since it's cross-protocol, but I didn't like idea of having GTK window and use window rules to hide it etc.. In the end I discovered that showmethekey under the hood uses libinput. And to my surprise libinput already has ability to record and replay you keystrokes. But it's limited in a way that you can't speed it up. It's basically mirroring.

With this tool you can set delay, save recorded keystrokes to files and replay them as many times you want.

Table of contents

Dependencies

X11:

Wayland:

Installation

To use put:
keystrokes in /usr/bin/keystrokes
com.github.keystrokes.policy in /usr/share/polkit-1/rules.d/com.github.keystrokes.policy
com.github.keystrokes.rules in /usr/share/polkit-1/rules.d/com.github.keystrokes.rules

NOTE: symlinks don't work with polkit

This tool directly uses /dev/input/event..., so using pkexec we're getting root permissions. You can use sudo, doas too.

If you encounter issues when executing your binds via keyboard such as Refusing to render service to dead parents, make a wrapper:

#!/bin/sh
pkexec keystrokes "$@"

Usage

Usage: keystrokes [OPTION]...

Short options take same arguments as their long counterpart.
  -h, --help                 display this help and exit
  -p, --play [NAME]          play macro
  -r, --record [NAME]        record macro
  -R, --remove [NAME]        remove recorded macro
  -s, --stop-record          forcestop recording macro (usefull for scripts)
  -S, --stop-replay          forcestop playing macro (usefull for scripts)
  -v, --version              display version and exit

OPTIONS TO USE WITH RECORD
  -D, --device NAME          pick recording device (either path or descriptive name,
                                                    see `libinput list-kernel-devices`)
                             this is usefull for remote activating in DESKTOP/WM

OPTIONS TO USE WITH PLAY
  -d, --delay NUMBER         set replay time in ms (default 12ms)
  -m, --mirror               mirror replay timing exactly as it was recorded
  -n, --nplay NUMBER         set number of replays
  -x, --x11                  due to how pkexec works we can't read XDG_SESSION_TYPE
                             directly in script, use this flag if you're on X11.

  -y, --ydotool PATH         due to how pkexec works we can't read YDOTOOL_SOCKET
                             directly in script, use this flag if you're on Wayland.
                             you don't need to use this if path to your
                             YDOTOOL_SOCKET=/tmp/.ydotool_socket

[NAME] is optional, if not specified it will create files using mktemp.
You can find unnamed macros in /tmp/*.macro.
If you accidentally recorded wrong macro without specifying NAME don't worry,
Run `macro -R`, this will autodelete last unnamed recorded file.

See my dotfiles for usage example in sxhkd.

Video

video.webm

Alternatives

Name Description Protocol Language
xnee distributed keyboard and mouse solution X11 C
atbswp keyboard and mouse X11+Wayland? Python
xmacroIncludingDelayCapturing keyboard and mouse with record delay X11 C
libinput+python-evdev record & replay any /dev/input X11+Wayland C+Python

Todo

  • proper tty support maybe?!
  • better mouse support?
  • issues with repeating, keydown super+ctrl+q; keyup super will result in pressing CTRL+Q

About

Record you keystrokes and replay them just like in vim macro!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages