Я использую несколько сопоставлений клавиш в моем xmonad.hs
файле конфигурации:
...
, modMask = mod4Mask -- Rebind Mod to the Windows key
...
[ ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")
, ((0, xK_Print), spawn "scrot")
, ((controlMask, xK_f), spawn "firefox")
]
Третье отображение выполняется firefox
при нажатии ctrl+f. Я хотел бы сделать что-то более сложное:
if (firefox is running):
focus and maximize firefox window:
else:
run firefox
И я хотел бы изменить ctrl+fна win+f. Как я могу это сделать?
keyboard-shortcuts
xmonad
xralf
источник
источник
Ответы:
Глядя на CONTRIB пакеты XMonad в , вы найдете
XMonad.Actions.WindowGo
, что экспортирует следующие функции :который принимает строковый аргумент программы для запуска , например "firefox"; и логический запрос, который используется, чтобы выяснить, запущен ли он уже через свойства X11, например
(className =? "Firefox")
( варианты см. в верхней частиXMonad.Actions.WindowGo
страницы ).Итак, все, что вам нужно, это привязать
runOrRaiseMaster "firefox" (className =? "Firefox")
ключ, который вы хотите, как объяснено вXMonad.Doc.Extending
, черезкак часть привязок клавиш
Data.Map
вашей конфигурации (подробности зависят от вашего способа настройки, т. е. от всегоxmonad.hs
, см. Добавление привязок клавиш ).Обратите внимание, что нет никакого смысла максимизировать окно в XMonad. Когда вы настроите все как описано, вы будете иметь Mod4+ fдействовать следующим образом:
Максимизации можно эмулировать, выбрав
Full
раскладку после вызоваrunOrRaiseMaster
, как описано здесь :(обратите внимание, что этот пример также демонстрирует
XMonad.Util.EZConfig
более простые определения привязки клавиш)Возможно объединение этих двух вещей. Оба имеют тип
X ()
, т. Е. Находятся в X Monad . Использование>>
, что типа (проверьте:t (>>)
вghci
)у нас
(runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")
также есть комбинация двухX ()
типовX ()
, и поэтому она может быть связана с ключом.EDIT отсутствует
)
в строке кода с>>
Edit2
modm
->modMask
.Edit3 Это,
xmonad.hs
надеюсь, работает.( Почему бы не научить вас Haskell для хорошего блага? )
источник
>> (sendMessage $ JumptoLayout "Full")
ошибки конструктора. Может быть, это что-то простое, что я решу после изучения Haskell.modm
же не работает, я все еще используюcontrolMask
.xmonad.hs
чтобы это исправить; Лучше просто загляните сюда, в архив конфигурации и посмотрите, как это делают другие или используют упомянутоеEZConfig
.X ()
связывания типа с ключом должно быть таким(runOrRaiseMaster ...) >> (sendMessage ...)
, что приводит к,((...,...), (runOrR...) >> (send...) )
(a(
beforerun...
)