首页 > 解决方案 > 通过键盘输入动态设置 Qtile 边距

问题描述

我正在寻找设置键绑定以增加/减少 Qtile 中的间隙和边距,类似于 i3-gaps 中的以下操作:

bindsym $mod+equal gaps inner current plus 5
bindsym $mod+minus gaps inner current minus 5
bindsym $mod+Shift+equal gaps outer current plus 5
bindsym $mod+Shift+minus gaps outer current minus 5

我可以在某种程度上获得等效的外部间隙来使用以下代码:

def increase_gap(qtile):
    qtile.screens[0].top.size = screens[0].top.size+5
    qtile.screens[0].right.size = screens[0].top.size+5
    qtile.screens[0].left.size = screens[0].top.size+5
    #margs = screens[0].bottom.margin
    screens[0].bottom.margin[0] = screens[0].bottom.margin[0]+5
    screens[0].bottom.size=20
    qtile.screens[0].cmd_resize()


def decrease_gap(qtile):
    qtile.screens[0].top.size = max(screens[0].top.size-5, 0)
    qtile.screens[0].right.size = max(screens[0].top.size-5, 0)
    qtile.screens[0].left.size = max(screens[0].top.size-5, 0)
    #margs = screens[0].bottom.margin
    screens[0].bottom.margin[0] = max(screens[0].bottom.margin[0]-5, 0)
    screens[0].bottom.size=20
    qtile.screens[0].cmd_resize()

Key([mod, "shift"], "equal", lazy.function(increase_gap), desc="Increase gap"),
Key([mod, "shift"], "minus", lazy.function(decrease_gap), desc="Decrease gap"),

不过,我不确定这是做事的正确方法。我不确定这是否应该以这种方式进行操作。我不太确定 cmd_resize() 函数是我应该使用的,但是通过反复试验,我发现它是有效的。我不确定为什么 screen[0].bottom.size=20 (20 是我底栏的大小。我知道我不应该硬编码,但我试图在清理之前产生概念证明代码)是必需的,但如果我没有它,栏就会开始浮动。最后,增加和减少间隙变得接近,但不完全是原始配置。差距看起来与原来的略有不同。所以,我不确定这是实现这一目标的正确方法,我可以使用这个建议。

其次,虽然这接近于完成我想要的外部差距,但我无法在让内部差距发挥作用方面取得任何进展。我最初尝试更改布局的边距参数,当这不起作用时,我尝试简单地初始化一个新布局并替换下面发布的旧布局,但两种方法都不起作用。

def column_increase_margin(qtile):
    current_margin = current_margin + 5
    layouts[0] = layout.Columns(border_focus_stack='#d75f5f', margin=current_margin, border_width=0)
    screens[0].bottom.size=20
    qtile.screens[0].cmd_resize()

我已经尝试过这里的代码,但这是一个大项目,我正在努力从中取得正面或反面。

任何意见,将不胜感激。

标签: configwindow-managers

解决方案


如果我明白你想要什么,你可以在 libqtile/layout/base.py 的 Layout 类中添加以下内容:

    def cmd_increase_margin(self):
        self.margin += 10
        self.group.layout_all()

    def cmd_decrease_margin(self):
        new_margin = self.margin - 10
        if new_margin < 0:
            new_margin = 0

        self.margin = new_margin

        self.group.layout_all()

然后,您可以在 config.py 中添加一些键来增加和减少边距。例如

    KeyChord([mod], "m", [
            Key([], "Up", lazy.layout.increase_margin()),
            Key([], "Down", lazy.layout.decrease_margin())
        ],
        mode="Margins"
    ),

我是 qtile 的新手,所以上述方法可能有问题,但它似乎有效。


推荐阅读