From 0a07de933ac9f20c1140b4cb822144e39b875514 Mon Sep 17 00:00:00 2001 From: me Date: Mon, 30 Dec 2019 10:15:46 +0200 Subject: [PATCH] layout-xkbswitch module --- bumblebee/modules/layout-xkbswitch.py | 40 +++++++++++++++++++++++++++ themes/icons/awesome-fonts.json | 1 + 2 files changed, 41 insertions(+) create mode 100644 bumblebee/modules/layout-xkbswitch.py diff --git a/bumblebee/modules/layout-xkbswitch.py b/bumblebee/modules/layout-xkbswitch.py new file mode 100644 index 0000000..e65d30a --- /dev/null +++ b/bumblebee/modules/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() diff --git a/themes/icons/awesome-fonts.json b/themes/icons/awesome-fonts.json index 2da5699..4da5365 100644 --- a/themes/icons/awesome-fonts.json +++ b/themes/icons/awesome-fonts.json @@ -20,6 +20,7 @@ "load": { "prefix": "" }, "layout": { "prefix": "" }, "layout-xkb": { "prefix": "" }, + "layout-xkbswitch": { "prefix": "" }, "notmuch_count": { "empty": { "prefix": "\uf0e0" }, "items": { "prefix": "\uf0e0" }