Skip to content
Adds window-tiling hotkeys to any X11 desktop. (An analogue to WinSplit Revolution for people who don't want to use Compiz Grid)
Python Shell
Branch: master
Clone or download

Latest commit

Stephan Sokolow Stephan Sokolow
Stephan Sokolow and Stephan Sokolow Bump the version number for HEAD and update ChangeLog
Latest commit ca8105d May 11, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
debian Heed #106 (comment) Feb 9, 2020
docs Implement first attempt at handling HiDPI window scaling properly May 11, 2020
functional_harness Tidy up API documentation TODO notes Jan 27, 2020
quicktile Bump the version number for HEAD and update ChangeLog May 11, 2020
.codeclimate.yml Add a CodeClimate config file Apr 9, 2017
.coveragerc Fix oversight in code coverage calculation Aug 20, 2017
.gitignore Do initial port of command reference to Sphinx Jan 15, 2020
.scrutinizer.yml Add Scrutinizer static analysis Jan 29, 2017
.travis.yml Keep Travis CI from failing if they use a newer MyPy than I do May 11, 2020
AUTHORS Clarify "original version" for "gtkexcepthook" in Authors. Feb 14, 2020
CONTRIBUTING.rst Add a CONTRIBUTING.rst Jan 25, 2020
ChangeLog Bump the version number for HEAD and update ChangeLog May 11, 2020
LICENSE Add a copy of the GPL 2.0 to the source tree. Aug 15, 2013
MANIFEST.in Split up QuickTile into multiple files and fix bugs thus revealed Aug 20, 2017
README.rst Add GPLv2+ badge to README.rst Feb 11, 2020
dev_requirements.txt Add flake8 to dev_requirements.txt Jan 25, 2020
icon.svg Create a basic icon that I can add to the Open Hub entry Jan 24, 2020
install.sh Fix install.sh, setup.py, and tox to work in Python3+PyGI Dec 29, 2019
pylintrc Fix the linting setup to not rely on my system defaults May 11, 2020
quicktile.desktop Split up QuickTile into multiple files and fix bugs thus revealed Aug 20, 2017
quicktile.sh Use `exec` in quicktile.sh Dec 19, 2019
recompile_local_debian_package.sh Fix: write in directory after creating the directory. Feb 9, 2020
run_tests.sh Fix the linting setup to not rely on my system defaults May 11, 2020
setup.cfg Fix the linting setup to not rely on my system defaults May 11, 2020
setup.py Update ePyDoc docstrings and convert to reStructuredText Dec 29, 2019
test_functional.py Tidy up API documentation TODO notes Jan 27, 2020
test_quicktile.py Add more unit tests for issue 45 Jan 28, 2020
tox.ini Fix install.sh, setup.py, and tox to work in Python3+PyGI Dec 29, 2019

README.rst

QuickTile

Scrutinizer Code Quality Code Climate Travis-CI Coveralls License: GPLv2+

Keyboard-driven Window Tiling for your existing X11 window manager

Important Message For Users of GTK+ 2.x QuickTile

In addition to migrating from GTK+ 2.x to GTK 3, QuickTile 0.4.0 makes the following changes:

  • The PyGTK to PyGI migration has changed the list of dependencies significantly.
  • Regressions in certain GDK APIs have made python-xlib a mandatory dependency.
  • The middle command has been renamed to center for consistency with move-to-center. You will have to update anything which calls middle via the command-line or D-Bus APIs, but quicktile.cfg will update automatically.
  • Please contact me if you maintain your own QuickTile patches. I have begun a major refactoring and want to make sure your changes get updated accordingly.

Requirements:

Debian and derivatives (Ubuntu, Mint, etc.):

sudo apt-get install python3 python3-pip python3-setuptools python3-gi python3-xlib python3-dbus gir1.2-glib-2.0 gir1.2-gtk-3.0 gir1.2-wnck-3.0

Fedora and derivatives:

sudo dnf install python3 python3-pip python3-setuptools python3-gobject python3-xlib python3-dbus gtk3 libwnck3

For other distros or for more details, please consult the Dependencies section of the manual.

Installation

QuickTile can be run from the source folder without installation via the ./quicktile.sh script.

For system-wide installation, the recommended option is pip3, which will record a log to allow easy uninstallation.

sudo pip3 install https://github.com/ssokolow/quicktile/archive/master.zip

QuickTile's dependence on PyGObject prevents a fully PyPI-based installation option.

Consult the Installation section of the manual for full details and alternative installation options.

First-Run Instructions for Global Hotkeys:

  1. Run quicktile or ./quicktile.sh once to generate your configuration file at ~/.config/quicktile.cfg.
  2. Edit the keybindings as desired.
  3. Run quicktile --daemonize or ./quicktile.sh --daemonize to bind to global hotkeys.
  4. If everything seems to be working, add quicktile --daemonize or /full/path/to/quicktile.sh --daemonize to the list of commands your desktop will run on login.

Consult the Configuration section of the manual for further details.

Important Notes:

  • If run in a terminal, QuickTile's --daemonize option will attempt to report any problems with claiming global hotkeys for itself.
  • You can get a list of valid actions for the configuration file by running quicktile --show-actions.
  • You can list your current keybindings by running quicktile --show-bindings.
  • If you experience problems, please consult the FAQ section of the manual before reporting an issue.

Usage (Typical)

  1. Focus the window you want to tile
  2. Hold the modifiers defined in ModMask (Ctrl+Alt by default).
  3. Repeatedly press one of the defined keybindings to cycle through window sizes available at the desired location on the screen.

Consult quicktile --show-bindings or the Command Reference section of the manual for a list of default keybindings.

(For example, under default settings, repeatedly pressing Ctrl+Alt+7 will place the active window in the top-left corner of the screen and cycle it through different width presets.)

This works best when combined with functionality your existing window manager provides (eg. Alt+Tab) to minimize the need to switch your hand between your keyboard and your mouse.

See the Usage section of the manual for alternative ways to interact with QuickTile.

Removal

If you used the installation instructions listed above, a system-wide installation of QuickTile can be removed with the following commands:

sudo pip3 uninstall quicktile
sudo rm /usr/local/bin/quicktile

See the Removal section of the manual for instructions on clearing out files left behind by other installation methods.

Contributing

I welcome contributions.

The recommended approach to make sure minimal effort is wasted is to open an issue indicating your interest in working on something. That way, I can let you know if there are any non-obvious design concerns that might hold up my accepting your pull requests.

If you're looking for something to do, a ready supply of simple TODOs is split across two different mechanisms:

  1. Run grep -R TODO *.py quicktile/ in the project root.
  2. Set todo_include_todos = True in docs/conf.py and run cd docs; make html to generate a version of the manual with a TODO listing on the top-level API documentation page.

See the Developer's Guide for more information.

You can’t perform that action at this time.