I've rewritten this tool using Swift (sendkeys
) and can be installed using
homebrew:
brew install socsieng/tap/sendkeys
It includes expanded support for mouse commands.
I am no longer maintaining this library and encourage you to use the Swift version instead.
This is a CLI tool to send keys to a given app to simulate typing at a given speed.
This tool was originally created to make it easier to enter keystrokes for a smooth screen recording of code being typed in.
Includes experimental support for mouse operations.
npm install sendkeys-macos --global
Basic usage:
sendkeys -a "Notes" -c "Hello<p:1> world<c:left:option,shift><c:i:command>"
Providing input from a file:
sendkeys -a "Visual Studio Code" -f example.txt
Receiving input from stdio
:
cat example.txt | sendkeys -a "Notes"
Refer to the help command for more options:
sendkeys --help
Programatic usage:
const sendKeys = require('sendkeys-macos');
sendKeys('Notes', 'hello<c:a:command><c:c:command><c:right> <c:v:command>', { delay: 0.1, initialDelay: 1 });
Basic markup is supported to control the pause between keystrokes and to apply additional keystroke combinations.
A pause can be inserted with the <p:seconds>
sequence.
By default, the delay between keystrokes is set with the -d
or --delay
option where the default is 0.1 seconds. A
one-off pause of 1 second can be applied between characters by inserting <p:1>
.
<P:seconds>
(note upper case P
) can be used to modify the default delay between subsequent keystrokes.
Special key combinations including non-printable character sequences can be applied using the <c:key>
or
<c:key:modifiers>
markup.
key
can include any printable character or, one of the following key names: f1
, f2
, f3
, f4
, f5
, f6
, f7
,
f8
, f9
, f10
, f11
, f12
, esc
, return
, enter
, delete
, space
, tab
, up
, down
, left
, right
,
home
, end
, pgup
, and pgdown
.
modifiers
is an optional list of comma separated values that can include command
, shift
, control
, and option
.
Example key combinations:
tab
:<c:tab>
command
+a
:<c:a:command>
option
+shift
+left arrow
:<c:left:option,shift>
Experimental support for mouse commands, including:
- Mouse move:
<m:x1,y1,x2,y2:duration_in_seconds>
- Mouse click:
<m:button:number_of_clicks>
button
supported valuesleft
,center
,right
.number_of_clicks
defaults to1
- Mouse drag:
<d:x1,y1,x2,y2:duration_in_seconds:button>
button
supported valuesleft
,center
,right
. Defaults toleft
.
A continuation can be used to ignore the next character. This is useful to help with formatting a long sequence of character and inserting a new line for authoring purposes.
Insert a continuation using the character sequence <\>
. The character following the sequence will be skipped over.
This script only works on macOS as it has a dependency on the macOS Automator application.
When running from the terminal, ensure that the terminal has permissions to send keystrokes. This can be done by navigating to System Preferences > Security & Privacy > Privacy > Accessibility and adding your terminal application there.