diff --git a/modules/contrib/layout-xkbswitch.py b/modules/contrib/layout-xkbswitch.py new file mode 100644 index 0000000..e65d30a --- /dev/null +++ b/modules/contrib/layout-xkbswitch.py @@ -0,0 +1,40 @@ +"""Displays and changes the current keyboard layout + +Requires the following executable: + * xkb-switch +""" + +import bumblebee.util +import bumblebee.input +import bumblebee.output +import bumblebee.engine + + +class Module(bumblebee.engine.Module): + def __init__(self, engine, config): + widget = bumblebee.output.Widget(full_text=self.current_layout) + super(Module, self).__init__(engine, config, widget) + engine.input.register_callback( + self, + button=bumblebee.input.LEFT_MOUSE, + cmd=self._next_keymap) + self._current_layout = self._get_current_layout() + + def current_layout(self, __): + return self._current_layout + + def _next_keymap(self, event): + try: + bumblebee.util.execute("xkb-switch -n") + except RuntimeError: + pass + + def _get_current_layout(self): + try: + res = bumblebee.util.execute("xkb-switch") + return res.split("\n")[0] + except RuntimeError: + return ["n/a"] + + def update(self, __): + self._current_layout = self._get_current_layout()