Skip to content

agwells/pywo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PyWO - Python Window Organizer

Introduction

PyWO allows you to easily organize windows on the desktop using keyboard shortcuts. It's inspired by Quicktile, Compiz plugins: Grid, Put, and Maximumize.

Features:

  • Move window in any direction and snap it to other windows' edges
  • Resize (expand or shrink) window in any direction
  • Place window in predefined places on the desktop
  • Use grid-like layout (place window and cycle predefined sizes)
  • Switch windows' positions
  • Highly customizable

Watch PyWO in action

Requirements

Build & Install

    1. Clone this git repo
    1. python ./setup.py build
    1. python ./setup.py install
    1. ./pywo --daemon

Download

Download archive with PyWO-0.2 for stable version.

Checkout project's Subversion repository for development version (/trunk folder). This version contains latest features and bugfixes, but I can't guarantee that it will be stable!

Compatibility

PyWO works with (or at least should work with) any EWMH compliant window manager.

Seems to work OK (or almost OK) with:

  • Compiz (tested with 0.7.8, and 0.8.4) (does not work with 0.9.x used by Unity)
  • Metacity (tested with 2.24 and 2.30.1)
  • KDE (KWin) (tested with 4.3.0)
  • XFCE (Xfwm4) (tested with 4.6.1)
  • Enlightment (e16) (tested with 1.0.0)
  • Openbox (tested with 3.4.10)
  • FVWM (tested with 2.5.28)

In 0.2 version there are problems with:

  • Blackox (tested with 0.70.1), IceWM (tested with 1.36) - no support for _NET_FRAME_EXTENTS, but I should be able to write a hack to get borders' size anyway (fixed in development version)
  • Fluxbox (tested with 1.1.1), WindowMaker - window is moved 1px (to right and bottom) too far, not sure why... (fixed in development version)
  • Sawfish (tested with 1.3.5.2) - (fixed in development version)
  • pekwm (tested with 0.1.11) - some strange behaviour (fixed in development version)
  • JWM - some strange behaviour
  • Afterstep - _NET_WORKAREA returns None

Development version works OK with GNOME 3 (Mutter)

Usage

Just run ./pywo.py

Create ~/.pyworc file to configure PyWO. Read PyWO Configuration for reference. Defaults can be found in pyworc file. You can choose one of the predefined grid layouts: 2x2, 3x2 (default), 3x3, or define your own.

PyWO creates /tmp/PyWO.log file where all debugging informations are logged.

Default keyboard shortcuts:

Alt-Ctrl-Shift-Q    - exit PyWO
Alt-Ctrl-Shift-R    - reload configuration file
Alt-Ctrl-Shift-I    - print debug information about window manager and current window

Alt-KP_Divide       - switch windows (change position of the window)
Alt-Shift-KP_Divide - cycle windows (change contents of the window)

Alt-KP_1-9          - move window in a direction (KP_1-9 - numpad keys)
Shift-KP_1-9        - expand window in a direction (5 works as maximumize compiz plugin)
Alt-Shift-KP_1-9    - shrink window
Alt-Ctrl-KP_1-9     - put window to predefined position
Ctrl_KP_1-9         - put and resize (grid), and cycle widths
Ctrl-Shift_KP_1-9   - put and resize (grid), and cycle heights

Cycle/Switch - press keyboard shortcut and select other window (using Alt-Tab, or using mouse). If you want to cancel switch/cycle press again the keyboard shortcut

Known bugs

  • shrinking with MIDDLE direction is not always working as expected
  • windows set to appear on all desktops can cause some problems (fixed in development version)
  • problems with windows with border_width > 0

TODO

  • keyboard setting for laptop users (withou keypad) - maybe vim like HJKL, or UIOJKLM<>?
  • Undo feature
  • test with more than one monitor connected - if you want to help me with multi monitor support please send me output of this script - it will check diplays, screens, resolutions
  • more settings for move and expand actions
  • prepare for easy_install (implemented in development version)
  • use pkg_resources and entry_points for plugins system (implemented in development version)
  • snap only to visible windows only (skip windows that are covered by others)
  • unit testing (in progress)
  • add D-Bus communication (implemented in development version)

Changelog

developmnet version (check out /trunk from repository)

  • fixed support for Fluxbox, Blackbox, IceWM, Sawfish, Window Maker, pekwm
  • fixed handling of sticky windows
  • added capslock setting
  • grid_2x2 and grid_3x2 ignore grid_height action by default
  • new actions: activate, close, sticky, shade, fullscreen, maximize(_vert|_horz), iconify, above, below
  • aliases for action and section names
  • D-Bus communication with PyWO
  • matching windows by name, and classname
  • commandline support (similar to wmctrl)
  • distribution as Python package (easy_install / pip support)
  • major refactoring - it is now possible to use pywo as wrapper for Xlib library
  • support for third-party plugins
  • modal mode - for use without keypad
  • Xinerama support

0.2

  • added switch and cycle actions
  • added ignore options for [SETTINGS] section and layout definition sections

0.1.1

  • changed license to GPLv3 (I've noticed that python-xlib is under GPLv2 so it seems I can't use Apache License 2.0)
  • some changes in events module

0.1

  • first release

About

Automatically exported from code.google.com/p/pywo

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages