{ "info": { "author": "Sean Hammond", "author_email": "flitter@seanh.cc", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", "Programming Language :: Python :: 2.7" ], "description": "[![Build Status](https://travis-ci.org/seanh/flitter.svg)](https://travis-ci.org/seanh/flitter)\n[![Coverage Status](https://img.shields.io/coveralls/seanh/flitter.svg)](https://coveralls.io/r/seanh/flitter)\n[![Latest Version](https://pypip.in/version/flitter/badge.svg)](https://pypi.python.org/pypi/flitter/)\n[![Downloads](https://pypip.in/download/flitter/badge.svg)](https://pypi.python.org/pypi/flitter/)\n[![Supported Python versions](https://pypip.in/py_versions/flitter/badge.svg)](https://pypi.python.org/pypi/flitter/)\n[![Development Status](https://pypip.in/status/flitter/badge.svg)](https://pypi.python.org/pypi/flitter/)\n[![License](https://pypip.in/license/flitter/badge.svg)](https://pypi.python.org/pypi/flitter/)\n\n\nFlitter\n=======\n\nFlitter makes launching apps and switching between windows as fast and easy\nas possible:\n\n* F1 launches Firefox, or focuses the Firefox window if Firefox is already\n running.\n* If there's more than one Firefox window open, repeatedly hitting F1 cycles\n through them.\n* F2 does the same for gVim.\n* And so on, binding all your most-frequently used apps to the function keys\n or other keyboard shortcuts (you configure the apps and shortcuts yourself).\n* I have F1..F10 bound to my 10 most frequently used apps, and F11 cycling\n through all other windows that don't belong to my top ten apps.\n* When moving between apps Flitter raises each app's most recently used window\n first, and when cycling through an app's windows it goes through them in\n most-recently-used-first order.\n\nCompared to using the mouse or traditional fast window switching shortcuts\n(like Alt-Tab), with Flitter:\n\n* You don't need to keep track of which apps are open and closed.\n Let the computer do that. F1 just takes you to Firefox, opening it if\n necessary. You can only Alt-Tab to an app if it's open, if not you have to\n do something else to launch it.\n* You never need to use the mouse to open apps or switch windows.\n* You never need to use two hands or two finger contortions to press multiple\n keys at once (Alt+Tab, Tab, Tab...). Just hit one function key.\n* You only need to use one key (perhaps hitting it\n repeatedly) to get to a window, no Alt+Tab,Tab,Tab to get to an app then\n Alt+\\`,\\`,\\` or Alt+down,left,left to get to the window.\n* You don't need to look at or think about anything on screen other than the\n app windows themselves as they're focused (no finding the right icon in an\n Alt-Tab dialog)\n* Very finger memory compatible, your hands will quickly memorize F1 for\n Firefox, F5 for Thunderbird, F8 for Skype, and you'll be switching apps at\n the speed of thought.\n\nRepeatedly hitting F1 to cycle through Firefox windows doesn't scale well if\nyou have dozens of Firefox windows open.\nBut personally I usually have just one, and never more than three or four,\nwindows per app (and then sometimes several tabs within each window) and\nFlitter works great for me (focusing the most recently used windows first makes\na big difference).\n\nBinding each function key to an app doesn't scale when you have more apps than\nfunction keys. You can just fall back on Alt-Tab for apps outside of your top\n12, but `flitter --others` (see below) gives you a key for cycling through\nwindows that don't belong to any of your bound apps. I find this lets me avoid\nAlt-Tab entirely.\n\n\nRequirements\n------------\n\nFlitter requires Python 2.7, [wmctrl](http://tomas.styblo.name/wmctrl/) and\nworks with any WMH/NetWM compatible X Window Manager (Gnome, Unity, Openbox...)\n\nIt doesn't work on Windows, OS X, or non-WMH/NetWM linux environments yet,\nalthough porting should be possible (just replace\n[wmctrl.py](https://github.com/seanh/flitter/blob/master/flitter/wmctrl.py)\nwith something capable of interacting with your desktop's windows).\n\n\nInstallation\n------------\n\nFirst install wmctrl. On Debian or Ubuntu, just:\n\n $ sudo apt-get install wmctrl\n\nThen install Flitter:\n\n $ pip install flitter\n\nYou should now be able to run the `flitter` command in your shell.\nRun `flitter -h` for help.\n\n\nConfiguration & Usage\n---------------------\n\nCopy the [default configuration file](https://github.com/seanh/flitter/blob/master/flitter/flitter.json)\nto `~/.flitter.json`. This is a [JSON](http://json.org/) file containing a list\nof _window specs_. Window specs are how Flitter knows which windows belong to\nwhich app. Each spec has a name, such as `Firefox`, and a number of properties\nthat are matched against the properties of your open windows to decide whether\neach window is a Firefox window or not. For example:\n\n \"Firefox\": {\n \"wm_class\": \".Firefox\",\n \"command\": \"firefox\"\n },\n\nThis window spec will match all windows whose WM_CLASS property contains the\nstring \".Firefox\" (in other words, all Firefox windows).\n\nTo have Flitter raise a Firefox window or launch Firefox, run it with the\nspec's name as the command-line argument:\n\n $ flitter firefox\n\nFlitter doesn't have built-in support for keyboard shortcuts.\nYou just use whatever mechanism your window manager provides to bind keyboard\nshortcuts to flitter commands.\n\nTo see a list of all your open windows and their properties so you can write\nwindow specs for them, run `wmctrl -lxp` (see `man wmctrl` for more info).\n\nThe `\"command\"` part of the spec is the command that Flitter will run to launch\nFirefox, if it finds no Firefox windows.\n\nThis way of identifying windows is quite flexible. You can go beyond the simple\none app per keyboard shortcut model, for example:\n\n* A key to switch to the Firefox window showing Google Calender or open Google\n Calender in a new Firefox window\n* A key to switch to the Gnome Terminal window running WeeChat or open a new\n Gnome Terminal window with the WeeChat profile\n\nThe full set of attributes that you can include in a window spec is:\n\n`window_id`\n The unique ID of an open window, e.g. 0x0180000b\n\n`desktop`\n The desktop that the window is on, e.g. 1\n\n`pid`\n The process ID of the window, e.g. 3384\n\n`wm_class`\n The WM_CLASS of the window, e.g. Navigator.Firefox\n\n`machine`\n The client machine that the window belongs to\n\n`title`\n The window title\n\n\nDevelopment Install\n-------------------\n\nTo install Flitter in a virtual environment for development first install\nvirtualenv, on Debian or Ubuntu do:\n\n $ sudo apt-get install python-virtualenv\n\nThen create and activate a Python virtual environment and install Flitter into\nit:\n\n $ virtualenv flitter\n $ . flitter/bin/activate\n $ cd flitter\n $ pip install -e 'git+https://github.com/seanh/flitter.git#egg=flitter'\n\n`which flitter` should now report the flitter binary in your virtualenv.\n\nTo run the tests do:\n\n $ cd src/flitter\n $ pip install -r dev-requirements.txt\n $ nosetests\n\nTo run the tests and produce a test coverage report, do:\n\n $ nosetests --with-coverage --cover-inclusive --cover-erase --cover-tests\n\nTo upload a new release of Flitter to PyPI ans GitHub:\n\n1. Update the version number in [setup.py](setup.py).\n2. `python setup.py sdist`\n3. `python setup.py sdist upload`\n4. `git commit setup.py -m \"Release version X.Y.Z\"`\n5. `git tag X.Y.Z`\n6. `git push`\n7. `git push --tags`", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/seanh/flitter", "keywords": "", "license": "AGPL", "maintainer": null, "maintainer_email": null, "name": "flitter", "package_url": "https://pypi.org/project/flitter/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/flitter/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/seanh/flitter" }, "release_url": "https://pypi.org/project/flitter/1.0.0/", "requires_dist": null, "requires_python": null, "summary": "Fast desktop window switching and app launching utility", "version": "1.0.0" }, "last_serial": 1433648, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "c83aa6f32f96b2c9632de6c599ff3922", "sha256": "ba0b6762f112ec3729d88342f52d50aff03fef340b8b8fcbd846039e4c47b0c8" }, "downloads": -1, "filename": "flitter-1.0.0.tar.gz", "has_sig": false, "md5_digest": "c83aa6f32f96b2c9632de6c599ff3922", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16071, "upload_time": "2015-02-22T22:37:28", "url": "https://files.pythonhosted.org/packages/26/5a/bf1f4a59746876206c23076a7e4b429f3e2d58ae12e3e8ab5e4063126740/flitter-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c83aa6f32f96b2c9632de6c599ff3922", "sha256": "ba0b6762f112ec3729d88342f52d50aff03fef340b8b8fcbd846039e4c47b0c8" }, "downloads": -1, "filename": "flitter-1.0.0.tar.gz", "has_sig": false, "md5_digest": "c83aa6f32f96b2c9632de6c599ff3922", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16071, "upload_time": "2015-02-22T22:37:28", "url": "https://files.pythonhosted.org/packages/26/5a/bf1f4a59746876206c23076a7e4b429f3e2d58ae12e3e8ab5e4063126740/flitter-1.0.0.tar.gz" } ] }