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)

A minimal configuration for a dockerized kafka project.

Docker Kafka Quickstart A minimal configuration for a dockerized kafka project. Usage: Run this command to build kafka and zookeeper containers, and c

Nouamane Tazi 5 Jan 12, 2022
Open source style Deep Dream project

DeepDream ⚠️ If you don't have a gpu with cuda, the style transfer execution time will be much longer Prerequisites Python =3.8.10 How to Install sud

Patrick martins de lima 7 May 17, 2022
propuestas electorales de los candidatos a constituyentes, Chile 2021

textos-constituyentes propuestas electorales de los candidatos a constituyentes, Chile 2021 Programas descargados desde https://elecciones2021.servel.

Sergio Lucero 6 Nov 19, 2021
Find habits that genuinely increase your productivity

BiProductive Description This repository contains the application BiProductive, which analyzes the habits of the person, tests his productivity, and d

Rizvan Iskaliev 43 Jun 11, 2022
Fast Base64 encoding/decoding in Python

Fast Base64 implementation This project is a wrapper on libbase64. It aims to provide a fast base64 implementation for base64 encoding/decoding. Insta

Matthieu Darbois 96 Dec 26, 2022
Pygments is a generic syntax highlighter written in Python

Welcome to Pygments This is the source of Pygments. It is a generic syntax highlighter written in Python that supports over 500 languages and text for

1.2k Jan 06, 2023
This an Anki add on that automatically converts Notion notes into Anki flash cards. Currently in development!

NotionFlash This is an Anki add on in development that will allow automatically convert your Notion study notes into Anki flash cards. The Anki deck c

Neeraj Patel 10 Oct 07, 2022
Course materials for a 3-day seminar "Machine Learning and NLP: Advances and Applications" at New College of Florida

Machine Learning and NLP: Advances and Applications This repository hosts the course materials used for a 3-day seminar "Machine Learning and NLP: Adv

Yoshi Suhara 11 Jun 22, 2022
Make dbt docs and Apache Superset talk to one another

dbt-superset-lineage Make dbt docs and Apache Superset talk to one another Why do I need something like this? Odds are rather high that you use dbt to

Slido 81 Jan 06, 2023
Shared utility scripts for AI for Earth projects and team members

Overview Shared utilities developed by the Microsoft AI for Earth team The general convention in this repo is that users who want to consume these uti

Microsoft 38 Dec 30, 2022
📽 Streamlit application powered by a PyScaffold project setup

streamlit-demo Streamlit application powered by a PyScaffold project setup. Work in progress: The idea of this repo is to demonstrate how to package a

PyScaffold 2 Oct 10, 2022
Expose multicam options in the Blender VSE headers.

Multicam Expose multicam options in the Blender VSE headers. Install Download space_sequencer.py and swap it with the one that comes with the Blender

4 Feb 27, 2022
The fastest way to copy to (not from) high speed flash storage.

FastestCopy The fastest way to copy to (not from) high speed flash storage. This is about 3-6x faster than file copy on explorer.exe to usb flash driv

Derek Frombach 0 Nov 03, 2021
bamboo-engine 是一个通用的流程引擎,他可以解析,执行,调度由用户创建的流程任务,并提供了如暂停,撤销,跳过,强制失败,重试和重入等等灵活的控制能力和并行、子流程等进阶特性,并可通过水平扩展来进一步提升任务的并发处理能力。

bamboo-engine 是一个通用的流程引擎,他可以解析,执行,调度由用户创建的流程任务,并提供了如暂停,撤销,跳过,强制失败,重试和重入等等灵活的控制能力和并行、子流程等进阶特性,并可通过水平扩展来进一步提升任务的并发处理能力。 整体设计 Quick start 1. 安装依赖 2. 项目初始

腾讯蓝鲸 96 Dec 15, 2022
PREFS is a Python library to store and manage preferences and settings.

PREFS PREFS is a Python library to store and manage preferences and settings. PREFS stores a Python dictionary in a total human-readable file, the PRE

Pat 13 May 26, 2022
A simple PID tuner and simulator.

PIDtuner-V0.1 PlantPy PID tuner version 0.1 Features Supports first order and ramp process models. Supports Proportional action on PV or error or a sp

3 Jun 23, 2022
E-Paper display loop with plugins

PaperPi V3 NOTE This version of PaperPi is under heavy development and is not ready for the average user. We are working on adding more screen compati

Aaron Ciuffo 34 Dec 30, 2022
pyreports is a python library that allows you to create complex report from various sources

pyreports pyreports is a python library that allows you to create complex reports from various sources such as databases, text files, ldap, etc. and p

Matteo Guadrini aka GU 78 Dec 13, 2022
Spartan implementation of H.O.T.T.

Down The Path I was walking down the line, Trying to find some peace of mind. Then I saw you, You were takin' it slow, And walkin' it one step at a ti

Trebor Huang 25 Aug 05, 2022
IOP Support for Python (Experimental)

TAGS Experimental IOP Framework for Python WARNING: Currently, this project has NO EXCEPTION HANDLING. USE AT YOUR OWN RISK! I. Introduction to Interf

1 Oct 22, 2021