Giter Club home page Giter Club logo

qtile's Introduction

Logo

A full-featured, hackable tiling window manager written and configured in Python

Website PyPI CI status Read the Docs License Codestyle Coverage

Features

  • Simple, small and extensible. It's easy to write your own layouts, widgets and commands.
  • Configured in Python.
  • Runs as an X11 WM or a Wayland compositor.
  • Command shell that allows all aspects of Qtile to be managed and inspected.
  • Complete remote scriptability - write scripts to set up workspaces, manipulate windows, update status bar widgets and more.
  • Qtile's remote scriptability makes it one of the most thoroughly unit-tested window managers around.

Community

Qtile is supported by a dedicated group of users. If you need any help, please don't hesitate to fire off an email to our mailing list or join us on IRC. You can also ask questions on the discussions board.

Mailing List

https://groups.google.com/group/qtile-dev

Q&A

https://github.com/qtile/qtile/discussions/categories/q-a

IRC

irc://irc.oftc.net:6667/qtile

Discord

https://discord.gg/ehh233wCrC (Bridged with IRC)

Example code

Check out the qtile-examples repo which contains examples of users' configurations, scripts and other useful links.

Contributing

Please report any suggestions, feature requests, bug reports, or annoyances to the GitHub issue tracker. There are also a few tips & tricks, and guidelines for contributing in the documentation.

Please also consider submitting useful scripts etc. to the qtile-examples repo (see above).

Maintainers

@tych0 GPG: 3CCA B226 289D E016 0C61 BDB4 18D1 8F1B C464 DCA3
@ramnes GPG: 99CC A84E 2C8C 74F3 2E12 AD53 8C17 0207 0803 487A
@m-col GPG: 35D9 2E7C C735 7A81 173E A1C9 74F9 FDD2 0984 FBEC
@flacjacket GPG: 58B5 F350 8339 BFE5 CA93 AC9F 439D 9701 E7EA C588
@elParaguayo GPG: A6BA A1E1 7D26 64AD B97B 2C6F 58A9 AA7C 8672 7DF7
@jwijenbergh GPG: B1C8 1CF3 063B 5836 4946 3687 4827 061B D417 C233

qtile's People

Contributors

adsworth avatar anshumanb avatar azd325 avatar bavardage avatar cjbarnes18 avatar cortesi avatar dequis avatar dmpayton avatar doriangray avatar elparaguayo avatar flacjacket avatar frostidaho avatar heitzmann avatar jwijenbergh avatar kenjitakahashi avatar kynikos avatar m-col avatar mattharrison avatar paradoxxxzero avatar pawamoy avatar przymusp avatar ramnes avatar roger avatar sux2mfgj avatar tailhook avatar tcld avatar thomaswaldmann avatar tych0 avatar whatacold avatar zordsdavini avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

qtile's Issues

Phantom Windows

gucharmap find dialog and pidgin's file transfer window (the area they occupy) doesn't get destroyed, only when you close the app do they disappear

Treelayout works awfully with floating windows

It shows single window, no matter if it's floating.

The problem can be deeper, because tree layout assumes current visible window is a focused one.

(will probably fix myself, just to not to forget)

MWM hints

Running image viewer 'feh' and pressing 'v' for fullscreen, I get the command-line error message "feh WARNING: Window Manager does not support MWM hints. To get a borderless window I have to bypass your wm."

Memory being gobbled up

I've been running qtile for about 2 weeks now as my primary wm. I was running some other stuff and started swapping today and just noticed that the qtile process was taking up 700 Megs of res. mem. This is probably after running for 3-4 days.

I haven't looked into it at all, just thought I'd file a bug for now.

old install requirements

Info about python-xpyb should be added and Xlib should be removed.

% grep -rl 'Xlib' .
./INSTALL
./doc-src/dev.html
./test/scripts/window
./test/utils.py

Restarting leaves zombie windows (can't kill them)

After restarting I'm getting some zombie windows that won't kill. They are grey when I mouse over them, they're looking like kde popups(?), since the names show up as konsole, knotify4, kded4.

I believe I was seeing this previously in Xephyr windows with the following showing up in the logs:

Unknown window property: _NET_WM_USER_TIME

Let me know what else I can provide to debug.

Layout issues with dual monitors

When one monitor switches to the group that the other monitor is on, the windows are not redrawn to the correct monitor. The WindowName widget, however, is correctly updated. This leaves you in a situation where each monitors WindowName displays the name of the window on the other monitor.

Once in this state, opening or closing any window will redraw the windows to the correct monitor.

I am having this issue on the RatioTile layout when two Screens are set in my config. RatioTile with only one Screen works as expected. The Max and Stack layouts do not experience this problem at all.

Cortesi mentioned in IRC that he could not duplicate the issue with RatioTile, but that he did see something similar with Max (which works for me), leading him to believe it may be a bug deeper in qtile.

new_client hook

I made a new_client hook that uses a windows' 'cmd_togroup' attribute to move new windows to the right group, BUT it seems when the new_client hook is called, the window as yet doesn't belong to a group (window.group == None) so the first problem is
self.group.remove(self)
(in cmd_togroup in window.py) causes an error. If this is replaced with
if self.group:
self.group.remove(self)
it seems to work BUT now the window exists in two places, where it should be, and where it was opened, so it seems the current group is assigned to the window as its initial group after the hook; if it was assigned before, the modification to window.py would have been un-needed.

So, what would be a good solution?
I need to set the group of the window after the initial group assignment, or in-stead of. Preferably I could prevent an initial group being assigned, so the window never 'blinks' fleetingly onscreen, and is never assigned to the current group. I think the best way would be if the code that assigns this inital group first checks if the hook has assigned a group already (and if so, skips assigning one itself), and then maps the window (by calling some 'update-display' method of the groups the window belongs to?). What do you think?

BTW, this is using the master branch.

Floating windows

I'm trying to implement floating windows. I have two questions:

  1. Currently floating windows are added to layout, but skipped when doing actual resizing. This means that you see the hole instead window, that is floating. Layout can account floating attribute but it must be implemented in every layout, which is ugly. More obvious way would be to remove floating window from layout. Is this the right way?
  2. Each window is added to every layout in a group, but only one of layouts is active. It makes sense because layout can track sequence of add window events. But I think we are going to do more add/remove actions for floating windows. So is it worth it? Or may be there are other reasons for that?

xcb.xproto.WindowError

I get the following messages when I shut down chromium:
"
<xcb.xproto.WindowError object at 0x7fa366ede370>
<xcb.xproto.WindowError object at 0x7fa366ede550>
<xcb.xproto.WindowError object at 0x7fa366ede410>
<xcb.xproto.WindowError object at 0x7fa366ede500>
<xcb.xproto.WindowError object at 0x7fa366ede5f0>
<xcb.xproto.WindowError object at 0x7fa366ede640>
<xcb.xproto.WindowError object at 0x7fa366ede460>
<xcb.xproto.WindowError object at 0x7fa366ede6e0>
<xcb.xproto.WindowError object at 0x7fa366ede690>
"

Since chromium also gives other warning messages that the developers say should just be ignored, these warnings may also be chromiums fault, but I'm not sure.

Qtile crash

*** QTILE REPORT 2011-04-19 10:07:40.066427
Message: Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/libqtile/manager.py", line 1016, in _xpoll
  r = h(e)
File "/usr/lib/python2.7/site-packages/libqtile/manager.py", line 1244, in handle_DestroyNotify
  self.unmanage(e.window)
File "/usr/lib/python2.7/site-packages/libqtile/manager.py", line 895, in unmanage
  c.group.remove(c)
File "/usr/lib/python2.7/site-packages/libqtile/manager.py", line 437, in remove
  nextfocus = self.floating_layout.remove(win)
File "/usr/lib/python2.7/site-packages/libqtile/layout/floating.py", line 140, in remove
  res = self.focus_next(c)
File "/usr/lib/python2.7/site-packages/libqtile/layout/floating.py", line 93, in focus_next
idx = self.clients.index(win)
ValueError: Window(Printing) is not in list

uzbl script crashes qtile.

when I use a certain uzbl script, qtile freezes. I suspect the use of 'socat' is to blame.
Here is the qtile crashreport output:
"
*** QTILE REPORT 2010-09-10 04:04:10.021244
Message: Traceback (most recent call last):
File "/usr/lib64/python2.6/site-packages/libqtile/manager.py", line 659, in xpoll
e = self.conn.conn.poll_for_event()
Exception: An error has occurred on the connection.

Last 100 events:
Unknown event: NoExposure
Unknown event: NoExposure
Unknown event: NoExposure
"

No module named pangocairo

I've installed the latest qtile from git and it terminates with an exception:

Traceback (most recent call last):
  File "/usr/bin/qtile", line 72, in <module>
    main()
  File "/usr/bin/qtile", line 58, in main
    c = confreader.File(options.configfile)
  File "/usr/lib/python2.7/site-packages/libqtile/confreader.py", line 56, in __init__
    raise ConfigError(str(v))
libqtile.confreader.ConfigError: No module named pangocairo

Installing pygtk resolves the issue (at least for Arch Linux).

Off group windows can come into view

Good news: qtile is already very useful, featureful and intuitive for a person adjusted to tiling wms. Bad news: Corner cases :)

Lets say I have the following :

  • akregator (RSS reader) running in group 1
  • firefox running in group 2

If I have akregator "open a link in external browser", then firefox will appear in group 1. (Though I can't interact with it unless I go back to group 2).

crash when closing client

Sometimes I have it that an application closes, and qtile dies immediately.

Crashreport:

*** QTILE REPORT 2011-01-13 22:31:54.365939
Message: Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/libqtile/manager.py", line 932, in loop
self.xpoll()
File "/usr/lib/python2.7/site-packages/libqtile/manager.py", line 917, in xpoll
self.errorHandler(v)
File "/usr/lib/python2.7/site-packages/libqtile/manager.py", line 1148, in errorHandler
print >> sys.stderr, e
IOError: [Errno 5] Input/output error

Last 100 events:
Handling: PropertyNotify
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Handling: PropertyNotify
Internal event: window_name_change((), {})
Handling: PropertyNotify
Internal event: window_name_change((), {})
Handling: PropertyNotify
Handling: PropertyNotify
Handling: PropertyNotify
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Handling: DestroyNotify
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Handling: PropertyNotify
Internal event: window_name_change((), {})
Handling: PropertyNotify
Internal event: window_name_change((), {})
Handling: PropertyNotify
Handling: PropertyNotify
Handling: PropertyNotify
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Handling: DestroyNotify
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Handling: KeyPress
Command: toscreen((), {})
Internal event: client_focus((Window(Dieter on the web : /emulating_two-dimensional_(or_even_multi-dimensional)array...),), {})
Internal event: setgroup((), {})
Internal event: focus_change((), {})
Handling: UnmapNotify
Handling: EnterNotify
Internal event: focus_change((), {})
Internal event: client_focus((Window(Dieter on the web : /emulating_two-dimensional
(or_even_multi-dimensional)_array...),), {})
Handling: PropertyNotify
Handling: PropertyNotify
Handling: PropertyNotify
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Handling: PropertyNotify
Handling: PropertyNotify
Handling: DestroyNotify
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Unknown event: 'NoExposure'
Handling: PropertyNotify
Handling: PropertyNotify
Handling: PropertyNotify
Handling: PropertyNotify

restart command in qsh never returns

Running the restart command in qsh will force you to abort the command using
CTRL-C, resulting in the following tacktrace:

Traceback (most recent call last):
  File "/usr/bin/qsh", line 55, in 
    main()
  File "/usr/bin/qsh", line 51, in main
    qsh.loop()
  File "/usr/lib/python2.7/site-packages/libqtile/sh.py", line 267, in loop
    val = self._call(cmd, args)
  File "/usr/lib/python2.7/site-packages/libqtile/sh.py", line 240, in _call
    dict(cmd=cmd)
  File "", line 1, in 
  File "/usr/lib/python2.7/site-packages/libqtile/command.py", line 101, in __call__
    return self.call(self.selectors, self.name, *args, **kwargs)
  File "/usr/lib/python2.7/site-packages/libqtile/command.py", line 228, in call
    state, val = self.client.call((selectors, name, args, kwargs))
  File "/usr/lib/python2.7/site-packages/libqtile/ipc.py", line 81, in call
    return self.send(data)
  File "/usr/lib/python2.7/site-packages/libqtile/ipc.py", line 74, in send
    fds, _, _ = select.select([sock], [], [], 0)
KeyboardInterrupt

qtile crash

Pulled this morning [0] and got this crash.

*** QTILE REPORT 2011-07-18 14:39:00.475541
Message: Server Error: BadWindow
    bad_value: 31518552
    major_opcode: 20
    minor_opcode: 0
Traceback (most recent call last):
  File "/home/mharrison/work/qtile/qtile/libqtile/manager.py", line 1068, in _xpoll
    r = h(e)
  File "/home/mharrison/work/qtile/qtile/libqtile/manager.py", line 1285, in handle_MapRequest
    c = self.manage(w)
  File "/home/mharrison/work/qtile/qtile/libqtile/manager.py", line 966, in manage
    self.currentScreen.group.add(c)
  File "/home/mharrison/work/qtile/qtile/libqtile/manager.py", line 457, in add
    if self.floating_layout.match(win):
  File "/home/mharrison/work/qtile/qtile/libqtile/layout/floating.py", line 48, in match
    if win.window.get_wm_type() in FLOAT_WM_TYPES:
  File "/home/mharrison/work/qtile/qtile/libqtile/xcbq.py", line 427, in get_wm_type
    r = self.get_property('_NET_WM_WINDOW_TYPE', "ATOM", unpack='I')
  File "/home/mharrison/work/qtile/qtile/libqtile/xcbq.py", line 512, in get_property
    0, (2**32)-1
BadWindow: <xcb.xproto.WindowError object at 0xa946e14>

Last 100 events:
    Handling: PropertyNotify
    Handling: PropertyNotify

0 - https://github.com/cortesi/qtile/tree/560663bbc71d5b0ebf5750396e0bdc8f76a4b2d2

tabbed terminal

I trying work with tabbed terminal's, as sakura & lilyterm. But it's freezes, if I try add new tab. What i do wrong?

Doesn't start without a config file

It was surprising to see the following, after resolving pangocairo problem:
$ qtile
Traceback (most recent call last):
File "/usr/bin/qtile", line 72, in
main()
File "/usr/bin/qtile", line 58, in main
c = confreader.File(options.configfile)
File "/usr/lib/python2.7/site-packages/libqtile/confreader.py", line 51, in init
raise ConfigError("Config file does not exist: %s"%fname)
libqtile.confreader.ConfigError: Config file does not exist: /home/bobry/.config/qtile/config.py

Why doesn't qtile copy default config to ~/.config/qtile/? or at least use default settings behind the scenes.

crash running xrandr command

If I run the following command:
xrandr --output VGA1 --auto

qtile crashes. Here's the ~/qtile_crashreport:

*** QTILE REPORT 2010-11-16 13:53:04.803822
Message: Traceback (most recent call last):
  File "/home/matt/work/pylibs/qtile/libqtile/manager.py", line 909, in xpoll
    r = h(e)
  File "/home/matt/work/pylibs/qtile/libqtile/manager.py", line 1046, in handle_ConfigureNotify
    screen.resize(0, 0, e.width, e.height)
  File "/home/matt/work/pylibs/qtile/libqtile/manager.py", line 225, in resize
    self._configure(self.qtile, self.index, x, y, w, h, self.group)
  File "/home/matt/work/pylibs/qtile/libqtile/manager.py", line 142, in _configure
    i._configure(qtile, self)
  File "/home/matt/work/pylibs/qtile/libqtile/bar.py", line 166, in _configure
    qtile.registerWidget(i)
  File "/home/matt/work/pylibs/qtile/libqtile/manager.py", line 728, in registerWidget
    raise confreader.ConfigError("Duplicate widget name: %s"%w.name)
ConfigError: Duplicate widget name: prompt

Last 100 events:
        Handling: ConfigureRequest
        Handling: DestroyNotify
        Handling: DestroyNotify
        Unknown event: 'NoExposure'

focus follows mouse not always correctly

  • qtile latest from git
  • stacked mode, with 2 windows on each side
    sometimes, when i move the mouse from one window to the other, it doesn't receive focus
    i still need to find out how to accurately reproduce it, i think it only happens when i just changed to the group because it has an urgent flag

external (xrandr) monitor support borked

Am trying out qtile as primary wm now on my laptop. When I turn on my external monitor everything (both screens) go to that window.

I use the following command:

xrandr --output VGA1 --auto
xrandr --output LVDS1 --right-of VGA1 --auto

It seems like an x offset is not correct somewhere....

ps - I thought I had this bug filed before, but can't find it

get_wm_type broken

I've fixed get_wm_type some time ago and used that to make dialog windows floating. And today noticed it's broken. It's value now can be POINT_SIZE or something other strange, instead of _NET_WM_... which were translated into short dialog or something. Its something related to xcb atoms. Could somebody more familiar with the protocol look at that and say, if I am doing something strange with xcb atoms?

Drag skips window floating with upper left corner on other screen.

If I've dragged a window so it's upper left corner is on the other screen, I'm no longer able to drag it around using a click on the current screen.

There should be a mechanism to determine that a click was on a window even if it belongs to another group/screen.

display problems.

Since the swap to the xpyb version of qtile, some things aren't working right. The tab-bar in chrome doesn't render properly, and qiv (pqiv, actually) is having problems in that images appear as just black. the original qiv actually crashes qtile!

layout.remove crush

As of Mar 16 merges, I'm getting crashes in layout.remove methods. Here's one example, but it's happened in 4 different layouts.

*** QTILE REPORT 2011-03-22 23:12:52.152352
Message: Traceback (most recent call last):
File "/home/matt/work/pylibs/qtile/libqtile/manager.py", line 1008, in _xpoll
r = h(e)
File "/home/matt/work/pylibs/qtile/libqtile/manager.py", line 1236, in handle_DestroyNotify
self.unmanage(e.window)
File "/home/matt/work/pylibs/qtile/libqtile/manager.py", line 889, in unmanage
c.group.remove(c)
File "/home/matt/work/pylibs/qtile/libqtile/manager.py", line 430, in remove
nextfocus = self.floating_layout.remove(win)
File "/home/matt/work/pylibs/qtile/libqtile/layout/floating.py", line 140, in remove
res = self.focus_next(c)
File "/home/matt/work/pylibs/qtile/libqtile/layout/floating.py", line 93, in focus_next
idx = self.clients.index(win)
ValueError: list.index(x): x not in list

A simple fix seems to be to verify that x is in list, but that seems to be a workaround some race condition.

Is there a need to introduce some locking mechanism? (It would probably help with dragging windows across groups too)

focus on enter for screens (with mouse)

It seems that if a screen has no windows there's no way of focusing the screen(root window?) with the mouse, it would be nice if when the mouse entered the screen it would get focused, this way if I then hit + my terminal will open on the screen the mouse is on, sorry I'm still getting use to fully using the keyboard, and some time's I'm too lazy to return to the keyboard from the mouse ;)
thanks

gtkwave seems to resize?

Using the program 'gtkwave', the sizing seems to start in proportion, but at some point the window expands so the part of it isn't visible on the screen.

Dragging Chromium around while it's in "dress with native window manager" mode crash

···> cat qtile_crashreport.2 
*** QTILE REPORT 2010-09-17 15:04:14.474130
Message: Traceback (most recent call last):
  File "/usr/lib/python2.6/site-packages/libqtile/manager.py", line 668, in xpoll
    r = h(e)
  File "/usr/lib/python2.6/site-packages/libqtile/window.py", line 474, in handle_ConfigureRequest
    self.bordercolor
  File "/usr/lib/python2.6/site-packages/libqtile/window.py", line 262, in place
    borderwidth=borderwidth
  File "/usr/lib/python2.6/site-packages/libqtile/xcbq.py", line 398, in configure
    return self.conn.conn.core.ConfigureWindow(self.wid, mask, values)
  File "/usr/lib/python2.6/site-packages/xcb/xproto.py", line 1630, in ConfigureWindow
    buf.write(str(buffer(array('I', value_list))))
OverflowError: unsigned int is less than minimum

restarting qtile

I'm not sure if this is a bug, but if I restart qtile w/o restarting the X Server, not all of my windows are mapped in the new instance.

xeyes is a dependency for tests

I was getting about half of the tests failing until I installed xeyes....
diff --git a/test/README b/test/README
index 149f3d0..c9376cc 100644
--- a/test/README
+++ b/test/README
@@ -8,7 +8,7 @@ Dependencies

     - Xephyr (preferred) or Xnest nested X server.

-
+    - xeyes

 Running Tests
 =============
diff --git a/test/utils.py b/test/utils.py
index 5908ae6..cc4bb04 100644
--- a/test/utils.py
+++ b/test/utils.py
@@ -153,6 +153,8 @@ class _QtileTruss(libpry.AutoTree):
             self._kill(pid)

     def _testProc(self, path, args):
+        if path is None:
+            raise AssertionError("Trying to run None! (missing executable)")
         start = len(self.c.windows())
         pid = os.fork()
         if pid == 0:

Install borked on Ubuntu 10.4

I spent a while today trying to get qtile installed on a fresh 10.4 box. (Have previously been working on gentoo)

First xcb had problems building (needed build-essentials, libtool, autoconf2.13, libxau). xcbgen is out of sync. So I pulled xcb-proto from git. I seemed to get both of those installed with semi recent versions, but then both xpyb and xpyb-ng are out of date with xcbgen.

I'll futz with awesome for a while, since I don't have time to debug more right now. Sorry.

--socket option

qtile has a 'socket' switch, which is a path to the qtile socket, which I assume should be a string, but the parser has it as a bool.

Floating across screens orphans floated window

If you have dual screens and float a window across the screens, the window will become orphaned until a restart. (actually you can get access to it by toggling through focus on its original screen and unfloating it, but it's annoying). It would be desirable to change screens when it moves completely into another screen.

Only one window should have focus decoration with multi screens

When switching focus from one screen to another there ends up being a focused window on each screen (ie both windows have the focus decoration). I would think that since only one window can have focus, there should only be one window with focus decoration.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.