我正在使用 Awesomewm 并有两个显示器,并且Mod4+j
仅Mod4+k
在当前屏幕上的窗口之间循环。有没有办法循环浏览所有屏幕上的所有窗口/客户端,使其像平常一样工作Alt+Tab
?
答案1
摸索一番后糟糕的模块文档我找到了一个解决方案。它很hacky,但它按照我想要的方式工作。
awful.key({ modkey, }, "Tab",
function ()
awful.client.focus.byidx(1)
if awful.client.ismarked() then
awful.screen.focus_relative(-1)
awful.client.getmarked()
end
if client.focus then
client.focus:raise()
end
awful.client.togglemarked()
end),
此函数在当前屏幕上的客户端之间循环,对它们进行标记,当它们全部被标记时,跳转到下一个屏幕。以下是逐步发生的情况:
- 我们关注下一个客户
- 我们检查它是否被标记,如果是,我们移至下一个屏幕和清除所有客户端的标记状态
- 我们提高现有客户
- 并标记它
这很有趣,因为我不知道“标记”是什么意思。被标记的客户在视觉上或行为上似乎与未标记的客户没有什么不同。
奇怪的是,我必须编写一个 10 行函数才能获得像多屏幕 alt-tab 这样简单的东西。我可能做了一些过分的事情)
答案2
当然如此!
中的键绑定awesome
由 rc 文件控制,该文件实际上是一个lua
脚本。键绑定就是这样,它们将键绑定到 lua 函数。您可以自由地使用这些功能任何你希望他们这么做。
在您的情况下,您希望将这些键绑定到一个功能,该功能可以更改每个屏幕上的活动标签,而不仅仅是当前的焦点屏幕。
现在您的配置中可能有几行与此类似的行:
awful.key({ modkey }, "j", awful.tag.viewprev )
...它的作用与它看起来的样子差不多。
您要做的是将这些从简单的命令调用更改为令人敬畏的 API,使其成为按顺序运行几个命令的小函数。awful.tag.viewprev()
和函数aweful.tag.viewnext()
可以方便地采用可选参数来指示要在哪个屏幕上进行操作。默认情况下,它们适用于当前的,但您可以覆盖这一点。
例如,要在屏幕 1 和 2 上运行相同的操作,上面的行可能会更改为:
awful.key({ modkey }, "j", function () awful.tag.viewprev(1); awful.tag.viewprev(2) end)
请记住,您的环境可能会略有不同。请务必注意各种结构(如括号、大括号等)的打开和关闭位置,并以逗号结束属于列表一部分的行。根据需要进行调整以匹配您的配置文件。