Дивлячись на 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", воно буде зосереджене і встановлене на головне , тобто, залежно від вашої недавньої верстки , буде великим вікном
- якщо жодне вікно не збігається, Firefox буде породжений та встановлений у майстер .
Максимізацію можна імітувати, вибираючи Full
макет після виклику runOrRaiseMaster
, як описано тут :
("M-<F1>", sendMessage $ JumpToLayout "Full")
(зауважте, що цей приклад також демонструє, XMonad.Util.EZConfig
що дозволяють простіші визначення ключових зв'язків)
Поєднувати ці дві речі теж можливо. Обидва є типом X ()
, тобто вони знаходяться в X Монаді . Використання >>
, що типу (перевірте :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 для великого добра? )