Переключение рабочих пространств в xmonad с помощью программатора дворака раскладки клавиатуры (сдвинутые числа)

Ну, на самом деле я использую не Dvorak, а Neo2, но, поскольку я использую клавиатуру матричного типа ( действительно эргономичную), я также сместил цифры.

Поэтому эта конструкция по моему xmonad.hs не работает эргономично:

-- mod-[1..9], Switch to workspace N
-- mod-shift-[1..9], Move client to workspace N
--
[((m .|. modMask, k), windows $ f i)
    | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
    , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]

Я хочу изменить это, чтобы иметь возможность доступа к рабочим областям с 1 по 9 с помощью клавиш от 2 до 0.

Как я мог достичь этого? Я пытался изменить третью строку на

    | (i, k) <- zip (XMonad.workspaces conf) [xK_2 .. xK_0]

но тогда я не смог получить доступ к 9-й рабочей области. Как мне изменить это? Было бы неплохо короткое объяснение, чтобы узнать кое-что об этой конструкции (я изучил Haskell много лет назад и забыл большую ее часть).

1 ответ

Решение

Ваша проблема в том, что xK_2 больше чем xK_0так что список [xK_2 .. xK_0] пустой:

Prelude XMonad> xK_2
50
Prelude XMonad> xK_0
48
Prelude XMonad> [xK_2 .. xK_0]
[]

Вы хотите использовать более длинный список, чем этот. Есть по крайней мере два разумных способа сделать это; Один из них - указать вручную все ключи:

Prelude XMonad> [xK_2, xK_3, xK_4, xK_5, xK_6, xK_7, xK_8, xK_9, xK_0]
[50,51,52,53,54,55,56,57,48]

То, что я, вероятно, использовал бы немного короче:

Prelude XMonad> [xK_2 .. xK_9] ++ [xK_0]
[50,51,52,53,54,55,56,57,48]

Не забудьте добавить несколько скобок, если это часть большего выражения.

Другие вопросы по тегам