Home

Awesome

KPie

KPie is a simple window manipulation tool, modeled after devil's pie, with a Lua-based configuration file.

Usage is:

 kpie [options] [lua-config-file.lua]

Options are currently limited to:

--config   - Explicitly specify a configuration file.
--debug    - Show debugging information.
--single   - Process each window once, then exit.
--version  - Show the version number.

NOTE: This application is essentially obsolete as of 2020, as GNU/Linux desktops are running Wayland instead of X.org.

Overview

A single Lua configuration file will be parsed and executed for every window on your system, including invisible windows, and windows in different workspaces/virtual-desktops.

Unless you're running kpie --single then the configuration file will be invoked for each window that is opened in the future, until you terminate kpie.

By default kpie looks for ~/.kpie.lua, but you may choose another file when you start kpie via:

$ kpie ~/.config/kpie.lua

As noted the configuration file is Lua with the addition of some window-related primitives. To give you a flavour this is a sample configuration file:

--
-- If Xine is launched it should be "always on top"
--
if ( window_class() == "xine" ) then
    above()
end

--
-- The xlogo program is so cool it should be visible on all
-- workspaces
--
if ( window_title() == "xlogo" ) then
    pin()
end

The kpie.lua sample configuration file contains this code, as well as some more examples of Lua scripting. You can find more specialized example configuration files included in the samples/ directory.

The key thing to understand is that the same configuration file will be invoked for every window on your system, on the basis that you'll limit your actions to specific windows via the matching options.

For example if you had a configuration file which read merely "maximize()" your desktop would become very odd, as all the windows would be maximized, including your panel(s).

Configuration Generator

Included within the repository is a sample configuration file samples/dump.lua which is designed to be a helpful starting point if you wish to script the manipulation of your windows.

Simply run:

$ ./kpie ./samples/dump.lua

This will output chunks of config which you can edit or save:

-- Screen width : 1920
-- Screen height: 1080
if ( ( window_title() == "feeds" ) and
     ( window_class() == "Pidgin" ) ) then
        xy(0,0)
        size(1438,1023 )
        workspace(2)
end
if ( ( window_title() == "Buddy List" ) and
     ( window_class() == "Pidgin" ) ) then
     xy(1438,0 )
     size(482,1023 )
     workspace(2)
end

As you can see this has iterated over all existing windows, and shown you their current state - this is perfect if you wish to reproduce a complex layout interactively.

Installation

You can install binary packages for Debian GNU/Linux from the authors repository:

If you prefer to build from source you can do so providing you have the dependencies installed. Beyond the necessities, a compiler and make, you'll need:

Upon a Debian GNU/Linux system these may be installed via:

  sudo apt-get install libglib2.0-dev libgtk2.0-dev libwnck-dev libx11-dev liblua5.1-0-dev x11proto-core-dev

With the dependencies in-place you should be able to compile the binary by running:

 ./configure
 make

If you're building from a git checkout, rather than a named release, you'll need to run this instead:

 autoreconf --install
 ./configure
 make

Primitives

The following primitives are available:

Some of these primitives are documented in the sample-scripts.

Steve