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

Overview

Logo

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

Website PyPI CI status Read the Docs Coveralls License

Features

  • Simple, small and extensible. It's easy to write your own layouts, widgets and commands.
  • Configured in Python.
  • 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.

Mailing List: http://groups.google.com/group/qtile-dev
IRC: irc://irc.oftc.net:6667/qtile

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.

Comments
  • Jetbrain's products loose focus

    Jetbrain's products loose focus

    2020-05-21 update

    Fixes have been merged in master, thus this shouldn't be a problem anymore. Feedback welcome!

    2020-04-28 update

    The main problem is that Jetbrain's products after focusing other window and back looses focus in editor frame. You can't enter any text. This even happens then navigating between Jetbrain's tabs. Additionally popups loose focus, too. Confirmed on phpStorm, pyCharm, AndroidStudio.

    What has been tried:

    • set _JAVA_AWT_WM_NONREPARENTING=1 environment variable
    • set ``wmname="LG3D" in Qtile config

    revision 28d5c30 is the start of this bug revision before (0617235) works as expected

    workarounds:

    • revert to 0.14.2
    • use Xephyr
    bug 
    opened by zordsdavini 75
  • Transparency in X11 and Wayland

    Transparency in X11 and Wayland

    This PR adds 32-bit colour depth for X11 which allows transparent windows (e.g. the bar). This PR aims to address some existing issues (#900, #1320, #1722, #1934 and probably some others) but will need more work before it can be merged. I'm uploading it now in case people want to test it.

    It does look pretty good though: 20210606_212211

    There's a discussion about getting transparency to work here: https://github.com/qtile/qtile/discussions/2508

    This is based on the work of frostidaho from a number of years ago - so big kudos to them for doing most of the legwork.

    I'm assuming the system tray will be an issue so I'll look at that next...

    Wayland would also need to be looked at separately.

    EDIT: systray may be ok: 20210607_075722

    EDIT 2: To do list

    • [x] Handle redrawing of semi-opaque drawers. Overlay mode results in increasing opacity.
    • [x] X11 - check if 32 bit enabled and adjust transparency if not (getting some rendering issues with 24-bit depth)
    • [x] Testing
      • [x] Check systray widget
        • [x] Confirm transparency for icons
        • [x] Note: SysTray only works for fully opaque/fully transparent bar. Won't fix for semi-opaque.
      • [x] Check more widgets (graphs, images etc.)
        • [x] Fix groupbox widget
        • [x] Check tasklist (this is the only widget that looks like it may have a similar issue to groupbox)
      • [x] Check whether gradient fill still works
      • [x] Add tests!
    • [x] Wayland
      • [x] Check that Wayland backend not broken by these changes
      • [x] Get transparency working in Wayland too!
    opened by elParaguayo 67
  • Dbus_next migration

    Dbus_next migration

    Warning: there are a lot of commits in this PR so it will be necessary to rebase

    This is a work in progress with further commentary in https://github.com/qtile/qtile/issues/1982

    This is not ready for merging but I've created this PR so people can test if interested. Feedback greatly appreciated.

    enhancement widgets 
    opened by elParaguayo 58
  • Feature: z-layering of windows

    Feature: z-layering of windows

    After a great example by @senthilbaboo (#2144), I reworked the (second) attempt at layering code (#2029) to make better use of X-functionality. This is the first implementation I finished and tested, so there will be some rough edges and room for improvement. I also have yet to see how the tests fare.

    The core.manager.change_layer()-method is at the heart of this PR; things seems to work as well as the previous implementation so far (even a little better, since #676 seems to be fixed by this), but so far I don't really like the spaghettis in that method, especially considering that there are more X-flags we should be taking care of.

    • [x] convert _Window.cmd_keep_above() and _Window.cmd_keep_below() to properties (keep the methods for easy access, though)
    bug enhancement in progress 
    opened by tcld 51
  • Allow multiple highlight methods in groupbox widget

    Allow multiple highlight methods in groupbox widget

    If implemented, will add a new default parameter and change the draw() method of the GroupBox widget to allow different highlight methods for groups on different screens.

    By default, groups on unfocused screens will be highlighted with border, and the user can define unfocused_highlight_method in their config.py if they would like to change it, just like the current highlight_method.

    stale 
    opened by CSpencerND 50
  • Not a well-defined alpha color.

    Not a well-defined alpha color.

    100% — FF 99% — FC 98% — FA 97% — F7 96% — F5 95% — F2 94% — F0 93% — ED 92% — EB 91% — E8 90% — E6 89% — E3 88% — E0 87% — DE 86% — DB 85% — D9 84% — D6 83% — D4 82% — D1 81% — CF 80% — CC 79% — C9 78% — C7 77% — C4 76% — C2 75% — BF 74% — BD 73% — BA 72% — B8 71% — B5 70% — B3 69% — B0 68% — AD 67% — AB 66% — A8 65% — A6 64% — A3 63% — A1 62% — 9E 61% — 9C 60% — 99 59% — 96 58% — 94 57% — 91 56% — 8F 55% — 8C 54% — 8A 53% — 87 52% — 85 51% — 82 50% — 80 49% — 7D 48% — 7A 47% — 78 46% — 75 45% — 73 44% — 70 43% — 6E 42% — 6B 41% — 69 40% — 66 39% — 63 38% — 61 37% — 5E 36% — 5C 35% — 59 34% — 57 33% — 54 32% — 52 31% — 4F 30% — 4D 29% — 4A 28% — 47 27% — 45 26% — 42 25% — 40 24% — 3D 23% — 3B 22% — 38 21% — 36 20% — 33 19% — 30 18% — 2E 17% — 2B 16% — 29 15% — 26 14% — 24 13% — 21 12% — 1F 11% — 1C 10% — 1A 9% — 17 8% — 14 7% — 12 6% — 0F 5% — 0D 4% — 0A 3% — 08 2% — 05 1% — 03 0% — 00

    opened by krive001 49
  • Bar not showing up on reload

    Bar not showing up on reload

    Currently using this config

    When I reload qtile with qtile.cmd_reload_config or lazy.reload_config, the windows reload, but the bar doesn't.

    2022-02-23 11:09:33,846 WARNING libqtile lifecycle.py:_atexit():L33 Restarting Qtile with os.execv(...)
    2022-02-23 11:09:35,154 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to image_1 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['image_1']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,155 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to textbox_1 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['textbox_1']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,156 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to textbox_2 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['textbox_2']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,158 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to clock_1 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['clock_1']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,161 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to textbox_3 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['textbox_3']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,164 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to textbox_4 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['textbox_4']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,165 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to textbox_5 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['textbox_5']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,196 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to textbox_6 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['textbox_6']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,196 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to textbox_7 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['textbox_7']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,197 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to textbox_8 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['textbox_8']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,198 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to textbox_9 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['textbox_9']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,198 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to spacer_1 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['spacer_1']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,199 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to textbox_10 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['textbox_10']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,201 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to textbox_11 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['textbox_11']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,202 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to genpolltext_1 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['genpolltext_1']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,203 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to genpolltext_2 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['genpolltext_2']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,203 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to textbox_12 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['textbox_12']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,203 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to textbox_13 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['textbox_13']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,204 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to spacer_2 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['spacer_2']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,204 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to genpolltext_3 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['genpolltext_3']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,204 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to spacer_3 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['spacer_3']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,205 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to textbox_14 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['textbox_14']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    2022-02-23 11:09:35,205 WARNING libqtile manager.py:register_widget():L571 Widget was renamed to spacer_4 in qtile.widgets_map. To bind commands, rename the widget or use lazy.widget['spacer_4']. A duplicate widget was also found in the same bar or screen. If you wish to access the widget via lazy.bar[position].widget or lazy.screen.widget, you should rename the widget in your config.
    

    This is after restarting. I don't think it's related to the issue though.

    opened by ervinpopescu 47
  • Reloading config

    Reloading config

    EDIT: I appropriated this PR for general config-reloading changes. Previously it was limited to the popup commit but as these changes are a group (and would conflict when done separately) I've kept them together

    Currently send_notification will try to send a notification but fail quietly if there is no notification server running. To get the message to the user's eyes, it can instead fall back to a transient Popup window.

    This also changes the config-reading code to use this mechanism to inform the user of a config error, rather than creating a new Config object just so we can stick a TextBox in it to notify them.

    opened by m-col 39
  • Refactor Qtile LifeCycle

    Refactor Qtile LifeCycle

    This PR refactors the process lifecycle related parts of Qtile to properly manage resource finalization and just generally cleans up the code.

    Instead of running os.execv before python's builtin finalization routines, this uses those same finalization routines to move os.execv to the last thing done by the interpreter before termination.

    opened by DorianGray 39
  • Qtile restart quits to display manager

    Qtile restart quits to display manager

    Issue description

    After upgrade to 0.18.0, lazy.restart and qtile cmd-obj -o cmd -f restart quits to display manager. There is no trace in qtile.log, it just receives 2021-09-04 14:03:29,389 WARNING libqtile lifecycle.py:_atexit():L34 Restarting Qtile with os.execv(...)

    Qtile version

    0.18.0 https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/applications/window-managers/qtile/default.nix

    Stack traces

    Nothing in .xsession-error or qtile.log

    Configuration

    # Copyright (c) 2010 Aldo Cortesi
    # Copyright (c) 2010, 2014 dequis
    # Copyright (c) 2012 Randall Ma
    # Copyright (c) 2012-2014 Tycho Andersen
    # Copyright (c) 2012 Craig Barnes
    # Copyright (c) 2013 horsik
    # Copyright (c) 2013 Tao Sauvage
    #
    # Permission is hereby granted, free of charge, to any person obtaining a copy
    # of this software and associated documentation files (the "Software"), to deal
    # in the Software without restriction, including without limitation the rights
    # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    # copies of the Software, and to permit persons to whom the Software is
    # furnished to do so, subject to the following conditions:
    #
    # The above copyright notice and this permission notice shall be included in
    # all copies or substantial portions of the Software.
    #
    # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    # SOFTWARE.
    
    from typing import List  # noqa: F401
    from libqtile import bar, layout, widget
    from libqtile.config import Click, Drag, Group, Key, Match, Screen, KeyChord
    from libqtile.lazy import lazy
    from libqtile.utils import guess_terminal
    
    
    mod = "mod4"
    terminal = f"urxvt"
    
    keys = []
    
    # Drag floating layouts.
    mouse = [
        Drag([mod], "Button1", lazy.window.set_position_floating(),
             start=lazy.window.get_position()),
        Drag([mod], "Button3", lazy.window.set_size_floating(),
             start=lazy.window.get_size()),
        Click([mod], "Button2", lazy.window.bring_to_front())
    ]
    
    dgroups_key_binder = None
    dgroups_app_rules = []  # type: List
    follow_mouse_focus = True
    bring_front_click = False
    cursor_warp = False
    floating_layout = layout.Floating(float_rules=[
        # Run the utility of `xprop` to see the wm class and name of an X client.
        *layout.Floating.default_float_rules,
        Match(wm_class='confirmreset'),  # gitk
        Match(wm_class='makebranch'),  # gitk
        Match(wm_class='maketag'),  # gitk
        Match(wm_class='ssh-askpass'),  # ssh-askpass
        Match(title='branchdialog'),  # gitk
        Match(title='pinentry'),  # GPG key password entry
    ])
    
    auto_fullscreen = True
    focus_on_window_activation = "smart"
    reconfigure_screens = True
    
    # If things like steam games want to auto-minimize themselves when losing
    # focus, should we respect this or not?
    auto_minimize = True
    
    # XXX: Gasp! We're lying here. In fact, nobody really uses or cares about this
    # string besides java UI toolkits; you can see several discussions on the
    # mailing lists, GitHub issues, and other WM documentation that suggest setting
    # this string if your java app doesn't work correctly. We may as well just lie
    # and say that we're a working one by default.
    #
    # We choose LG3D to maximize irony: it is a 3D non-reparenting WM written in
    # java that happens to be on java's whitelist.
    wmname = "LG3D"
    
    # extra config
    from libqtile import hook
    
    # groups
    groups = [Group(str(i+1),label="") for i in range(9)]
    for i in groups:
        keys.extend([
            Key([mod], i.name, lazy.group[i.name].toscreen(toggle=False),
                desc="Switch to group {}".format(i.name)),
            Key([mod, "shift"], i.name, lazy.window.togroup(i.name, switch_group=True),
                desc="Switch to & move focused window to group {}".format(i.name)),
        ])
    
    # layouts
    layouts = [layout.MonadTall()]
    
    # bar
    widget_defaults = dict(font="Iosevka Nerdfont",fontsize=12,padding=3)
    extension_defaults = widget_defaults.copy()
    
    workspace = widget.GroupBox(font="Font Awesome 5 Free Regular",fontsize=16,highlight_method="text")
    status_bar = bar.Bar([workspace],32)
    
    # screens
    maxScreens = 1
    screens = [Screen(bottom=status_bar) for i in range(maxScreens)]
    #screens = [Screen() for i in range(maxScreens)]
    
    def monad_stack_size(qtile):
        info = qtile.current_layout.info()
        return len(info["secondary"])
    
    def grow_master(qtile):
        if monad_stack_size(qtile) != 0:
            qtile.current_layout.cmd_grow_main()
    
    def shrink_master(qtile):
        if monad_stack_size(qtile) != 0:
            qtile.current_layout.cmd_shrink_main()
    
    def grow_window(qtile):
        if monad_stack_size(qtile) > 1:
            qtile.current_layout.cmd_grow()
    
    def shrink_window(qtile):
        if monad_stack_size(qtile) > 1:
            qtile.current_layout.cmd_shrink()
    
    # Reset ratio : will work in 0.18.0
    # @hook.subscribe.client_killed
    # def on_client_kill(window):
    #     if monad_stack_size(qtile) == 0:
    
    # keybindings
    keys.extend([
        # keybindings
        Key([mod], "Return", lazy.spawn(terminal)),
        Key([mod, "control"], "h", lazy.function(shrink_master)),
        Key([mod, "control"], "j", lazy.function(shrink_window)),
        Key([mod, "control"], "k", lazy.function(grow_window)),
        Key([mod, "control"], "l", lazy.function(grow_master)),
        Key([mod], "h", lazy.layout.left()),
        Key([mod], "j", lazy.layout.down()),
        Key([mod], "k", lazy.layout.up()),
        Key([mod], "l", lazy.layout.right()),
        Key([mod, "mod1"], "r", lazy.restart()),
        Key([mod, "shift"], "h", lazy.layout.swap_left()),
        Key([mod, "shift"], "j", lazy.layout.shuffle_down()),
        Key([mod, "shift"], "k", lazy.layout.shuffle_up()),
        Key([mod, "shift"], "l", lazy.layout.swap_right()),
    ])
    
    opened by addy419 38
  • Wayland: Signal-desktop with wayland flags does not open

    Wayland: Signal-desktop with wayland flags does not open

    Issue description

    Signal-desktop started with

    signal-desktop --enable-features=UseOzonePlatform --ozone-platform=wayland
    

    does not open on the wayland backend. It does when using sway (It actually is native wayland, verified with xeyes so it's not because of a lack of Xwayland support in qtile). There seems to be an issue with setting the wid of the window (see stack trace obtained from running in a nested session). Chromium with the same flags works fine. So does vscode with those flags, so not all electron apps seem to be affected. I am trying to debug it in the meantime but I'm not very experienced with the wayland code.

    Btw I love how smooth qtile works under wayland, great work!

    Edit: Hmmm, those wid errors seem to happen on other windows too. But they only happen when I run Qtile in a nested session AFAICT, so I'm not sure what the issue is with signal-desktop not starting. In a normal session it also does not start and ~/.local/share/qtile/qtile.log shows the top 5 lines before the wid errors in the stack trace I provided.

    Qtile version

    Master @ c9cc86dcff89d1b04ccf13626929538fbd21ae4a

    • pywlroots: 0.14.6
    • wlroots: 14.1
    • python-xkbcommon: 0.4
    • pywayland: 0.4.7
    • wayland lib: 1.19.0
    • wayland-scanner: 1.19.0
    • signal-desktop: 5.17.2

    Stack traces

    2021-09-29 17:03:41,510 DEBUG libqtile core.py:_on_request_cursor():L269 Signal: seat request_set_cursor_event
    2021-09-29 17:03:41,511 DEBUG libqtile core.py:_on_new_xdg_surface():L273 Signal: xdg_shell new_surface_event
    2021-09-29 17:03:41,511 DEBUG libqtile core.py:_on_new_toplevel_decoration():L349 Signal: xdg_decoration new_top_level_decoration
    2021-09-29 17:03:41,511 DEBUG libqtile window.py:_on_set_app_id():L217 Signal: window set_app_id
    2021-09-29 17:03:41,512 DEBUG libqtile window.py:_on_set_title():L212 Signal: window set_title
    --- Logging error ---
    Traceback (most recent call last):
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/__init__.py", line 1085, in emit
        msg = self.format(record)
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/__init__.py", line 929, in format
        return fmt.format(record)
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/__init__.py", line 668, in format
        record.message = record.getMessage()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/__init__.py", line 373, in getMessage
        msg = msg % self.args
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/base.py", line 224, in __repr__
        return "Window(name=%r, wid=%i)" % (self.name, self.wid)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/wayland/window.py", line 124, in wid
        return self._wid
    AttributeError: 'Window' object has no attribute '_wid'
    Call stack:
      File "/nix/store/963rzjs9nd2w1c4yin2kxg90qbxzrj4c-python3.8-qtile-0.18.2-wayland/bin/.qtile-wrapped", line 9, in <module>
        sys.exit(main())
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/scripts/main.py", line 61, in main
        options.func(options)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/scripts/start.py", line 89, in start
        q.loop()
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/core/manager.py", line 210, in loop
        asyncio.run(self.async_loop())
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/runners.py", line 44, in run
        return loop.run_until_complete(main)
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/base_events.py", line 603, in run_until_complete
        self.run_forever()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/base_events.py", line 570, in run_forever
        self._run_once()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/base_events.py", line 1859, in _run_once
        handle._run()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/events.py", line 81, in _run
        self._context.run(self._callback, *self._args)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/wayland/core.py", line 522, in _poll
        self.event_loop.dispatch(0)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/pywayland/utils.py", line 30, in wrapper
        return func(self, *args, **kwargs)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/pywayland/server/eventloop.py", line 281, in dispatch
        lib.wl_event_loop_dispatch(self._ptr, timeout)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/pywayland/server/listener.py", line 33, in notify_func
        callback(listener, data)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/wayland/window.py", line 214, in _on_set_title
        hook.fire('client_name_updated', self)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/hook.py", line 385, in fire
        logger.debug("Internal event: %s(%s, %s)", event, args, kwargs)
    Unable to print the message and arguments - possible formatting error.
    Use the traceback above to help find the error.
    --- Logging error ---
    Traceback (most recent call last):
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/handlers.py", line 69, in emit
        if self.shouldRollover(record):
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/handlers.py", line 185, in shouldRollover
        msg = "%s\n" % self.format(record)
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/__init__.py", line 929, in format
        return fmt.format(record)
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/__init__.py", line 668, in format
        record.message = record.getMessage()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/__init__.py", line 373, in getMessage
        msg = msg % self.args
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/base.py", line 224, in __repr__
        return "Window(name=%r, wid=%i)" % (self.name, self.wid)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/wayland/window.py", line 124, in wid
        return self._wid
    AttributeError: 'Window' object has no attribute '_wid'
    Call stack:
      File "/nix/store/963rzjs9nd2w1c4yin2kxg90qbxzrj4c-python3.8-qtile-0.18.2-wayland/bin/.qtile-wrapped", line 9, in <module>
        sys.exit(main())
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/scripts/main.py", line 61, in main
        options.func(options)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/scripts/start.py", line 89, in start
        q.loop()
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/core/manager.py", line 210, in loop
        asyncio.run(self.async_loop())
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/runners.py", line 44, in run
        return loop.run_until_complete(main)
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/base_events.py", line 603, in run_until_complete
        self.run_forever()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/base_events.py", line 570, in run_forever
        self._run_once()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/base_events.py", line 1859, in _run_once
        handle._run()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/events.py", line 81, in _run
        self._context.run(self._callback, *self._args)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/wayland/core.py", line 522, in _poll
        self.event_loop.dispatch(0)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/pywayland/utils.py", line 30, in wrapper
        return func(self, *args, **kwargs)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/pywayland/server/eventloop.py", line 281, in dispatch
        lib.wl_event_loop_dispatch(self._ptr, timeout)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/pywayland/server/listener.py", line 33, in notify_func
        callback(listener, data)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/wayland/window.py", line 214, in _on_set_title
        hook.fire('client_name_updated', self)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/hook.py", line 385, in fire
        logger.debug("Internal event: %s(%s, %s)", event, args, kwargs)
    Unable to print the message and arguments - possible formatting error.
    Use the traceback above to help find the error.
    --- Logging error ---
    Traceback (most recent call last):
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/__init__.py", line 1085, in emit
        msg = self.format(record)
    2021-09-29 17:03:46,525 DEBUG libqtile window.py:_on_destroy():L195 Signal: window destroy
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/__init__.py", line 929, in format
        return fmt.format(record)
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/__init__.py", line 668, in format
        record.message = record.getMessage()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/__init__.py", line 373, in getMessage
        msg = msg % self.args
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/base.py", line 224, in __repr__
        return "Window(name=%r, wid=%i)" % (self.name, self.wid)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/wayland/window.py", line 124, in wid
        return self._wid
    AttributeError: 'Window' object has no attribute '_wid'
    Call stack:
      File "/nix/store/963rzjs9nd2w1c4yin2kxg90qbxzrj4c-python3.8-qtile-0.18.2-wayland/bin/.qtile-wrapped", line 9, in <module>
        sys.exit(main())
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/scripts/main.py", line 61, in main
        options.func(options)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/scripts/start.py", line 89, in start
        q.loop()
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/core/manager.py", line 210, in loop
        asyncio.run(self.async_loop())
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/runners.py", line 44, in run
        return loop.run_until_complete(main)
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/base_events.py", line 603, in run_until_complete
        self.run_forever()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/base_events.py", line 570, in run_forever
        self._run_once()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/base_events.py", line 1859, in _run_once
        handle._run()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/events.py", line 81, in _run
        self._context.run(self._callback, *self._args)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/wayland/core.py", line 522, in _poll
        self.event_loop.dispatch(0)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/pywayland/utils.py", line 30, in wrapper
        return func(self, *args, **kwargs)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/pywayland/server/eventloop.py", line 281, in dispatch
        lib.wl_event_loop_dispatch(self._ptr, timeout)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/pywayland/server/listener.py", line 33, in notify_func
        callback(listener, data)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/wayland/window.py", line 214, in _on_set_title
        hook.fire('client_name_updated', self)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/hook.py", line 385, in fire
        logger.debug("Internal event: %s(%s, %s)", event, args, kwargs)
    Unable to print the message and arguments - possible formatting error.
    Use the traceback above to help find the error.
    --- Logging error ---
    Traceback (most recent call last):
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/handlers.py", line 69, in emit
        if self.shouldRollover(record):
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/handlers.py", line 185, in shouldRollover
        msg = "%s\n" % self.format(record)
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/__init__.py", line 929, in format
        return fmt.format(record)
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/__init__.py", line 668, in format
        record.message = record.getMessage()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/logging/__init__.py", line 373, in getMessage
        msg = msg % self.args
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/base.py", line 224, in __repr__
        return "Window(name=%r, wid=%i)" % (self.name, self.wid)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/wayland/window.py", line 124, in wid
        return self._wid
    AttributeError: 'Window' object has no attribute '_wid'
    Call stack:
      File "/nix/store/963rzjs9nd2w1c4yin2kxg90qbxzrj4c-python3.8-qtile-0.18.2-wayland/bin/.qtile-wrapped", line 9, in <module>
        sys.exit(main())
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/scripts/main.py", line 61, in main
        options.func(options)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/scripts/start.py", line 89, in start
        q.loop()
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/core/manager.py", line 210, in loop
        asyncio.run(self.async_loop())
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/runners.py", line 44, in run
        return loop.run_until_complete(main)
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/base_events.py", line 603, in run_until_complete
        self.run_forever()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/base_events.py", line 570, in run_forever
        self._run_once()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/base_events.py", line 1859, in _run_once
        handle._run()
      File "/nix/store/32q6ryrb860sksdi1al5djg3pgcpq92l-python3-3.8.11/lib/python3.8/asyncio/events.py", line 81, in _run
        self._context.run(self._callback, *self._args)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/wayland/core.py", line 522, in _poll
        self.event_loop.dispatch(0)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/pywayland/utils.py", line 30, in wrapper
        return func(self, *args, **kwargs)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/pywayland/server/eventloop.py", line 281, in dispatch
        lib.wl_event_loop_dispatch(self._ptr, timeout)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/pywayland/server/listener.py", line 33, in notify_func
        callback(listener, data)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/wayland/window.py", line 214, in _on_set_title
        hook.fire('client_name_updated', self)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/hook.py", line 385, in fire
        logger.debug("Internal event: %s(%s, %s)", event, args, kwargs)
    Unable to print the message and arguments - possible formatting error.
    Use the traceback above to help find the error.
    From cffi callback <function notify_func at 0x7f19d735de50>:
    Traceback (most recent call last):
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/pywayland/server/listener.py", line 33, in notify_func
        callback(listener, data)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/wayland/window.py", line 199, in _on_destroy
        self.qtile.unmanage(self.wid)
      File "/nix/store/kl5jnamqhrrn4lxr5i8yq9lwmyrgdzxw-qtile-0.18.2-wayland/lib/python3.8/site-packages/libqtile/backend/wayland/window.py", line 124, in wid
        return self._wid
    AttributeError: 'Window' object has no attribute '_wid'
    

    Configuration

    Happens with the default

    opened by jwijenbergh 37
  • Cursor disappear when open application

    Cursor disappear when open application

    The issue:

    debian 11 wayland qtile --version = dev

    The mod4 key dosent work... so I ad a mouse callback in one line of the config.py:

    widget.TextBox("Press <M-r> to spawn", foreground="#d75f5f", mouse_callbacks={"Button1": lazy.spawncmd()}),

    I it works, but the cursor disappear.

    Required:

    • [X] I have searched past issues to see if this bug has already been reported.
    unconfirmed 
    opened by wagnerc4 0
  • Get Mpd2 widget fixed width

    Get Mpd2 widget fixed width

    The issue:

    • qtile version: 0.22.1

    Mpd2 widget has only the width attribute to control the maximize widget width, it won't always get the same width when the different lengths of song/artist names are.

    Required:

    • [X] I have searched past issues to see if this bug has already been reported.
    unconfirmed 
    opened by K1ngst0m 5
  • Relax regex on qtile shell command arg parsing

    Relax regex on qtile shell command arg parsing

    Qtile shell currently uses a regular expression to split the command name from the arguments. However, the arguments only match a limited subset of characters; characters like ., [] etc are not matched resulting in an InvalidCommand. This limits the usefulness of the eval command in particular.

    This PR fixes this by allowing any characters to be passed as args.

    opened by elParaguayo 2
  • Terminal doesn't scroll up automatically

    Terminal doesn't scroll up automatically

    The issue:

    > qtile --version
    > 0.22.1
    
    > cat ~/.local/share/qtile/qtile.log
    > 2022-12-28 23:44:55,609 WARNING libqtile bar.py:_configure_widget():L315 Widget removed: Systray does not support <libqtile.backend.wayland.core.Core object at 0x7f358b702140>.
    > 2022-12-28 23:44:55,721 WARNING libqtile bar.py:_configure_widget():L315 Widget removed: Systray does not support <libqtile.backend.wayland.core.Core object at 0x7f358b702140>.
    

    Tried to copy some text on foot terminal. The text was long enough so I need the terminal to scroll up when my cursor was near enough to the top of the terminal (or above it) while highlighting the text. It doesn't happen.

    I'm on wayland.

    Required:

    • [X] I have searched past issues to see if this bug has already been reported.
    unconfirmed Wayland 
    opened by MelihDarcanxyz 6
  • Can't change tabs on waterfox

    Can't change tabs on waterfox

    The issue:

    > qtile --version
    > 0.22.1
    
    > cat ~/.local/share/qtile/qtile.log
    > 2022-12-28 23:44:55,609 WARNING libqtile bar.py:_configure_widget():L315 Widget removed: Systray does not support <libqtile.backend.wayland.core.Core object at 0x7f358b702140>.
    > 2022-12-28 23:44:55,721 WARNING libqtile bar.py:_configure_widget():L315 Widget removed: Systray does not support <libqtile.backend.wayland.core.Core object at 0x7f358b702140>.
    

    I wanted to move a tab to the end on Waterfox and the tab just doesn't move. Tried the same thing with firefox, sometimes it works, sometimes I see heavy slow down and lots of black boxes. I'm on wayland.

    Required:

    • [X] I have searched past issues to see if this bug has already been reported.
    unconfirmed Wayland 
    opened by MelihDarcanxyz 2
  • Fix Volume widget volume-getting command execution

    Fix Volume widget volume-getting command execution

    Pull request #3332 changed self.call_process to subprocess.getoutput in the Volume widget. This PR reverts that change.

    PR #3332 shouldn't have changed that because the create_amixer_command function, which is used to generate command for amixer in the widget, outputs a command in the form of a list of command arguments. self.call_process accepts commands in the argument list form while subproces.getoutput instead treats the list given as [command, *args] where command is the actual command executed and args are treated as shell parameters, according to this discussion.

    Meanwhile, as I pointed out here, PR #3332 didn't really break the Volume widget because the first (\d?\d?\d?)% in the output of amixer happened to be the master volume. So this PR does not introduce any user-visible change either.

    opened by inmaldrerah 12
Releases(v0.22.1)
  • v0.22.1(Sep 22, 2022)

    This is identical to v0.22.0 but the tag is signed for those who need it. My bad - I should have signed v0.22.0 originally. Please see that release for release details.

    Source code(tar.gz)
    Source code(zip)
  • v0.22.0(Sep 22, 2022)

    Changelog:

    • !!! Config breakage !!!
      • lazy.qtile.display_kb() no longer receives any arguments. If you passed it any arguments (which were ignored previously), remove them.
      • If you have a custom startup Python script that you use instead of qtile start and run init_log manually, the signature has changed. Please check the source for the updated arguments.
      • KeyChord's signature has changed. mode is now a boolean to indicate whether the mode should persist. The name parameter should be used to name the chord (e.g. for the Chord widget).
    • features
      • Add ability to draw borders and add margins to the Max layout.
      • The default XWayland cursor is now set at startup to left_ptr, so an xsetroot call is not needed to avoid the ugly X cursor.
      • Wayland: primary clipboard should now behave same way as with X after selecting something it should be copied into clipboard
      • Add resume hook when computer resumes from sleep/suspend/hibernate.
      • Add text_only option for LaunchBar widget.
      • Add force_update command to ThreadPoolText widgets to simplify updating from key bindings
      • Add scrolling ability to _TextBox-based widgets.
      • Add player controls (via mouse callbacks) to Mpris2 widget.
      • Wayland: input inhibitor protocol support added (pywayland>=0.4.14 & pywlroots>=0.15.19)
      • Add commands to control Pomodoro widget.
      • Add icon theme support to TaskList widget (available on X11 and Wayland backends).
      • Wayland: Use qtile cmd-obj -o core -f get_inputs to get input device identifiers for configuring inputs. Also input configs will be updated by config reloads (pywlroots>=0.15.21)
    • bugfixes
      • Widgets that are incompatible with a backend (e.g. Systray on Wayland) will no longer show as a ConfigError in the bar. Instead the widget is silently removed from the bar and a message included in the logs.
      • Reduce error messages in StatusNotifier widget from certain apps.
      • Reset colours in Chord widget
      • Prevent crash in LaunchBar when using SVG icons
      • Improve scrolling in Mpris2 widget (options to repeat scrolling etc.)

    Thank you to all contributors to this release:

    • 3nprob
    • 5ila5
    • Antonín Říha
    • Boris Daniel
    • Chris Wesseling
    • DCsunset
    • éclairevoyant
    • elParaguayo
    • El Zubeir Huweidi
    • IamPrecious
    • jlcoulter
    • jx11r
    • KonradGrande
    • mcol
    • MNandor
    • n00bkoder
    • oddlama
    • ramnes
    • Shinyzenith
    • SpringerJack
    • SweepingBishops
    • Tycho Andersen

    :cookie:

    Source code(tar.gz)
    Source code(zip)
  • v0.21.0(Mar 23, 2022)

    Qtile 0.21.0, released 2022-03-23:

    • features
      • Add lazy.window.center() command to center a floating window on the screen.
      • Wayland: added power-output-management-v1 protocol support, added idle protocol, added idle inhibit protocol
      • Add MonadThreeCol layout based on XMonad's ThreeColumns.
      • Add lazy.screen.set_wallpaper command.
      • Added ability to scale the battery icon's size
      • Add Spiral layout
      • Add toggle argument to Window.togroup with the same functionality as in Group.toscreen.
      • Added margin_on_single and border_on_single to Bsp layout
    • bugfixes
      • Fix Systray crash on reconfigure_screens.
      • Fix bug where widgets can't be mirrored in same bar.
      • Fix various issues with setting fullscreen windows floating and vice versa.
      • Fix a bug where a .when() check for lazy functions errors out when matching on focused windows when none is focused. By default we do not match on focused windows, to change this set if_no_focused to True.
      • Widget with duplicate names will be automatically renamed by appending numeric suffixes
      • Fix resizing of wallpaper when screen scale changes (X11)
      • Two small bugfixes for StatusNotifier - better handling of Ayatana indicators
      • Fix bug where StatusNotifierItem crashes due to invalid object paths (e.g. Zoom)

    Thanks to all contributors who made this release possible:

    • anriha
    • elParaguayo
    • Jaakko Sirén
    • Joao Duarte
    • Joao Faria Miranda Duarte
    • jwijenbergh
    • K1llf0rce
    • Lars
    • matpi
    • mcol
    • Michael Benford
    • MithicSpirit
    • modestcap
    • nivgsk
    • Piotr Machura
    • Yutao Yuan
    Source code(tar.gz)
    Source code(zip)
  • v0.20.0(Jan 24, 2022)

    This is just a small release this time, to update in step with the new wlroots release, used by the Wayland backend. The changes in this release are:

    • New features:
      • Add place_right option in the TreeTab layout to place the tab panel on the right side
      • X11: Add support for _NET_DESKTOP_VIEWPORT. E.g. can be used by rofi to map on current output.
      • Wayland: Bump wlroots version. 0.15.x wlroots and 0.15.2+ pywlroots are required.
      • Add XWayland support to the Wayland backend. XWayland will start up as needed, if it is installed.
    • Bug fixes:
      • Remove non-commandable windows from IPC. Fixes bug where IPC would fail when trying to get info on all windows but Systray has icons (which are non-commandable _Windows.)
      • Fix bug where bars were not reconfigured correctly when screen layout changes.
      • Fix a Wayland bug where layer-shell surface like dunst would freeze up and stop updating.
      • Change timing of screens_reconfigured hook. Will now be called ONLY if cmd_reconfigure_screens has been called and completed.
      • Fix order of icons in Systray widget when restarting/reloading config.
      • Fix rounding error in PulseVolume widget's reported volume.

    Authored by:

    • elParaguayo
    • jwijenbergh
    • Nazar Mokrynskyi
    • Sean Vig
    • Tim Kilian
    • mcol
    Source code(tar.gz)
    Source code(zip)
  • v0.19.0(Dec 22, 2021)

    This release comes with a number of bug fixes, as well as a bunch of new features:

    • Add ability to draw borders to the Bar. Can customise size and colour per edge.
    • Add StatusNotifier widget implementing the StatusNotifierItem specification. NB Widget does not provide context menus.
    • Add total bandwidth format value to the Net widget.
    • Scratchpad groups could be defined as single so that only one of the scratchpad in the group is visible at a given time.
    • All scratchpads in a Scratchpad group can be hidden with hide_all() function.
    • For saving states of scratchpads during restart, we use wids instead of pids.
    • Scratchpads can now be defined with an optional matcher to match with window properties.
    • Qtile.cmd_reload_config is added for reloading the config without completely restarting.
    • Window.cmd_togroup's argument groupName should be changed to group_name. For the time being a log warning is in place and a migration is added. In the future groupName will fail.
    • Add min/max_ratio to Tile layout and fix bug where windows can extend offscreen.
    • Add ability for widget mouse_callbacks to take lazy calls (similar to keybindings)
    • Add aliases to lazy.spawncmd() which takes a dictionary mapping convenient aliases to full command lines.
    • Add a new 'prefix' option to the net widget to display speeds with a static unit (e.g. MB).
    • lazy.group.toscreen() now does not toggle groups by default. To get this behaviour back, use lazy.group.toscreen(toggle=True)
    • Tile layout has new margin_on_single and border_on_single option to specify whether to draw margin and border when there is only one window.
    • Thermal zone widget.
    • Allow TextBox-based widgets to display in vertical bars.
    • Added a focused attribute to lazy.function.when which can be used to Match on focused windows.
    • Allow to update Image widget with update() function by giving a new path.

    Thank you to all contributors for this release:

    • 1kyu
    • Ahmed Al Balochi
    • Arnas Udovič
    • aurok
    • bernard
    • Daniel Bistriceanu
    • elParaguayo
    • ep12
    • frankebel
    • GeoCHiP
    • Graeme Holliday
    • İ. Göktuğ Kayaalp
    • Ilyas B Arinov
    • jwijenbergh
    • kapilpokhrel
    • Kapil Pokhrel
    • krive001
    • LamprosPitsillos
    • Luís Ferreira
    • ManuelHaake
    • Marcel Rupp
    • matteo
    • mcol
    • Phil
    • ramnes
    • schragge
    • Schroedingersdoraemon
    • Sean Vig
    • Senthil Babu Jegannathan
    • Stefan Richter
    • Tokariew
    • Tycho Andersen
    • yobleck
    Source code(tar.gz)
    Source code(zip)
  • v0.18.1(Sep 16, 2021)

  • v0.18.0(Jul 4, 2021)

  • v0.17.0(Feb 13, 2021)

  • v0.16.1(Aug 18, 2020)

  • v0.15.1(Apr 14, 2020)

  • v0.14.2(Jun 20, 2019)

  • v0.14.1(Jun 20, 2019)

  • v0.14.0(Jun 19, 2019)

    This release introduces a lot of changes under the hood for qtile as we look towards future moves to wayland and beyond. Be aware that there are many breaking changes, particularly on member function and member variable names as we have moved to snake case everything. Other big news in this release is dropping Python 2 support and starting to adopt new language and standard library features that are Python 3 only.

    Changelog

    !!! Python version breakage !!!

    • Python 2 is no longer supported
    • Python 3.4 and older is no longer supported

    !!! Config breakage !!!

    • Many internal things were renamed from camel case to snake case. If your config uses main(), or any lazy.function() invocations that interact directly with the qtile object, you may need to forward port them. Also note that we do not consider the qtile object to be a stable api, so you will need to continue forward porting these things for future refactorings (for wayland, etc.). A better approach may be to add an upstream API for what you want to do ;)
    • Maildir's subFolder and maildirPath changed to maildir_path and sub_folder.

    features

    • add custom change_command to backlight widget
    • add CommandSet extension to list available commands
    • simplify battery monitoring widget interface and add freebsd compatible battery widget implementation
    • track last known mouse coordinates on the qtile manager
    • allow configuration of warping behavior in columns layout

    bugfixes

    • with cursor warp enabled, the cursor is warped on screen change
    • fix stepping groups to skip the scratch pad group
    • fix stack layout to properly shuffle
    • silence errors when unmapping windows
    Source code(tar.gz)
    Source code(zip)
  • v0.13.0(Jun 19, 2019)

Integration between the awesome window manager and the firefox web browser.

Integration between the awesome window manager and the firefox web browser.

contribuewwt 3 Feb 2, 2022
Easytile blender - Simple Blender 2.83 addon for tiling meshes easily

easytile_blender Dead simple, barebones Blender (2.83) addon for placing meshes as tiles. Installation In Blender, go to Edit > Preferences > Add-ons

Sam Gibson 6 Jul 19, 2022
The most hackable keyboard in all the land

MiRage Modular Keyboard © 2021 Zack Freedman of Voidstar Lab Licensed Creative Commons 4.0 Attribution Noncommercial Share-Alike The MiRage is a 60% o

Zack Freedman 558 Dec 30, 2022
ArinjoyTheDev 1 Jul 17, 2022
A simple and easy to use Python's PIP configuration manager, similar to the Arch Linux's Java manager.

PIPCONF - The PIP configuration manager If you need to manage multiple configurations containing indexes and trusted hosts for PIP, this project was m

João Paulo Carvalho 11 Nov 30, 2022
Expense-manager - Expense manager with python

Expense_manager TO-DO Source extractor: Credit Card, Wallet Destination extracto

null 1 Feb 13, 2022
Installer, package manager, build wrapper and version manager for Piccolo

Piccl Installer, package manager, build wrapper and version manager for Piccolo

null 1 Dec 19, 2021
Windows Task Manager with special features, written in Python.

Killer That damn Chrome ⬇ Download here · ?? Join our discord Tired of trying to kill processes with the default Windows Task Manager? Selecting one b

Nathan Araújo 49 Jan 3, 2023
PIP Manager written in python Tkinter

PIP Manager About PIP Manager is designed to make Python Package handling easier by just a click of a button!! Available Features Installing packages

Will Payne 9 Dec 9, 2022
Password manager using MySQL and Python 3.10.2

Password Manager Password manager using MySQL and Python 3.10.2 Installation Install my-project with github git clone https://github.com/AyaanSiddiq

null 1 Feb 18, 2022
PDX Code Guild Full Stack Python Bootcamp starting 2022/02/28

Class Liger Rough Timeline Weeks 1, 2, 3, 4: Python Weeks 5, 6, 7, 8: HTML/CSS/Flask Weeks 9, 10, 11: Javascript Weeks 12, 13, 14, 15: Django Weeks 16

PDX Code Guild 5 Jul 5, 2022
Cloud Native sample microservices showcasing Full Stack Observability using AppDynamics and ThousandEyes

Cloud Native Sample Bookinfo App Observability Bookinfo is a sample application composed of four Microservices written in different languages.

Cisco DevNet 13 Jul 21, 2022
pydock - Docker-based environment manager for Python

pydock - Docker-based environment manager for Python ⚠️ pydock is still in beta mode, and very unstable. It is not recommended for anything serious. p

Alejandro Piad 16 Sep 18, 2021
Demo of patching a python context manager

patch-demo-20211203 demo of patching a python context manager poetry install poetry run python -m my_great_app to run the code poetry run pytest to te

Brad Smith 1 Feb 9, 2022
An extensive password manager built using Python, multiple implementations. Something to meet everyone's taste.

An awesome open-sourced password manager! Explore the docs » View Demo · Report Bug · Request Feature ?? Python Password Manager ?? An extensive passw

Sam R 7 Sep 28, 2021
A deployer and package manager for OceanBase open-source software.

OceanBase Deploy OceanBase Deploy (简称 OBD)是 OceanBase 开源软件的安装部署工具。OBD 同时也是包管理器,可以用来管理 OceanBase 所有的开源软件。本文介绍如何安装 OBD、使用 OBD 和 OBD 的命令。 安装 OBD 您可以使用以下方

OceanBase 59 Dec 27, 2022
Cross-platform config and manager for click console utilities.

climan Help the project financially: Donate: https://smartlegion.github.io/donate/ Yandex Money: https://yoomoney.ru/to/4100115206129186 PayPal: https

null 3 Aug 31, 2021
A collection of full-stack resources for programmers.

A collection of full-stack resources for programmers.

Charles-Axel Dein 22.3k Dec 30, 2022
Waydroid is a container-based approach to boot a full Android system on a regular GNU/Linux system like Ubuntu.

Waydroid is a container-based approach to boot a full Android system on a regular GNU/Linux system like Ubuntu.

WayDroid 4.7k Jan 8, 2023