Skip to content

Commit

Permalink
Fix for ibus-1.5.30: Make it possible again to use keys with Unicode …
Browse files Browse the repository at this point in the history
…keysyms in keybindings

See: mike-fabian/ibus-typing-booster#497

Behaviour change between ibus-1.5.29 and 1.5.30.
  • Loading branch information
mike-fabian committed Jun 19, 2024
1 parent 3dfd67d commit 14b06af
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions engine/it_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -739,10 +739,10 @@ def keyevent_to_keybinding(keyevent: KeyEvent) -> str:
'Shift+Control+Left'
>>> keyevent_to_keybinding(KeyEvent(0x0100263A, 0, IBus.ModifierType.SHIFT_MASK | IBus.ModifierType.CONTROL_MASK))
'Shift+Control+U+263A'
'Shift+Control+0x100263a'
>>> keyevent_to_keybinding(KeyEvent(0x0101F923, 0, IBus.ModifierType.SHIFT_MASK | IBus.ModifierType.CONTROL_MASK))
'Shift+Control+U+1F923'
'Shift+Control+0x101f923'
'''
# pylint: enable=line-too-long
keybinding = ''
Expand Down Expand Up @@ -786,25 +786,31 @@ def keybinding_to_keyevent(keybinding: str) -> KeyEvent:
>>> keybinding_to_keyevent('Shift+Control+Left').state == IBus.ModifierType.SHIFT_MASK | IBus.ModifierType.CONTROL_MASK
True
>>> f"0x{keybinding_to_keyevent('Shift+Control+U+263A').val:08x}"
>>> f"0x{keybinding_to_keyevent('Shift+Control+0x100263a').val:08x}"
'0x0100263a'
>>> f"0x{keybinding_to_keyevent('Shift+Control+U+1F923').val:08x}"
>>> f"0x{keybinding_to_keyevent('Shift+Control+0x101F923').val:08x}"
'0x0101f923'
>>> f"0x{keybinding_to_keyevent('Shift+Control+U+1G923').val:08x}"
'0x00ffffff'
>>> f"0x{keybinding_to_keyevent('Shift+Control+0x101G923').val:08x}"
'0x00ffffff'
>>> keybinding_to_keyevent('Shift+Control+U+1G923').val == IBus.KEY_VoidSymbol
True
>>> keybinding_to_keyevent('Shift+Control+0x101G923').val == IBus.KEY_VoidSymbol
True
'''
# pylint: enable=line-too-long
name = keybinding.split('+')[-1]
if 'U+' in keybinding:
name = f'U+{name}'
keyval = IBus.keyval_from_name(name)
if keyval == IBus.KEY_VoidSymbol and re.match(r'U\+[0-9a-fA-F]{4,5}', name):
keyval = 0x1000000 + int(name[2:], 16)
if keyval == IBus.KEY_VoidSymbol and re.match(r'0x10[0-9a-fA-F]{5}', name):
keyval = int(name[2:], 16)
state = 0
if 'Shift+' in keybinding:
state |= IBus.ModifierType.SHIFT_MASK
Expand Down

0 comments on commit 14b06af

Please sign in to comment.