Глядя на CONTRIB пакеты XMonad в , вы найдете XMonad.Actions.WindowGo
, что экспортирует следующие функции :
runOrRaiseMaster :: String -> Query Bool -> X ()
который принимает строковый аргумент программы для запуска , например "firefox"; и логический запрос, который используется, чтобы выяснить, запущен ли он уже через свойства X11, например (className =? "Firefox")
( варианты см. в верхней части XMonad.Actions.WindowGo
страницы ).
Итак, все, что вам нужно, это привязать runOrRaiseMaster "firefox" (className =? "Firefox")
ключ, который вы хотите, как объяснено вXMonad.Doc.Extending
, через
((modMask, xK_f ), runOrRaiseMaster "firefox" (className =? "Firefox"))
как часть привязок клавиш Data.Map
вашей конфигурации (подробности зависят от вашего способа настройки, т. е. от всего xmonad.hs
, см. Добавление привязок клавиш ).
Обратите внимание, что нет никакого смысла максимизировать окно в XMonad. Когда вы настроите все как описано, вы будете иметь Mod4+ fдействовать следующим образом:
- если есть окно с именем класса, совпадающим с «Firefox», оно будет сфокусировано и установлено на master , т.е., в зависимости от вашего недавнего макета , будет большое окно
- если нет окна матчей, Firefox будет порождал и установлен в качестве ведущего .
Максимизации можно эмулировать, выбрав Full
раскладку после вызова runOrRaiseMaster
, как описано здесь :
("M-<F1>", sendMessage $ JumpToLayout "Full")
(обратите внимание, что этот пример также демонстрирует XMonad.Util.EZConfig
более простые определения привязки клавиш)
Возможно объединение этих двух вещей. Оба имеют тип X ()
, т. Е. Находятся в X Monad . Использование >>
, что типа (проверьте :t (>>)
в ghci
)
(>>) :: Monad m => m a -> m b -> m b
у нас (runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")
также есть комбинация двух X ()
типов X ()
, и поэтому она может быть связана с ключом.
EDIT отсутствует )
в строке кода с>>
Edit2 modm
-> modMask
.
Edit3 Это, xmonad.hs
надеюсь, работает.
( Почему бы не научить вас Haskell для хорошего блага? )