将窗口移动到另一个监视器时,如何使其保持焦点



我使用带有2个监视器和XMonad.Layout.IndependentScreens的xmonad。它工作得很好,但我有一个问题是,当我把一个窗口移动到另一个监视器时,它会失去焦点

负责放置的代码在这里:

[((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
| (key, sc) <- zip [xK_e, xK_w, xK_r] [0..] -- switched e and w to accomodate my monitor setup
, (f, m) <- [(W.view, 0), (W.shift, controlMask)]]

然而,我对Haskell还很陌生,无法理解

如何修改上面的代码以实现我想要的目标?

我不太清楚你到底想要什么。我假设您希望将当前关注的窗口移动到其他工作区/监视器,并将焦点保持在这些窗口上。不是吗?

看着狙击手,我不确定你想要哪一个密钥绑定。让我来解释

-- This comprehension list expands as below
[ ( (m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f) )
| (key, sc) <- zip [xK_e, xK_w, xK_r] [0..] 
, (f, m) <- [(W.view, 0), (W.shift, controlMask)]
]

-- mod + 0 + e moves focus to workspace 0 (but not the focused window)
-- mod + ctrl + e moves focused window to workspace 0 (but doesn't move the focus)
-- mod + 0 + w moves focus to workspace 1 (but not the focused window)
-- etc...
[ ( (0           .|. modm, xK_e), screenWorkspace 0 >>= flip whenJust (windows . W.view) )
, ( (controlMask .|. modm, xK_e), screenWorkspace 0 >>= flip whenJust (windows . W.shift) )
, ( (0           .|. modm, xK_w), screenWorkspace 1 >>= flip whenJust (windows . W.view) )
, ( (controlMask .|. modm, xK_w), screenWorkspace 1 >>= flip whenJust (windows . W.shift) )
, ( (0           .|. modm, xK_r), screenWorkspace 2 >>= flip whenJust (windows . W.view) )
, ( (controlMask .|. modm, xK_r), screenWorkspace 2 >>= flip whenJust (windows . W.shift) )
]

正如您所看到的,您有不同的keybindigs来移动焦点和移动聚焦窗口。我想你想要一个单独的键绑定同时做这两件事。我假设您希望Mod+CTRL+w/e/r移动到其他工作空间。在这种情况下,您需要通过以下修改该列表

[ ( (controlMask .|. modm, key), screenWorkspace sc >>= flip whenJust (wid -> windows $ W.view wid . W.shift wid) )
| (key, sc) <- zip [xK_e, xK_w, xK_r] [0..] 
]

由于上面的代码有点晦涩,我建议在顶级中定义一个辅助函数

moveCurrentWindowsAndFocusIt :: WorkspaceId -> X ()
moveCurrentWindowsAndFocusIt wid = windows $ W.view wid . W.shift wid
-- This is the where your keybindings are
mykeybindings =
...
[ ( (controlMask .|. modm, key), screenWorkspace sc >>= flip whenJust moveCurrentWindowsAndFocusIt  )
| (key, sc) <- zip [xK_e, xK_w, xK_r] [0..] 
]

最新更新