PKÛZHGi3menu/menus.py# -*- coding: utf-8 -*- from i3menu import _ from i3menu import api from i3menu import commands class AbstractMenu(object): _entries = [] _prompt = 'Menu:' _target = None @property def target(self): return self._target def __init__(self, context=None): self.context = context def __call__(self): options = {i['title']: i['callback']for i in self._entries} Command = api.menu(options, _(self._prompt)) cmd = Command(context=self.context) return cmd() class MenuWindowActions(AbstractMenu): _name = 'window_actions' _prompt = "Window actions:" _entries = [ {'title': _('Move window to workspace'), 'callback': commands.CmdMoveWindowToWorkspace}, {'title': _('Border style'), 'callback': commands.CmdBorder}, {'title': _('Split'), 'callback': commands.CmdSplit}, {'title': _('Floating (toggle)'), 'callback': commands.CmdFloating}, {'title': _('Fullscreen (toggle)'), 'callback': commands.CmdFullscreen}, {'title': _('Sticky'), 'callback': commands.CmdSticky}, {'title': _('Move to Scratchpad'), 'callback': commands.CmdMoveWindowToScratchpad}, {'title': _('Quit'), 'callback': commands.CmdKill} ] class MenuTargetWindowActions(MenuWindowActions): _name = 'target_window_actions' @property def target(self): return api.select_window( title=_('Select target window:'), context=self.context) class MenuWorkspaceActions(AbstractMenu): _name = 'workspace_actions' _prompt = "Workspace actions:" _entries = [ {'title': _('Move workspace to output'), 'callback': commands.CmdMoveWorkspaceToOutput}, {'title': _('Rename workspace'), 'callback': commands.CmdRenameWorkspace}, ] class MenuTargetWorkspaceActions(MenuWorkspaceActions): _name = 'target_workspace_actions' @property def target(self): return api.select_workspace( title=_('Select target workspace:'), context=self.context) class MenuBarActions(AbstractMenu): _name = 'bar_actions' _prompt = "Bar actions:" _entries = [ {'title': _('hidden_state'), 'callback': commands.CmdBarHiddenState}, {'title': _('mode'), 'callback': commands.CmdBarMode}, ] class MenuScratchpadActions(AbstractMenu): _name = 'scratchpad_actions' _prompt = "Scratchpad actions:" _entries = [ {'title': _('Move window to the scratchpad'), 'callback': commands.CmdMoveWindowToScratchpad}, {'title': _('Show window from the scratchpad'), 'callback': commands.CmdScratchpadShow}, ] class MenuGotoActions(AbstractMenu): _name = 'goto_actions' _prompt = "Go to actions:" _entries = [ {'title': _('Go to workspace'), 'callback': commands.CmdGotoWorkspace}, ] class MenuGlobalActions(AbstractMenu): _name = 'global_actions' _prompt = "Global actions:" _entries = [ {'title': _('Debug log'), 'callback': commands.CmdDebuglog}, {'title': _('Shared memory log'), 'callback': commands.CmdShmlog}, {'title': _('Restart i3'), 'callback': commands.CmdRestart}, {'title': _('Reload i3'), 'callback': commands.CmdReload}, {'title': _('Exit i3'), 'callback': commands.CmdExit}, ] def all_menus(): menus = [ MenuBarActions, MenuGotoActions, MenuGlobalActions, MenuTargetWindowActions, MenuTargetWorkspaceActions, MenuWindowActions, MenuWorkspaceActions, MenuScratchpadActions ] return {menu._name: menu for menu in menus} PKÛZHuXXi3menu/utils.py# -*- coding: utf-8 -*- import os def which(program): """ check if an program exists and returns the path """ def is_exe(fpath): return os.path.isfile(fpath) and os.access(fpath, os.X_OK) fpath, fname = os.path.split(program) if fpath: if is_exe(program): return program else: for path in os.environ["PATH"].split(os.pathsep): path = path.strip('"') exe_file = os.path.join(path, program) if is_exe(exe_file): return exe_file return None try: dict.iteritems except AttributeError: # Python 3 def itervalues(d): return iter(d.values()) def iteritems(d): return iter(d.items()) else: # Python 2 def itervalues(d): return d.itervalues() def iteritems(d): return d.iteritems() PKÛZH9' % out.name or out.name name += out.name == focused_output.name \ and ' (current)' or '' label = '{idx}: {name}'.format( idx=i, name=name) options[label] = out if len(options.keys()) == 1: return options.values()[0] else: return menu(options, title=title, context=context) def select_window(title=DEFAULT_TITLE, scratchpad=False, context=None): entries = [] entries_list = i3_get_windows() if scratchpad: entries_list = i3_get_scratchpad_windows() for win in entries_list: entry = '{winclass}\t{title}'.format( winclass=win.window_class.encode('utf-8'), title=win.name.encode('utf-8')) entries.append(entry) options = { '{idx}: {entry}'.format(idx=i + 1, entry=e): e for i, e in enumerate(entries)} if len(options.keys()) == 1: return options.values()[0] else: return menu(options, title=title, context=context) PK›ZHOmi3menu/i18n.pyimport os import locale import gettext # https://wiki.maemo.org/Internationalize_a_Python_application APP_NAME = "i3menu" APP_DIR = os.getcwd() LOCALE_DIR = os.path.join(APP_DIR, 'locale') # Now we need to choose the language. We will provide a list, and gettext # will use the first translation available in the list DEFAULT_LANGUAGES = os.environ.get('LANG', '').split(':') DEFAULT_LANGUAGES += ['en_US'] # Try to get the languages from the default locale languages = [] lc, encoding = locale.getdefaultlocale() if lc: languages = [lc] # Concat all languages (env + default locale), # and here we have the languages and location of the translations # languages += DEFAULT_LANGUAGES mo_location = LOCALE_DIR # Lets tell those details to gettext # (nothing to change here for you) gettext.install(True) gettext.bindtextdomain( APP_NAME, mo_location) gettext.textdomain(APP_NAME) language = gettext.translation( APP_NAME, mo_location, languages=languages, fallback=True) PK0ZHY݈O i3menu/cli.pyimport argparse import sys import errno from i3menu import commands from i3menu import menus from i3menu.utils import which from i3menu.utils import iteritems def run(): all_commands = commands.all_commands() all_menus = menus.all_menus() all_actions = set() for k, cmd in iteritems(all_commands): all_actions |= set(cmd._actions) options = menus.all_menus().keys() + commands.all_commands().keys() parser = argparse.ArgumentParser( description='Provides rofi menus to interact with i3', prog='i3menu', version='2.0') parser.add_argument( "-d", "--debug", action='store_true', help="Debug, print the i3 command before executing it" ) parser.add_argument( "--menu-provider", dest='menu_provider', choices=['dmenu', 'rofi'], help="Force the use of a menu provider" ) parser.add_argument( "--action", dest='action', metavar='', choices=all_actions, help="""Command action. Depending on the command not all action may be available. Allowed values are: """ + ", ".join(all_actions), ) parser.add_argument( "menu", choices=options, help="Menu to be executed. Allowed values are: " + ", ".join(options), metavar='') args = parser.parse_args() res = [] context = {} if len(sys.argv) == 1: parser.print_help() sys.exit(1) if args.debug: context['debug'] = True if args.menu_provider: context['menu_provider'] = args.menu_provider if args.action: context['action'] = args.action menu = args.menu if menu in all_commands: Command = all_commands[menu] cmd = Command(context=context) elif menu in all_menus: Menu = all_menus[menu] cmd = Menu(context=context) res = cmd() if not res: sys.exit(errno.EINVAL) res = res[0] if res.get('success'): sys.exit() else: sys.exit('Error: ' + res.get('error')) if __name__ == '__main__': run() PKўZH_i3menu/__init__.py# -*- coding: utf-8 -*- from i3menu import i18n import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) _ = i18n.language.gettext PK›ZH*ssi3menu/commands/layout.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractCmd class CmdLayout(AbstractCmd): """ Use layout toggle split, layout stacking, layout tabbed, layout splitv or layout splith to change the current container layout to splith/splitv, stacking, tabbed layout, splitv or splith, respectively. """ _name = 'layout' _doc_url = 'http://i3wm.org/docs/userguide.html#_manipulating_layout' _actions = [ 'default', 'tabbed', 'stacking', 'splitv', 'splith', 'toggle split', 'toggle all'] def cmd(self): return 'layout {action}'.format(action=self.action) PK›ZH1.,i3menu/commands/move_window_to_scratchpad.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractWindowCmd class CmdMoveWindowToScratchpad(AbstractWindowCmd): _name = 'move_window_to_scratchpad' def cmd(self, target=None): return '[id="{id}"] move to scratchpad'.format(id=self.target.window) PK›ZH>k`i3menu/commands/sticky.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractWindowCmd class CmdSticky(AbstractWindowCmd): """ http://i3wm.org/docs/userguide.html#_sticky_floating_windows """ _name = 'sticky' _actions = ['enable', 'disable', 'toggle'] def cmd(self): return '[id="{id}"] sticky {action}'.format( id=self.target.window, action=self.action) PK›ZH P11#i3menu/commands/rename_workspace.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractWorkspaceCmd from i3menu import api from i3menu import _ class CmdRenameWorkspace(AbstractWorkspaceCmd): _name = 'rename_workspace' def cmd(self, target=None): newname = api._rofi( [self.target.name.encode('utf-8')], _('Rename workspace:'), **{'format': 's'} ) if not newname: return None return 'rename workspace "{oldname}" to "{newname}"'.format( oldname=self.target.name, newname=newname) PK›ZHyooi3menu/commands/shmlog.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractCmd class CmdShmlog(AbstractCmd): """ http://i3wm.org/docs/userguide.html#shmlog """ _name = 'shmlog' # TODO: add the possibility to specify the shared memory size _actions = ['on', 'off', 'toggle'] def cmd(self): return 'shmlog {action}'.format(action=self.action) PK›ZH@1+i3menu/commands/move_workspace_to_output.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractWorkspaceCmd class CmdMoveWorkspaceToOutput(AbstractWorkspaceCmd): """ http://i3wm.org/docs/userguide.html#_moving_workspaces_to_a_different_screen """ _name = 'move_workspace_to_output' def cmd(self, target=None): # XXX: it seems that it's not possible to specify a workspace other # than the current one. This needs to be investigated further # return 'move workspace "{name}" to output "{output}"'.format( # name=self.target.name, output=self.selected_output.name) return 'move workspace to output "{output}"'.format( output=self.selected_output.name) PK›ZH"i3menu/commands/scratchpad_show.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractScratchpadWindowCmd class CmdScratchpadShow(AbstractScratchpadWindowCmd): _name = 'scratchpad_show' def cmd(self, target=None): return '[id="{id}"] scratchpad show'.format(id=self.target.window) PK›ZHi3menu/commands/reload.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractCmd class CmdReload(AbstractCmd): """ http://i3wm.org/docs/userguide.html#_reloading_restarting_exiting """ _name = 'reload' def cmd(self): return self._name PK›ZHDi3menu/commands/floating.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractWindowCmd class CmdFloating(AbstractWindowCmd): """ To make the current window floating (or tiling again) use floating enable respectively floating disable (or floating toggle) """ _name = 'floating' _doc_url = 'http://i3wm.org/docs/userguide.html#_manipulating_layout' _actions = ['enable', 'disable', 'toggle'] def cmd(self): return '[id="{id}"] floating {action}'.format( id=self.target.window, action=self.action) PK›ZHvb?i3menu/commands/kill.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractWindowCmd class CmdKill(AbstractWindowCmd): _name = 'kill' def cmd(self): return '[id="{id}"] kill'.format(id=self.target.window) PK›ZHI QQ+i3menu/commands/move_window_to_workspace.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractWindowCmd class CmdMoveWindowToWorkspace(AbstractWindowCmd): _name = 'move_window_to_workspace' def cmd(self, target=None): return '[id="{id}"] move window to workspace "{ws}"'.format( id=self.target.window, ws=self.selected_workspace.name) PK›ZHFR#i3menu/commands/bar_hidden_state.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractBarCmd class CmdBarHiddenState(AbstractBarCmd): """ http://i3wm.org/docs/userguide.html#_i3bar_control """ _name = "bar_hidden_state" _actions = ['hide', 'show', 'toggle'] def cmd(self, action=None): return 'bar hidden_state {action} "{bar_id}"'.format( action=self.action, bar_id=self.target) PK›ZHnyi3menu/commands/fullscreen.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractWindowCmd class CmdFullscreen(AbstractWindowCmd): """ To make the current window (!) fullscreen, use fullscreen enable (or fullscreen enable global for the global mode), to leave either fullscreen mode use fullscreen disable, and to toggle between these two states use fullscreen toggle (or fullscreen toggle global). """ _name = 'fullscreen' _doc_url = 'http://i3wm.org/docs/userguide.html#_manipulating_layout' _actions = ['enable', 'disable', 'toggle'] def cmd(self): return '[id="{id}"] fullscreen {action}'.format( id=self.target.window, action=self.action) PK›ZHDDi3menu/commands/debuglog.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractCmd class CmdDebuglog(AbstractCmd): """ http://i3wm.org/docs/userguide.html#_enabling_debug_logging """ _name = 'debuglog' _actions = ['on', 'off', 'toggle'] def cmd(self): return 'debuglog {action}'.format(action=self.action) PK›ZH[~yyi3menu/commands/split.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractWindowCmd class CmdSplit(AbstractWindowCmd): """ http://i3wm.org/docs/userguide.html#_splitting_containers """ _name = 'split' _actions = ['vertical', 'horizontal'] def cmd(self): return '[id="{id}"] layout {action}'.format( id=self.target.window, action=self.action) PK›ZHA3uui3menu/commands/__init__.py# -*- coding: utf-8 -*- from i3menu.commands.bar_hidden_state import CmdBarHiddenState from i3menu.commands.bar_mode import CmdBarMode from i3menu.commands.border import CmdBorder from i3menu.commands.debuglog import CmdDebuglog from i3menu.commands.exit import CmdExit from i3menu.commands.floating import CmdFloating from i3menu.commands.fullscreen import CmdFullscreen from i3menu.commands.goto_workspace import CmdGotoWorkspace from i3menu.commands.kill import CmdKill from i3menu.commands.layout import CmdLayout from i3menu.commands.move_window_to_scratchpad import CmdMoveWindowToScratchpad from i3menu.commands.move_window_to_workspace import CmdMoveWindowToWorkspace from i3menu.commands.move_workspace_to_output import CmdMoveWorkspaceToOutput from i3menu.commands.reload import CmdReload from i3menu.commands.rename_workspace import CmdRenameWorkspace from i3menu.commands.restart import CmdRestart from i3menu.commands.scratchpad_show import CmdScratchpadShow from i3menu.commands.shmlog import CmdShmlog from i3menu.commands.split import CmdSplit from i3menu.commands.sticky import CmdSticky def all_commands(): cmds = [ CmdBarHiddenState, CmdBarMode, CmdBorder, CmdDebuglog, CmdExit, CmdFloating, CmdFullscreen, CmdGotoWorkspace, CmdKill, CmdLayout, CmdMoveWindowToScratchpad, CmdMoveWindowToWorkspace, CmdMoveWorkspaceToOutput, CmdReload, CmdRenameWorkspace, CmdRestart, CmdScratchpadShow, CmdShmlog, CmdSplit, CmdSticky, ] return {cmd._name: cmd for cmd in cmds} PK›ZHxi3menu/commands/restart.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractCmd class CmdRestart(AbstractCmd): """ http://i3wm.org/docs/userguide.html#_reloading_restarting_exiting """ _name = 'restart' def cmd(self): return self._name PK›ZHߧ!i3menu/commands/goto_workspace.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractCmd class CmdGotoWorkspace(AbstractCmd): _name = 'goto_workspace' def cmd(self): return 'workspace "{name}"'.format(name=self.selected_workspace.name) PK›ZH9i3menu/commands/border.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractCmd class CmdBorder(AbstractCmd): """ To change the border of the current client, you can use border normal to use the normal border (including window title), border pixel 1 to use a 1-pixel border (no window title) and border none to make the client borderless. There is also border toggle which will toggle the different border styles. """ _name = 'border' _description = 'change the border style' _doc_url = 'http://i3wm.org/docs/userguide.html#_changing_border_style' _actions = ['none', 'normal', 'pixel 1', 'pixel 3', 'toggle'] def cmd(self): return 'border {action}'.format(action=self.action) PK›ZH +i3menu/commands/exit.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractCmd class CmdExit(AbstractCmd): """ http://i3wm.org/docs/userguide.html#_reloading_restarting_exiting """ _name = 'exit' def cmd(self): return self._name PK›ZH@\:i3menu/commands/bar_mode.py# -*- coding: utf-8 -*- from i3menu.commands.base import AbstractBarCmd class CmdBarMode(AbstractBarCmd): """ http://i3wm.org/docs/userguide.html#_i3bar_control """ _name = "bar_mode" _actions = ['dock', 'hide', 'invisible', 'toggle'] def cmd(self, action=None): return 'bar mode {action} "{bar_id}"'.format( action=self.action, bar_id=self.target) PKÛZHdZi3menu/commands/base.py# -*- coding: utf-8 -*- from i3menu import api from i3menu import _ class AbstractCmd(object): """ Abstract command """ _name = "AbstractCmd" _description = '' _actions = [] def __init__(self, context=None): self._target = context.get('target') self._action = context.get('action') self.context = context def cmd(self): raise NotImplemented @property def target(self): return self._target @property def action(self): action = self._action if not action or action not in self._actions: options = {a: a for a in self._actions} action = api.menu( options, title=self._name + ' - action:', context=self.context) return action @property def selected_window(self): return api.select_window(context=self.context) @property def selected_workspace(self): return api.select_workspace(context=self.context) @property def selected_output(self): return api.select_output(context=self.context) def __call__(self, target=None): self._target = target cmd = self.cmd() if not cmd: return return api.i3_command(cmd, context=self.context) class AbstractWindowCmd(AbstractCmd): @property def target(self): return self._target or api.i3_get_window() class AbstractScratchpadWindowCmd(AbstractCmd): @property def target(self): return self._target or api.select_window( scratchpad=True, context=self.context) class AbstractWorkspaceCmd(AbstractCmd): @property def target(self): return self._target or api.i3_get_focused_workspace() class AbstractBarCmd(AbstractCmd): @property def target(self): return self._target or api.select_bar( _('Select bar:'), context=self.context) PK}ZHXi3menu/locale/i3-rofi.potmsgid "" msgstr "" "Project-Id-Version: i3-rofi\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-10-15 18:34+0000\n" "PO-Revision-Date: 2014-10-15 20:38+0100\n" "Last-Translator: Giacomo Spettoli \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: \n" "Language: it\n" "X-Generator: Poedit 1.6.9\n" msgid "Select:" msgstr "" msgid "Go to workspace:" msgstr "" msgid "Move window to workspace:" msgstr "" msgid "Move active workspace to output:" msgstr "" msgid "Rename workspace:" msgstr "" msgid "Choose window:" msgstr "" msgid "Floating (toggle)" msgstr "" msgid "Fullscreen (toggle)" msgstr "" msgid "Sticky (toggle)" msgstr "" msgid "Move to Scratchpad" msgstr "" msgid "Move window to this workspace" msgstr "" msgid "Quit" msgstr "" msgid "Window actions:" msgstr "" msgid "Workspace actions:" msgstr "" PK›ZHE|kk'i3menu/locale/it/LC_MESSAGES/i3-rofi.pomsgid "" msgstr "" "Project-Id-Version: i3-rofi\n" "POT-Creation-Date: 2016-02-18 16:00+0000\n" "PO-Revision-Date: 2016-02-18 16:36+0100\n" "Last-Translator: Giacomo Spettoli \n" "Language-Team: Giacomo Spettoli \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0\n" "Language: it\n" "Language-Code: it\n" "Language-Name: Italian\n" "Preferred-Encodings: utf-8 latin1\n" "Domain: i3-rofi\n" msgid "Select:" msgstr "Seleziona:" msgid "Go to workspace:" msgstr "Vai al workspace:" msgid "Move window to workspace:" msgstr "Sposta la finestra attiva sul workspace:" msgid "Move active workspace to output:" msgstr "Sposta il workspace attivo sul output:" msgid "Rename workspace:" msgstr "Rinomina il workspace:" msgid "Choose window:" msgstr "Scegli la finestra:" msgid "Floating (toggle)" msgstr "Galleggiante (inverti)" msgid "Fullscreen (toggle)" msgstr "Schermo intero (inverti)" msgid "Sticky (toggle)" msgstr "Appiccicosa (inverti)" msgid "Move to Scratchpad" msgstr "Sposta sullo scratchpad" msgid "Move window to this workspace" msgstr "Sposta una finestra su questo workspace" msgid "Quit" msgstr "Chiudi" msgid "Window actions:" msgstr "Azioni sulla finestra:" msgid "Workspace actions:" msgstr "Azioni sul workspace:" PK}ZHs'i3menu/locale/it/LC_MESSAGES/i3-rofi.mo hix  2:JZm<Pg&'(") @Kax   Choose window:Floating (toggle)Fullscreen (toggle)Go to workspace:Move active workspace to output:Move to ScratchpadMove window to this workspaceMove window to workspace:QuitRename workspace:Select:Sticky (toggle)Window actions:Workspace actions:Project-Id-Version: i3-rofi POT-Creation-Date: 2016-02-18 16:00+0000 PO-Revision-Date: 2016-02-18 16:36+0100 Last-Translator: Giacomo Spettoli Language-Team: Giacomo Spettoli MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0 Language: it Language-Code: it Language-Name: Italian Preferred-Encodings: utf-8 latin1 Domain: i3-rofi Scegli la finestra:Galleggiante (inverti)Schermo intero (inverti)Vai al workspace:Sposta il workspace attivo sul output:Sposta sullo scratchpadSposta una finestra su questo workspaceSposta la finestra attiva sul workspace:ChiudiRinomina il workspace:Seleziona:Appiccicosa (inverti)Azioni sulla finestra:Azioni sul workspace:PKZH[V""&i3menu-2.0.3.dist-info/DESCRIPTION.rstIntroduction ============ **i3menu** provides a useful set of menus based on `Rofi `_ and `dmenu `_ to interact with `i3wm `_. Installation ============ `i3menu` can be installed in a `virtualenv `_ :: $ pip install virtualenv $ virtualenv venv $ source venv/bin/activate $ pip install i3menu $ i3menu -h If you use a virtualenv, remember to always source you virtual env in order to have the `i3menu` command in your $PATH. If you are comfortable with installing it system-wide, it can also be installe using:: $ sudo pip install i3menu $ i3menu -h Usage ===== You can use i3menu directly from the command line:: $ i3menu --help or:: $ i3menu window_actions You can add i3menu to your i3 config. For example:: bindsym $mod+w exec --no-startup-id i3menu goto_workspace or:: bindsym $mod+w exec --no-startup-id i3menu -m go_to_workspace Credits ======= * partially inspired by `quickswitch-i3 `_ License ======== **Disclaimer: i3menu is a third party script and in no way affiliated with the i3 project, the dmenu project or the rofi project.** Changelog ========= 2.0.3 (2016-02-26) ------------------ - fix a typo that prevented to use the package without rofi installed [giacomos] 2.0.2 (2016-02-26) ------------------ - fix an error with missing history by adding a MANIFEST.in [giacomos] 2.0.1 (2016-02-26) ------------------ - nothis to see here [giacomos] 2.0 (2016-02-26) ---------------- - major code restyle - add all the i3-msg commands - major improvement of the command line interface - use both rofi and dmenu as menu providers - name changed: i3-rofi -> i3menu [giacomos] 1.0 (2016-02-18) ---------------- - Initial release - included menus are: go_to_workspace, move_window_to_workspace, move_window_to_this_workspace, move_workspace_to_output, rename_workspace, window_actions, workspace_actions [giacomos] PKZHX++'i3menu-2.0.3.dist-info/entry_points.txt[console_scripts] i3menu = i3menu.cli:run PKZHn  $i3menu-2.0.3.dist-info/metadata.json{"classifiers": ["Development Status :: 4 - Beta", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: Unix", "Topic :: Desktop Environment :: Window Managers", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3"], "extensions": {"python.commands": {"wrap_console": {"i3menu": "i3menu.cli:run"}}, "python.details": {"contacts": [{"email": "giacomo.spettoli@gmail.com", "name": "Giacomo Spettoli", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/giacomos/i3menu"}}, "python.exports": {"console_scripts": {"i3menu": "i3menu.cli:run"}}}, "extras": [], "generator": "bdist_wheel (0.26.0)", "keywords": ["i3", "i3wm", "rofi", "dmenu"], "license": "GPL", "metadata_version": "2.0", "name": "i3menu", "run_requires": [{"requires": ["argparse", "i3ipc", "setuptools"]}], "summary": "a set of menus based on Rofi or dmenu to interact with i3wm", "version": "2.0.3"}PKZH"$i3menu-2.0.3.dist-info/top_level.txti3menu PKZHndnni3menu-2.0.3.dist-info/WHEELWheel-Version: 1.0 Generator: bdist_wheel (0.26.0) Root-Is-Purelib: true Tag: py2-none-any Tag: py3-none-any PKZH-] i3menu-2.0.3.dist-info/METADATAMetadata-Version: 2.0 Name: i3menu Version: 2.0.3 Summary: a set of menus based on Rofi or dmenu to interact with i3wm Home-page: https://github.com/giacomos/i3menu Author: Giacomo Spettoli Author-email: giacomo.spettoli@gmail.com License: GPL Keywords: i3 i3wm rofi dmenu Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) Classifier: Operating System :: Unix Classifier: Topic :: Desktop Environment :: Window Managers Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 3 Requires-Dist: argparse Requires-Dist: i3ipc Requires-Dist: setuptools Introduction ============ **i3menu** provides a useful set of menus based on `Rofi `_ and `dmenu `_ to interact with `i3wm `_. Installation ============ `i3menu` can be installed in a `virtualenv `_ :: $ pip install virtualenv $ virtualenv venv $ source venv/bin/activate $ pip install i3menu $ i3menu -h If you use a virtualenv, remember to always source you virtual env in order to have the `i3menu` command in your $PATH. If you are comfortable with installing it system-wide, it can also be installe using:: $ sudo pip install i3menu $ i3menu -h Usage ===== You can use i3menu directly from the command line:: $ i3menu --help or:: $ i3menu window_actions You can add i3menu to your i3 config. For example:: bindsym $mod+w exec --no-startup-id i3menu goto_workspace or:: bindsym $mod+w exec --no-startup-id i3menu -m go_to_workspace Credits ======= * partially inspired by `quickswitch-i3 `_ License ======== **Disclaimer: i3menu is a third party script and in no way affiliated with the i3 project, the dmenu project or the rofi project.** Changelog ========= 2.0.3 (2016-02-26) ------------------ - fix a typo that prevented to use the package without rofi installed [giacomos] 2.0.2 (2016-02-26) ------------------ - fix an error with missing history by adding a MANIFEST.in [giacomos] 2.0.1 (2016-02-26) ------------------ - nothis to see here [giacomos] 2.0 (2016-02-26) ---------------- - major code restyle - add all the i3-msg commands - major improvement of the command line interface - use both rofi and dmenu as menu providers - name changed: i3-rofi -> i3menu [giacomos] 1.0 (2016-02-18) ---------------- - Initial release - included menus are: go_to_workspace, move_window_to_workspace, move_window_to_this_workspace, move_workspace_to_output, rename_workspace, window_actions, workspace_actions [giacomos] PKZH>} } i3menu-2.0.3.dist-info/RECORDi3menu/__init__.py,sha256=mMgu3JLpj8mMtwt9zXdwzsUHotYuxkFtkc30373MpkU,168 i3menu/api.py,sha256=WW2EFXGNJ4AAMfk98afaW0xOJSVcx9pzOC1boY4Tijg,5206 i3menu/cli.py,sha256=yvIHPTGCCKB0clPtNuu5Vy4v30K7kq_Czrub9Z-9E_w,2069 i3menu/i18n.py,sha256=on8GVy7LMMbq3w5k43nXlmhXlWXxZAc8qDkrsIiIk9U,1009 i3menu/menus.py,sha256=Q0ggJS7lxCGWHOfz_TzCVdSzHNrCScfPqqT2B8nfLcI,3831 i3menu/utils.py,sha256=WwYQQi7ig-FTVek4f1-SOcwUgwYo9OEP6ZF6JNz1B1w,856 i3menu/commands/__init__.py,sha256=_C7WZ2QrRID35iBJa7iiDDKnDZowR5smk33B1wjwlF8,1653 i3menu/commands/bar_hidden_state.py,sha256=qLZW2O3v-eiFvgq0ECP7lUEX055RQiWMnUj1kv2Bzhs,402 i3menu/commands/bar_mode.py,sha256=8s3FpHt8V8FUu_0jFNkysJeVcJ97VEQNE0m1JOomLOA,392 i3menu/commands/base.py,sha256=uZcxGcaVsV53ItHcbzX65qbwZssXwQcMB2X6TAlFyG8,1945 i3menu/commands/border.py,sha256=GfgRjUNUshseZE9ztm0n_MU4E4Mu-PtV3bukpbQ5XSI,747 i3menu/commands/debuglog.py,sha256=Lr8vMZ3UWCwa4zWskIoMsy63mBZnswQbaRIW9loQwyM,324 i3menu/commands/exit.py,sha256=pzvbfhMlIkXnDH50ToaNEJ_z0F46hGA3DbuP1Aafdnw,247 i3menu/commands/floating.py,sha256=5WnG-0biMTN9FM7bVyJXFtrvsCDeDok4Wovewmw9lrg,539 i3menu/commands/fullscreen.py,sha256=tx7B9h0mY3zDD6wcqHuVeMTt4y--dmfZ1jB_yYIHyxI,700 i3menu/commands/goto_workspace.py,sha256=T2biVlfXEjp6YcsGr3_POOZFgEpv_cvgesz14qkWNH4,236 i3menu/commands/kill.py,sha256=HyYVGd5FY9x-3KC6EF4UqvrPGBpHDDrtfOWS2LbHP1A,214 i3menu/commands/layout.py,sha256=VogawkWdAHRkKoaBMd_LI--54B_jwkqr5_HYyp7w-7c,627 i3menu/commands/move_window_to_scratchpad.py,sha256=tVox9wT1xiyPGVAC1psagJOBiezPsde9ypJiDRu9olw,280 i3menu/commands/move_window_to_workspace.py,sha256=qTts-RWJyZY4CHFwL_mkAItQu_HitxwRh_eNLc-lyWE,337 i3menu/commands/move_workspace_to_output.py,sha256=WVC7iEL_P_8rnvksg3jt6M74ZWJ31DdlqGksKs2VNgg,695 i3menu/commands/reload.py,sha256=H-wtLCfovBw2N2W1BmfiYBg9K205YAu_GypW3QviicI,251 i3menu/commands/rename_workspace.py,sha256=EqgP4AkDvdsIuJmrVsA26L0GJ7pQZcy49q9dId-DrfU,561 i3menu/commands/restart.py,sha256=U5DnuN4Qq40E5bX5fxWP1UMx7PGvRlnAh7FqWaffLZA,253 i3menu/commands/scratchpad_show.py,sha256=FlxWl1JLJLA3MALy2aKUnqeBL52b8LaIfubfajFzCE4,279 i3menu/commands/shmlog.py,sha256=BosOMR_jsRo0tkTSxh8stFpdcAke9WT5toI-0KHilt4,367 i3menu/commands/split.py,sha256=JtMRE66veg6MH3Du2YeKZLP5hvWgXZjrtonrtwu2nkU,377 i3menu/commands/sticky.py,sha256=yAluSAsEjDmFByxXijGdjv22f9YSk_DcGQ7Zh1Lttxk,387 i3menu/locale/i3-rofi.pot,sha256=hGuKbniAELTK9sI9ofWymMJOeVTkoWvAVONQ_kKjlEU,948 i3menu/locale/it/LC_MESSAGES/i3-rofi.mo,sha256=2SJjadfyMbq4XXOws_jTMoFQamiq1jZpo5bdJ0Ew_tI,1422 i3menu/locale/it/LC_MESSAGES/i3-rofi.po,sha256=8kcvBAUXEJqN6btPEFEbOmkPRxyyZKrhLaJR6RVnmhg,1387 i3menu-2.0.3.dist-info/DESCRIPTION.rst,sha256=5SIycwNPFdr-bGYcYLzpqxfNpYgxDNvLdNRirgMu6Ic,2082 i3menu-2.0.3.dist-info/METADATA,sha256=xuBWXnRisxW-iUa65CZsekFLruGgV9YAeIwXjSYfdIc,2811 i3menu-2.0.3.dist-info/RECORD,, i3menu-2.0.3.dist-info/WHEEL,sha256=GrqQvamwgBV4nLoJe0vhYRSWzWsx7xjlt74FT0SWYfE,110 i3menu-2.0.3.dist-info/entry_points.txt,sha256=LvAL6KbDXRhpdh-jdjzE4ak5pH1n22vPmj1bWOfzYSY,43 i3menu-2.0.3.dist-info/metadata.json,sha256=90O8RzefyXL6wR7awQcpWi5Q5wx0ASWtxBAfI4m3Itg,1033 i3menu-2.0.3.dist-info/top_level.txt,sha256=CxEf702sj_5sS-AMnqCbHzH2G8CC9wQuCE5csriqoDg,7 PKÛZHGi3menu/menus.pyPKÛZHuXX$i3menu/utils.pyPKÛZH9k`k8i3menu/commands/sticky.pyPK›ZH P11#%:i3menu/commands/rename_workspace.pyPK›ZHyoo<i3menu/commands/shmlog.pyPK›ZH@1+=>i3menu/commands/move_workspace_to_output.pyPK›ZH"=Ai3menu/commands/scratchpad_show.pyPK›ZHBi3menu/commands/reload.pyPK›ZHDCi3menu/commands/floating.pyPK›ZHvb?Fi3menu/commands/kill.pyPK›ZHI QQ+%Gi3menu/commands/move_window_to_workspace.pyPK›ZHFR#Hi3menu/commands/bar_hidden_state.pyPK›ZHnyJi3menu/commands/fullscreen.pyPK›ZHDDMi3menu/commands/debuglog.pyPK›ZH[~yyOi3menu/commands/split.pyPK›ZHA3uuPi3menu/commands/__init__.pyPK›ZHxcWi3menu/commands/restart.pyPK›ZHߧ!Xi3menu/commands/goto_workspace.pyPK›ZH9Yi3menu/commands/border.pyPK›ZH +\i3menu/commands/exit.pyPK›ZH@\:^i3menu/commands/bar_mode.pyPKÛZHdZ_i3menu/commands/base.pyPK}ZHXgi3menu/locale/i3-rofi.potPK›ZHE|kk'ki3menu/locale/it/LC_MESSAGES/i3-rofi.poPK}ZHs';qi3menu/locale/it/LC_MESSAGES/i3-rofi.moPKZH[V""&wi3menu-2.0.3.dist-info/DESCRIPTION.rstPKZHX++'ti3menu-2.0.3.dist-info/entry_points.txtPKZHn  $i3menu-2.0.3.dist-info/metadata.jsonPKZH"$/i3menu-2.0.3.dist-info/top_level.txtPKZHndnnxi3menu-2.0.3.dist-info/WHEELPKZH-]  i3menu-2.0.3.dist-info/METADATAPKZH>} } Xi3menu-2.0.3.dist-info/RECORDPK&&