XMonad циклически перебирает все окна в видимых рабочих областях.

Я использую XMonad на двойном экране и хотел бы иметь возможность переключать фокус через каждое окно, видимое на любом экране (скажем, с помощью alt + tab). Поведение будет похоже на XMonad.Actions.WindowNavigation, за исключением того, что оно не будет привязано к направлению, а будет просто циклически проходить их в некотором порядке, который имеет смысл (например, слева направо, сверху вниз).

Я нашел код здесь, который утверждает, что манипулирует StackSet для решения этой проблемы, и я скомпилировал его, но он не делал того, что я хотел. К сожалению, мое понимание Haskell довольно ограничено, поэтому я не смог ни написать свой собственный, ни исправить что-то не так с кодом выше.


person asu04    schedule 22.02.2017    source источник


Ответы (2)


Вы можете использовать модуль CycleWS в xmonad-contrib.

У него есть привязки, которые вы можете использовать для циклического переключения непустых рабочих пространств:

import XMonad.Actions.CycleWS

myKeys homeDir conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
    [ -- (your own bindings here)
    -- Cycle non-empty workspaces with mod+tab or mod+shift+tab
    , ((modm              , xK_Tab   ), moveTo Next NonEmptyWS)
    , ((modm .|. shiftMask, xK_Tab   ), moveTo Prev NonEmptyWS)
    ]

Моя полная конфигурация находится здесь, если вам нужен полный пример.

person AlexJ136    schedule 22.02.2017
comment
Спасибо за ответ! Я думаю, что CycleWS позволяет мне переключаться между рабочими пространствами, но на самом деле я хочу иметь возможность перемещать фокус между окнами без фактического циклического переключения между рабочими пространствами. Итак, если бы у меня было два экрана с видимыми рабочими пространствами 1 и 2, и я в настоящее время сфокусирован на окне в рабочем пространстве 1, я хотел бы иметь возможность привязать Alt-Tab для перемещения фокуса по всем окнам, открытым в рабочих пространствах 1 и 2. Имеет ли это смысл? - person asu04; 22.02.2017

С тех пор эта функциональность была добавлена ​​в xmonad-contrib этим запросом на включение.

Пример использования:

import XMonad.Actions.GroupNavigation

в разделе ключей

-- use Alt+Tab and Alt+Shift+Tab to change focus to different windows across workspaces
((alt,           xK_Tab   ), nextMatch Forward isOnAnyVisibleWS),
((alt .|. shift, xK_Tab   ), nextMatch Backward isOnAnyVisibleWS),
person 79E09796    schedule 04.04.2021