Beispiel #1
0
def grab(keyboard: InputDevice) -> None:
    """
    Grab keyboard to become a sole recipient of keyboard events.
    In case of program exit, keyboard will be ungrabbed.
    """
    debug(f'grabbing keyboard {keyboard}')
    atexit.register(ungrab, keyboard)
    keyboard.grab()
Beispiel #2
0
 def handle(self, ui: UInput, e: InputEvent, *args) -> None:
     debug('-- handling mod key action --')
     if e.value == KeyEvent.key_down:
         for m in self.modifiers:
             host.write_code(ui, m, e.value)
         if self.code:
             host.write_code(ui, self.code, e.value)
     else:
         if self.code:
             host.write_code(ui, self.code, e.value)
         for m in self.modifiers:
             host.write_code(ui, m, e.value)
Beispiel #3
0
def release_layer_keys(ui: UInput, layer_index: int, config: Config) -> None:
    """
    Release weak keys from specified layer.
    """
    debug(f'releasing layer [{layer_index}] keys')
    for pos, is_pressed in enumerate(mapper.layers_keys_pressed[layer_index]):
        if is_pressed:
            keycode = config.keymaps[layer_index][pos]
            if keycode != key.KC_TRANSPARENT:
                debug(f'key {keycode} released')
                write_release(ui, keycode)
                mapper.layers_keys_pressed[layer_index][pos] = False
Beispiel #4
0
def release_weak_keys(ui: UInput, config: Config) -> None:
    """
    Release weak keys from all layers.
    Key is weak if it will cause key hold repeat without releasing.
    """
    for layer in range(len(config.keymaps)):
        for pos, is_pressed in enumerate(mapper.layers_keys_pressed[layer]):
            if is_pressed:
                keycode = config.keymaps[layer][pos]
                if keycode != key.KC_TRANSPARENT and key.is_weak(keycode):
                    debug(f'key {keycode} released')
                    write_release(ui, keycode)
                    mapper.layers_keys_pressed[layer][pos] = False
 def handle(self, _, e: InputEvent, *args) -> None:
     debug('-- handling kbmap toggle action --')
     if e.value == KeyEvent.key_down:
         debug(
             f'now kbmap is {"enabled" if mapper.kbmap_enabled else "disabled"}'
         )
         mapper.kbmap_enabled = not mapper.kbmap_enabled
         debug(
             f'toggle kbmap {"enabled" if mapper.kbmap_enabled else "disabled"}'
         )
     else:
         debug('key release, skipping')
Beispiel #6
0
 def handle(self, ui: UInput, e: InputEvent, config: Config, *args) -> None:
     debug('-- handling layer toggle action --')
     if e.value == KeyEvent.key_down:
         if mapper.active_layers[self.layer_index]:
             debug(f'disabling layer [{self.layer_index}]')
             mapper.disable_layer(ui, self.layer_index, config)
         else:
             debug(f'enabling layer [{self.layer_index}]')
             mapper.enable_layer(self.layer_index, self, config)
Beispiel #7
0
    def handle(self, ui: UInput, e: InputEvent, config: Config, pos: int,
               *args) -> None:
        debug('-- handling mod tap action --')
        if e.value == KeyEvent.key_down:
            mapper.active_tap_actions[pos] = self
            debug('MT is pressed, pressing modifiers')

            host.write_press(ui, *self.modifiers)
        else:
            mapper.active_tap_actions.pop(pos)

            host.release_weak_keys(ui, config)

            debug('MT is released, releasing modifiers')
            host.write_release(ui, *self.modifiers)

            since_last_press = (e.timestamp() -
                                mapper.last_press_timestamps[pos]) * 1000
            debug(f'since last press: {since_last_press}')
            debug(f'action is used: {self.used}')
            if not self.used and since_last_press <= config.tapping_term:
                debug('writing key press')
                host.write_tap(ui, self.code)
            self.used = False
Beispiel #8
0
def ungrab(keyboard: InputDevice) -> None:
    """
    Ungrab the grabbed keyboard.
    """
    debug(f'ungrabbing keyboard {keyboard}')
    keyboard.ungrab()
Beispiel #9
0
    def handle(self, ui: UInput, e: InputEvent, config: Config, pos: int,
               *args) -> None:
        debug('-- handling layer tap action --')
        if e.value == KeyEvent.key_down:
            mapper.active_tap_actions[pos] = self

            debug(f'LT is pressed, enabling layer [{self.layer_index}]')
            mapper.enable_layer(self.layer_index, self, config)
        else:
            mapper.active_tap_actions.pop(pos)

            host.release_weak_keys(ui, config)
            debug(f'LT is released, disabling layer [{self.layer_index}]')

            mapper.disable_layer(ui, self.layer_index, config)

            since_last_press = (e.timestamp() -
                                mapper.last_press_timestamps[pos]) * 1000
            debug(f'since last press: {since_last_press}')
            debug(f'action is used: {self.used}')
            if not self.used and since_last_press <= config.tapping_term:
                debug('writing key press')
                host.write_tap(ui, self.code)
            self.used = False
Beispiel #10
0
 def handle(self, ui: UInput, e: InputEvent, config: Config, *args):
     debug('-- handling layer on action --')
     if e.value == KeyEvent.key_down:
         mapper.enable_layer(self.layer_index, self, config)
     else:
         mapper.disable_layer(ui, self.layer_index, config)
Beispiel #11
0
 def handle_layer_key(self, ui: UInput, code: int, e: InputEvent,
                      *args) -> None:
     debug('-- handling LM layer key --')
     ModKeyAction(code, *self.modifiers).handle(ui, e)