scroll介绍 #
由于 Hyprland 最近一次破坏性更新(Break Update)带来的不便,在习惯了 hyprscroller 的操作逻辑后,咱选择了由同一作者维护的新项目:scroll。scroll 提供了更加灵活的“卷轴”体验,支持上下左右全方位的平铺与滚动。体验很舒服,但是grid模式没有了,没法愉快的九宫格刷b站了,幸好作者提供了丰富的Lua接口,实在不行咱们可以自己实现一个。询问作者后得到了个
初步的例子,核心逻辑:将新窗口的插入位置固定在工作区的最后,检查它的前一列容器中的子窗口数量。如果数量小于 3,则执行一次 move left nomode,将新窗口塞进前一列。
一些小优化 #
-
不支持“插空”补位
- 手动关闭中间的窗口后,新窗口依然只会在最右侧创建,无法填充留下的空洞。
-
- 方案:新窗口创建时,遍历所有列,优先寻找子窗口数未达上限(column_limit)的容器并执行
move left nomode填补。 -
... if #tiling > 1 then local target_tiling = nil for i = 1,#tiling - 1 do local prev_container = tiling[i] local children = scroll.container_get_children(prev_container) if children and #children < ws_config[1] then target_tiling = i break end end if target_tiling then local steps = (#tiling - target_tiling - 1) * 2 + 1 for i = 1, steps do scroll.command(container, "move left nomode") end end end ...
-
缺乏工作区独立性
- 全局开关导致所有工作区被迫同步开启 Grid。
- 解决方案:将状态存储由布尔值改为以 ws_name 为键的哈希表
-
加入 on_destroy 回调。当某个grid工作区只剩下最后一个窗口并被关闭时,代码会自动清理该工作区的配置并切换回默认模式。
-
同时为了减少观看视频时的花销加入了调整窗口大小的逻辑。
完整的脚本存储在 配置仓库,以下是建议的配置。
#2345为不调整窗口大小的n宫格模式,wert为调整大小的n宫格模式
mode "grid" {
bindsym 0 exec scrollmsg lua ~/.config/scroll/scripts/grid.lua disable; mode default
bindsym 1 exec scrollmsg lua ~/.config/scroll/scripts/grid.lua toggle; mode default
bindsym 2 exec scrollmsg lua ~/.config/scroll/scripts/grid.lua enable 2; mode default
bindsym 3 exec scrollmsg lua ~/.config/scroll/scripts/grid.lua enable 3; mode default
bindsym 4 exec scrollmsg lua ~/.config/scroll/scripts/grid.lua enable 4; mode default
bindsym 5 exec scrollmsg lua ~/.config/scroll/scripts/grid.lua enable 5; mode default
bindsym q exec scrollmsg lua ~/.config/scroll/scripts/grid.lua toggle; mode default
bindsym w exec scrollmsg lua ~/.config/scroll/scripts/grid.lua enable 2 1; mode default
bindsym e exec scrollmsg lua ~/.config/scroll/scripts/grid.lua enable 3 1; mode default
bindsym r exec scrollmsg lua ~/.config/scroll/scripts/grid.lua enable 4 1; mode default
bindsym t exec scrollmsg lua ~/.config/scroll/scripts/grid.lua enable 5 1; mode default
bindsym Escape mode "default"
}
bindsym $mod+Shift+y mode "grid"
又可以愉快的九宫格刷b站了。