Source code for libqtile.extension.command_set

from libqtile.extension.dmenu import Dmenu


[docs] class CommandSet(Dmenu): """ Give list of commands to be executed in dmenu style. ex. manage mocp deamon: .. code-block:: python Key([mod], 'm', lazy.run_extension(extension.CommandSet( commands={ 'play/pause': '[ $(mocp -i | wc -l) -lt 2 ] && mocp -p || mocp -G', 'next': 'mocp -f', 'previous': 'mocp -r', 'quit': 'mocp -x', 'open': 'urxvt -e mocp', 'shuffle': 'mocp -t shuffle', 'repeat': 'mocp -t repeat', }, pre_commands=['[ $(mocp -i | wc -l) -lt 1 ] && mocp -S'], **Theme.dmenu))), ex. CommandSet inside another CommandSet .. code-block:: python CommandSet( commands={ "Hello": CommandSet( commands={ "World": "echo 'Hello, World!'" }, **Theme.dmenu ) }, **Theme.dmenu ) """ defaults = [ ("commands", None, "dictionary of commands where key is runable command"), ("pre_commands", None, "list of commands to be executed before getting dmenu answer"), ] def __init__(self, **config): Dmenu.__init__(self, **config) self.add_defaults(CommandSet.defaults) def run(self): if not self.commands: return if self.pre_commands: for cmd in self.pre_commands: self.qtile.spawn(cmd) out = super().run(items=self.commands.keys()) try: sout = out.rstrip("\n") except AttributeError: # out is not a string (for example it's a Popen object returned # by super(WindowList, self).run() when there are no menu items to # list return if sout not in self.commands: return command = self.commands[sout] if isinstance(command, str): self.qtile.spawn(command) elif isinstance(command, CommandSet): command.run()