# pylint: disable=C0111,R0903 # -*- coding: utf-8 -*- """Shows a widget for each connected screen and allows the user to loop through different orientations. Requires the following executable: * swaymsg """ import core.module import core.input import util.cli import json from os import environ, path possible_orientations = ["normal", "90", "180", "270"] class Module(core.module.Module): def __init__(self, config, theme): super().__init__(config, theme, []) self.service = "sway-auto-rotate@%s" % path.basename(environ['SWAYSOCK']).replace('-', '\\\\x2d') # self._widgets = [] self.update_widgets() def update_widgets(self): for display in json.loads(util.cli.execute("/usr/bin/swaymsg -t get_outputs -r")): name = display['name'] widget = self.widget(name) if not widget: widget = self.add_widget(name=name, full_text="若 "+name) widget.set("auto", util.cli.execute("systemctl --user show %s -p ActiveState" % self.service).split("\n")[0].split("=")[1]) core.input.register(widget, button=core.input.LEFT_MOUSE, cmd=self._toggle) core.input.register(widget, button=core.input.RIGHT_MOUSE, cmd=self._toggle_auto) widget.set("orientation", display['transform']) def state(self, widget): curr = widget.get("auto", "inactive") if curr == "inactive": return ["warning"] return [curr] def _toggle_auto(self, event): widget = self.widget(widget_id=event["instance"]) if widget.get("auto") == "inactive": util.cli.execute("systemctl --user start %s" % self.service) else: util.cli.execute("systemctl --user stop %s" % self.service) widget.set("auto", util.cli.execute("systemctl --user show %s -p ActiveState" % self.service).split("\n")[0].split("=")[1]) def _toggle(self, event): widget = self.widget(widget_id=event["instance"]) # compute new orientation based on current orientation idx = (possible_orientations.index(widget.get("orientation"))+ 1) % len(possible_orientations) new_orientation = possible_orientations[idx] widget.set("orientation", new_orientation) util.cli.execute("swaymsg 'output {} transform {}'".format(widget.name, new_orientation)) # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4