У меня проблема с функцией, которую я взял из XMonad.Util.Dmenu, а именно dmenuXinerama (см. ниже). Кажется, это происходит:
Эти функции блокируют цикл событий xmonad до выхода из dmenu; это означает, что программы не смогут открывать новые окна, и вы не сможете изменить рабочие пространства или фокус ввода, пока вы так или иначе не отреагируете на подсказку.
Что происходит, так это то, что я создаю экземпляр меню, и оно появляется, но как только я запускаю что-то оттуда, все блокируется, и я ничего не могу сделать.
Это функция:
dmenuXinerama :: [String] -> X String
dmenuXinerama opts = do
curscreen <- (fromIntegral . W.screen . W.current) `fmap` gets windowset :: X Int
io $ runProcessWithInput "dmenu_run" ["-m", show curscreen] (unlines opts)
... и привязка:
-- Spawn dmenu
, ((modMask, xK_p), void $ dmenuXinerama [])
Я также пробовал это:
dmenuXinerama :: [String] -> X String
dmenuXinerama opts = do
curscreen <-
(fromIntegral . W.screen . W.current) `fmap` gets windowset :: X Int
_ <-
runProcessWithInput "dmenu_run" ["-m", show curscreen] (unlines opts)
menuArgs "dmenu_run" ["-m", show curscreen] opts
-- | Like 'menu' but also takes a list of command line arguments.
menuArgs :: MonadIO m => String -> [String] -> [String] -> m String
menuArgs menuCmd args opts = liftM (filter (/='\n')) $
runProcessWithInput menuCmd args (unlines opts)
Я был бы признателен, если бы кто-нибудь объяснил, что происходит и как я могу преодолеть проблему.