config - 通过键盘输入动态设置 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()
我已经尝试过这里的代码,但这是一个大项目,我正在努力从中取得正面或反面。
任何意见,将不胜感激。
解决方案
如果我明白你想要什么,你可以在 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 的新手,所以上述方法可能有问题,但它似乎有效。