【发布时间】:2012-07-26 16:20:28
【问题描述】:
我刚刚安装了 awesome 作为我的 wm。当我使用 awesome 进行 alt+tab 时,它只是切换了两个应用程序,无法激活其他应用程序..有什么想法吗?
【问题讨论】:
-
按住 alt 键多次按下。
-
@Daniel 谢谢,但它只能在两个应用程序之间切换
标签: window focus awesome-wm
我刚刚安装了 awesome 作为我的 wm。当我使用 awesome 进行 alt+tab 时,它只是切换了两个应用程序,无法激活其他应用程序..有什么想法吗?
【问题讨论】:
标签: window focus awesome-wm
在默认绑定中,Mod + Tab 在最后两次使用之间循环 应用程序。我在寻找 Mod + j 或 Mod + k(倒序)。
【讨论】:
默认情况下,客户端将焦点设置为上一个具有焦点的窗口。当您 alt+tab 并更改窗口时,前一个窗口现在是原始窗口。因此,它在两个窗口之间循环。
要解决此问题,您需要更改以下内容:
在默认的 rc.lua 中,控制窗口循环的部分如下所示:
awful.key({ modkey, }, "Tab",
function ()
awful.client.focus.history.previous()
if client.focus then
client.focus:raise()
end
end),
要循环浏览所有个窗口,而不仅仅是前一个,请将上面的代码更改为以下内容:
awful.key({ modkey, }, "Tab",
function ()
-- awful.client.focus.history.previous()
awful.client.focus.byidx(-1)
if client.focus then
client.focus:raise()
end
end),
awful.key({ modkey, "Shift" }, "Tab",
function ()
-- awful.client.focus.history.previous()
awful.client.focus.byidx(1)
if client.focus then
client.focus:raise()
end
end),
当你按下Alt+Tab 时,它会在窗口中循环,当你按下Alt+Shift+Tab 时,它会以相反的顺序循环。 (--开头的两行是cmets,所以不影响结果。)
要循环浏览标签上的每个客户端,即使是最小化的客户端,您可能会发现此功能很有帮助:
awful.key({ modkey, }, "Tab",
function ()
for c in awful.client.iterate(function (x) return true end) do
client.focus = c
client.focus:raise()
end
end),
请注意,这些解决方案都不会考虑历史记录,而是会切换到最近最少获得焦点的窗口(即,不考虑窗口获得焦点的顺序)。
【讨论】:
modkey+j和modkey+k的默认解决方案相同。
我对 Chris 在他的解决方案中提供的设置做了类似的事情。然而,它并没有在所有窗口中转移焦点,而是在主从堆栈中循环它们。换句话说,它们都在屏幕上明显地旋转:
awful.key({ modkey, "Shift" }, "Tab",
function ()
awful.client.cycle(false)
awful.client.focus.byidx(0,awful.client.getmaster()) -- Added 2013-03-01
end),
awful.key({ modkey, }, "Tab",
function ()
awful.client.cycle(true)
awful.client.focus.byidx(0,awful.client.getmaster()) -- Added 2013-03-01
end),
我仍然需要稍微调整一下,因为我希望(至少看起来)在整个循环操作期间保持在主窗口上。当我发现 aweful.client.cycle 让它变得如此简单时,我仍在熟悉 Awesome Lua API。 :)
我想我会加入我目前的解决方案,因为这是我调查的第一个解决我类似问题的资源之一。希望对您有所帮助。
【讨论】:
我为此创建了一个模块:https://github.com/blueyed/awesome-cyclefocus
它支持Alt-Tab 的不同方法(参见自述文件),并且可以通过在窗口循环时应用的过滤器轻松配置为您喜欢的方式,例如仅过滤具有相同 WM 类或在相同屏幕/标签上的窗口。
【讨论】:
有一个很棒的库,叫做 awesome-switcher-preview。这实现了类似于您在其他操作系统和窗口管理器上所期望的 alt-tab 行为。它按照最近关注的顺序在窗口中循环。它会循环浏览您为屏幕选择的标签集中的所有客户端。它包括最小化的客户端。它试图在做出选择之前不弄乱历史记录。它不会改变堆栈。按住 alt 可保持预览/alt-tab 切换器打开。
你可以在这里得到它: https://github.com/berlam/awesome-switcher-preview
【讨论】:
另一种选择是使用独立的第 3 方应用程序:https://github.com/sagb/alttab
【讨论】:
我必须说我花了一些时间来设置正确的配置以获得我正在寻找的行为:在所有标签上循环浏览所有窗口,包括(尤其是!)最小化的窗口,而不提升或聚焦它们和带有预览或通知。
cycle_filters 覆盖
awesome-cyclefocus/init.lua:
cycle_filters = {
--function(c, source_c) return not c.minimized end, --luacheck: no unused args
},
rc.lua
cyclefocus.key({ "Mod1", }, "Tab", {
show_clients = false,
focus_clients = false,
}),
【讨论】: