36 lines
936 B
Python
Executable file
36 lines
936 B
Python
Executable file
#!/usr/bin/python
|
|
import i3ipc
|
|
import json
|
|
|
|
|
|
long_to_short = {
|
|
'English (US)': 'en',
|
|
'Macedonian': 'mk',
|
|
}
|
|
|
|
def print_status(keyboard):
|
|
layout = keyboard.xkb_active_layout_name
|
|
short_code = long_to_short.get(layout, layout)
|
|
output = {"text": short_code, "tooltip": layout, "class": short_code}
|
|
print(json.dumps(output), flush=True)
|
|
|
|
def find_keyboard(sway):
|
|
# *the* keyboard is the one with more than one layout
|
|
for input_dev in sway.get_inputs():
|
|
if input_dev.type == 'keyboard' and len(input_dev.xkb_layout_names) > 1:
|
|
return input_dev
|
|
|
|
def on_input(sway, event):
|
|
if event.change == "xkb_layout" and \
|
|
event.input.identifier == sway.keyboard.identifier:
|
|
print_status(event.input)
|
|
|
|
def main():
|
|
sway = i3ipc.Connection()
|
|
sway.keyboard = find_keyboard(sway)
|
|
print_status(sway.keyboard)
|
|
|
|
sway.on(i3ipc.Event.INPUT, on_input)
|
|
sway.main()
|
|
|
|
main()
|