[modules/layout] Add autodetection and auto-adding of languages

Whenever the language is changed outside the bar, update the bar
accordingly. Also, when a new language is used, automatically append it
to the list of available languages.
This commit is contained in:
Tobi-wan Kenobi 2016-11-27 19:48:12 +01:00
parent ca64851687
commit 4819147410
2 changed files with 25 additions and 1 deletions

View file

@ -39,7 +39,29 @@ class Module(bumblebee.module.Module):
bumblebee.util.execute("setxkbmap -layout {} {}".format(layout, variant)) bumblebee.util.execute("setxkbmap -layout {} {}".format(layout, variant))
def widgets(self): def widgets(self):
res = bumblebee.util.execute("setxkbmap -query")
layout = None
variant = None
for line in res.split("\n"):
if not line:
continue
if "layout" in line:
layout = line.split(":")[1].strip()
if "variant" in line:
variant = line.split(":")[1].strip()
if variant:
layout += ":" + variant
lang = self._languages[self._idx] lang = self._languages[self._idx]
if lang != layout:
if layout in self._languages:
self._idx = self._languages.index(layout)
else:
self._languages.append(layout)
self._idx = len(self._languages) - 1
lang = layout
return bumblebee.output.Widget(self, lang) return bumblebee.output.Widget(self, lang)
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -24,7 +24,9 @@ def durationfmt(duration):
def execute(cmd): def execute(cmd):
args = shlex.split(cmd) args = shlex.split(cmd)
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
out = p.communicate() out, err = p.communicate()
if p.returncode != 0: if p.returncode != 0:
raise RuntimeError("{} exited with {}".format(cmd, p.returncode)) raise RuntimeError("{} exited with {}".format(cmd, p.returncode))
return out.decode("utf-8")