Keyboard API

class autokey.scripting.Keyboard(mediator)[source]

Provides access to the keyboard for event generation.

enum SendMode(value)

Enumeration class for phrase send modes

KEYBOARD: Send using key events CB_CTRL_V: Send via clipboard and paste with Ctrl+v CB_CTRL_SHIFT_V: Send via clipboard and paste with Ctrl+Shift+v SELECTION: Send via X selection and paste with middle mouse button

Valid values are as follows:

KEYBOARD = <SendMode.KEYBOARD: 'kb'>
CB_CTRL_V = <SendMode.CB_CTRL_V: '<ctrl>+v'>
CB_CTRL_SHIFT_V = <SendMode.CB_CTRL_SHIFT_V: '<ctrl>+<shift>+v'>
CB_SHIFT_INSERT = <SendMode.CB_SHIFT_INSERT: '<shift>+<insert>'>
SELECTION = <SendMode.SELECTION: None>
fake_keypress(key, repeat=1)[source]

Fake a keypress

Usage: keyboard.fake_keypress(key, repeat=1)

Uses XTest to ‘fake’ a keypress. This is useful to send keypresses to some applications which won’t respond to keyboard.send_key()

Parameters:
  • key – the key to be sent (e.g. “s” or “<enter>”)

  • repeat – number of times to repeat the key event

press_key(key)[source]

Send a key down event

Usage: keyboard.press_key(key)

The key will be treated as down until a matching release_key() is sent. :param key: the key to be pressed (e.g. “s” or “<enter>”)

release_key(key)[source]

Send a key up event

Usage: keyboard.release_key(key)

If the specified key was not made down using press_key(), the event will be ignored. :param key: the key to be released (e.g. “s” or “<enter>”)

send_key(key, repeat=1)[source]

Send a keyboard event

Usage: keyboard.send_key(key, repeat=1)

Parameters:
  • key – the key to be sent (e.g. “s” or “<enter>”)

  • repeat – number of times to repeat the key event

send_keys(key_string, send_mode: SendMode | int = SendMode.KEYBOARD)[source]

Send a sequence of keys via keyboard events as the default or via clipboard pasting. Because the clipboard can only contain printable characters, special keys and embedded key combinations can only be sent in keyboard mode.

Trying to send special keys using a clipboard pasting method will paste the literal representation (e.g. “<ctrl>+<f11>”) instead of the actual special key or key combination.

Usage: keyboard.send_keys(keyString)

Parameters:
  • key_string – string of keys to send. Special keys are only possible in keyboard mode.

  • send_mode – Determines how the string is sent.

wait_for_keyevent(check: Callable[[any, str, list, str], bool], name: str | None = None, timeOut=10.0)[source]

Wait for a key event, potentially accumulating the intervening characters Usage: keyboard.wait_for_keypress(self, check, name=None, timeOut=10.0) :param check: a function that returns True or False to signify we’ve finished waiting :param name: only one waiter can have this name. Used to prevent more threads waiting on this. :param timeOut: maximum time, in seconds, to wait for the keypress to occur Example: # Accumulate the traditional emacs C-u prefix arguments # See https://www.gnu.org/software/emacs/manual/html_node/elisp/Prefix-Command-Arguments.html def check(waiter,rawKey,modifiers,key,*args):

isCtrlU = (key == ‘u’ and len(modifiers) == 1 and modifiers[0] == ‘<ctrl>’) if isCtrlU: # If we get here, they’ve already pressed C-u at least 2x

try:

val = int(waiter.result) * 4 waiter.result = str(val)

except ValueError:

waiter.result = “16”

return False

elif any(m == “<ctrl>” or m == “<alt>” or m == “<meta>” or m == “<super>” or m == “<hyper>” for m in modifiers):

# Some other control character is an indication we’re done. if waiter.result is None or waiter.result == “”:

waiter.result = “4”

store.set_global_value(“emacs-prefix-arg”, waiter.result) return True

else: # accumulate as a string

waiter.result = waiter.result + key return False

keyboard.wait_for_keyevent(check, “emacs-prefix”)

wait_for_keypress(key, modifiers: list | None = None, timeOut=10.0)[source]

Wait for a keypress or key combination

Usage: keyboard.wait_for_keypress(self, key, modifiers=[], timeOut=10.0)

Note: this function cannot be used to wait for modifier keys on their own

Parameters:
  • key – the key to wait for

  • modifiers – list of modifiers that should be pressed with the key

  • timeOut – maximum time, in seconds, to wait for the keypress to occur

Keys

enum autokey.model.key.Key(value)[source]

An enumeration.

Member Type:

str

Valid values are as follows:

LEFT = <Key.LEFT: '<left>'>
RIGHT = <Key.RIGHT: '<right>'>
UP = <Key.UP: '<up>'>
DOWN = <Key.DOWN: '<down>'>
BACKSPACE = <Key.BACKSPACE: '<backspace>'>
TAB = <Key.TAB: '<tab>'>
ENTER = <Key.ENTER: '<enter>'>
SCROLL_LOCK = <Key.SCROLL_LOCK: '<scroll_lock>'>
PRINT_SCREEN = <Key.PRINT_SCREEN: '<print_screen>'>
PAUSE = <Key.PAUSE: '<pause>'>
MENU = <Key.MENU: '<menu>'>
CONTROL = <Key.CONTROL: '<ctrl>'>
ALT = <Key.ALT: '<alt>'>
ALT_GR = <Key.ALT_GR: '<alt_gr>'>
SHIFT = <Key.SHIFT: '<shift>'>
SUPER = <Key.SUPER: '<super>'>
HYPER = <Key.HYPER: '<hyper>'>
CAPSLOCK = <Key.CAPSLOCK: '<capslock>'>
NUMLOCK = <Key.NUMLOCK: '<numlock>'>
META = <Key.META: '<meta>'>
F1 = <Key.F1: '<f1>'>
F2 = <Key.F2: '<f2>'>
F3 = <Key.F3: '<f3>'>
F4 = <Key.F4: '<f4>'>
F5 = <Key.F5: '<f5>'>
F6 = <Key.F6: '<f6>'>
F7 = <Key.F7: '<f7>'>
F8 = <Key.F8: '<f8>'>
F9 = <Key.F9: '<f9>'>
F10 = <Key.F10: '<f10>'>
F11 = <Key.F11: '<f11>'>
F12 = <Key.F12: '<f12>'>
F13 = <Key.F13: '<f13>'>
F14 = <Key.F14: '<f14>'>
F15 = <Key.F15: '<f15>'>
F16 = <Key.F16: '<f16>'>
F17 = <Key.F17: '<f17>'>
F18 = <Key.F18: '<f18>'>
F19 = <Key.F19: '<f19>'>
F20 = <Key.F20: '<f20>'>
F21 = <Key.F21: '<f21>'>
F22 = <Key.F22: '<f22>'>
F23 = <Key.F23: '<f23>'>
F24 = <Key.F24: '<f24>'>
F25 = <Key.F25: '<f25>'>
F26 = <Key.F26: '<f26>'>
F27 = <Key.F27: '<f27>'>
F28 = <Key.F28: '<f28>'>
F29 = <Key.F29: '<f29>'>
F30 = <Key.F30: '<f30>'>
F31 = <Key.F31: '<f31>'>
F32 = <Key.F32: '<f32>'>
F33 = <Key.F33: '<f33>'>
F34 = <Key.F34: '<f34>'>
F35 = <Key.F35: '<f35>'>
ESCAPE = <Key.ESCAPE: '<escape>'>
INSERT = <Key.INSERT: '<insert>'>
DELETE = <Key.DELETE: '<delete>'>
HOME = <Key.HOME: '<home>'>
END = <Key.END: '<end>'>
PAGE_UP = <Key.PAGE_UP: '<page_up>'>
PAGE_DOWN = <Key.PAGE_DOWN: '<page_down>'>
NP_INSERT = <Key.NP_INSERT: '<np_insert>'>
NP_DELETE = <Key.NP_DELETE: '<np_delete>'>
NP_HOME = <Key.NP_HOME: '<np_home>'>
NP_END = <Key.NP_END: '<np_end>'>
NP_PAGE_UP = <Key.NP_PAGE_UP: '<np_page_up>'>
NP_PAGE_DOWN = <Key.NP_PAGE_DOWN: '<np_page_down>'>
NP_LEFT = <Key.NP_LEFT: '<np_left>'>
NP_RIGHT = <Key.NP_RIGHT: '<np_right>'>
NP_UP = <Key.NP_UP: '<np_up>'>
NP_DOWN = <Key.NP_DOWN: '<np_down>'>
NP_DIVIDE = <Key.NP_DIVIDE: '<np_divide>'>
NP_MULTIPLY = <Key.NP_MULTIPLY: '<np_multiply>'>
NP_ADD = <Key.NP_ADD: '<np_add>'>
NP_SUBTRACT = <Key.NP_SUBTRACT: '<np_subtract>'>
NP_5 = <Key.NP_5: '<np_5>'>

The Enum and its members also have the following methods:

classmethod is_key(key_string: str) bool[source]

Returns if a string represents a key.