3

Я использую модуль EZConfig для Xmonad. Я хотел бы связать ModMask s чтобы сначала переместить мое текущее окно с фокусом на другой экран, а затем переместить фокус на другой экран.

Используя модуль CycleWS, этого можно добиться, запустив shiftNextScreen, а затем nextScreen.

Могу ли я привязать две команды к одной клавише?

Кроме того, я пытался идти

((modMask, xK_s),
     shiftNextScreen nextScreen)

Но это не работает, потому что nextScreen становится аргументом для shiftNextScreen, что не имеет смысла. Я вообще не знаю haskell.

1 ответ1

5

Кажется, никто не мог ответить на ваш вопрос до сих пор. Позвольте мне попробовать:

TL; DR

((modMask, xK_s),
     sequence_ [shiftNextScreen, nextScreen])

должно сработать.

Зачем?

Если вы посмотрите на http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Actions-CycleWS.html,

вы видите следующие типы для ваших функций:

nextScreen :: X ()
shiftNextScreen :: X ()

вместе со знанием того, что X является монадой и типом связывания клавиш (ButtonMask,KeySym), X () что вы хотите:

объединить nextScreen и shiftNextScreen чтобы получить результат типа X ()

если мы просто составим список следующим образом:

[nextScreen,shiftNextScreen] у нас есть тип [X ()] , закройте, но еще не то, что мы хотим.

Поскольку мы знаем, что X - это монада, быстрый поиск в Google показывает sequence_

что дает нам:

sequence_ [shiftNextScreen, nextScreen]

который возвращает тип X () и, следовательно, является допустимым действием для правой части сопоставления клавиш.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .