真棒:alt + tab只在两个应用之间切换

时间:2012-07-28 00:06:08

标签: window focus awesome-wm

我刚刚安装了我的wm。当我使用awtome做alt + tab时,它只是切换两个应用程序,它不可能让其他人活跃起来......有什么想法吗?

7 个答案:

答案 0 :(得分:20)

默认情况下,客户端将焦点设置为具有焦点的上一个窗口。当您使用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时按相反的顺序。 (以--开头的两行是注释,因此它们不会影响结果。)

要遍历标记上的每个客户端,即使是最小化的客户端,您可能会发现此功能很有用:

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),

请注意,这些解决方案都不考虑历史记录,而是切换到最近焦点的窗口(即,不考虑窗口具有焦点的顺序)。

答案 1 :(得分:6)

我为此创建了一个模块:https://github.com/blueyed/awesome-cyclefocus

它支持Alt-Tab的不同方法(参见自述文件),并且可以通过在窗口中循环时应用的过滤器轻松配置,例如,仅过滤具有相同WM类或同一屏幕/标记的窗口。

答案 2 :(得分:5)

我做了类似于我的设置,克里斯在他的解决方案中提供了类似的东西。然而,它不是通过所有窗口进行聚焦,而是实际上通过主堆栈和从堆栈循环它们。换句话说,它们都在屏幕上明显旋转:

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,这让它变得如此简单。 :)

我认为我只会使用当前的解决方案,因为这是我调查过的第一批解决我类似问题的资源。希望它有所帮助。

答案 3 :(得分:2)

在默认情况下,使用最后两个之间的Mod + Tab循环 应用。我正在寻找Mod + j或Mod + k(逆序)。

答案 4 :(得分:0)

有很棒的名为awesome-switcher-preview的库。这实现了类似于其他操作系统和窗口管理器所期望的alt-tab行为。当它们最近聚焦时,它按顺序循环浏览窗口。它会循环显示所选标记集中的所有客户端。它包括最小化的客户。在做出选择之前,我试图不搞乱历史。我没有太多改变堆栈。按住alt键可以保持预览/ alt-tab切换器。

你可以在这里得到它: https://github.com/berlam/awesome-switcher-preview

答案 5 :(得分:0)

另一个选择是使用独立的第三方应用程序:https://github.com/sagb/alttab

答案 6 :(得分:0)

我必须说我花了一些时间来设置正确的配置以获得我正在寻找的行为:在所有标签上循环浏览所有窗口,包括(尤其是!)最小化的窗口,而不提高或聚焦它们,带有预览或通知。

  • 编辑很棒的配置(上面给出):只会在未最小化的窗口中循环。
  • awesome_alttab 已弃用
  • awesome-switcher 很棒的 3.5
  • cycle-focus :终于!我只有在注释掉 line 102 后才开始工作,但 不是 通过在 rc.lua 中覆盖一个空的 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,
 }),