Как изменить modMask в Xmonad, когда определенное окно сосредоточено, или на конкретном рабочем пространстве?

Я использую левый Alt в качестве основного основного кода, но для определенного приложения я хотел бы использовать клавиши Alt + в качестве моих привязок, и для этого конкретного приложения я хочу, чтобы левый подменю был моим modkey.

Кажется, что logHook – это подходящее место для включения этой логики, но у меня есть проблемы с пониманием, как это сделать.

В значительной степени упрощенная конфигурация выглядит

import qualified XMonad.StackSet as W import XMonad import XMonad.Hooks.DynamicLog main = do -- some stuff xmonad $ defaultConfig { modMask = mod1Mask -- left winkey = mod4Mask, left alt = mod1Mask , logHook = do dynamicLogWithPP pp } 

где

 pp = dzenPP { -- more stuff } 

Я мог бы получить имя текущего окна в моем logHook

 winset <- gets windowset let wname = fmap getName (W.peek winset) -- here I have some window identificator in Maybe 

но я не понимаю, как заменить modMask в моей основной функции, в defaultConfig, на лету.

Я также был бы рад, если бы на одном рабочем пространстве было бы иначе. Скажем, на рабочих площадках от 1 до 8 это клавиша Alt, а на 9-м она оставила Winkey. Это тоже будет хорошо, и я готов поспорить, что такое решение можно легко модифицировать, основываясь на окне, которое теперь сфокусировано.

  • Назначение выходного номера на выход X
  • Получить имя файла сфокусированного окна в xmonad
  • Команда для открытия панели приложений?
  • Можете ли вы назначить произвольные привязки клавиш в xmonad?
  • В xmonad, как я могу привязать сочетание клавиш, чтобы привести меня в определенное окно?
  • XMonad не запускает xmobar
  • Пробелы XMonad в полноэкранном режиме
  • Пожалуйста, объясните, что происходит в моем конфигурационном файле XMonad.
  • One Solution collect form web for “Как изменить modMask в Xmonad, когда определенное окно сосредоточено, или на конкретном рабочем пространстве?”

    Это не удалось. XMonad работает так, как ожидалось, но приложения не получают нажатых клавиш. Я имею в виду, я использую winkey как modKey на 5-м рабочем пространстве и altkey на других рабочих пространствах. Я использовал для переключения рабочих областей с номером modKey +. Когда я нажимаю Alt + 2 на 5-й рабочей области, XMonad ничего не делает (это правильно), и приложение ничего не делает (что неправильно). Chrome не переключается на вторую вкладку и так далее.


    Хорошо, поэтому мне удалось это сделать, используя XMonad.Actions.PerWorkspaceKeys .

    Связанная конфигурация:

     import XMonad.Actions.PerWorkspaceKeys workspaceModkeys = [ (mod1Mask, map show ([1..4] ++ [6..9])) -- use Alt as modkey on all workspaces , (mod4Mask, ["5"]) -- save 5th (use Win there) ] modifiedKeysList conf = [ ((0, xK_Return), spawn $ XMonad.terminal conf) -- launch a terminal , ((shiftMask, xK_c ), kill) -- close focused window ] unmodifiedKeys conf = [ ((0, xF86XK_AudioPlay ), spawn "mpc toggle") , ((0, xF86XK_AudioStop ), spawn "mpc stop") ] keysList conf = concat (map modifyKey (modifiedKeysList conf)) ++ (unmodifiedKeys conf) modifyKey :: ((KeyMask, KeySym), X()) -> [((KeyMask, KeySym), X())] modifyKey k = map (fk) workspaceModkeys where f ((mask, key), action) (mod, workspaces) = ((mask .|. mod, key), bindOn (map (\w -> (w, action)) workspaces)) myKeys conf = M.fromList $ keysList conf main = xmonad $ defaultConfig { keys = myKeys } 

    Список modifiedKeys будет использовать модификатор (в этом примере – Winkey на пятой рабочей области, а слева Alt – на всех остальных), список unmodifiedKeys используется как есть.

    По-прежнему можно заглянуть в окно-специфические ключи позже, но я сейчас закончен.

    Interesting Posts

    почему регат Redhat по-прежнему предлагает 2-летнего повышения?

    TFTP не прослушивает определенный порт при запуске с использованием правила xinetd

    Как получить все зависимости для пакета

    Как можно переключиться на ttyX в виртуальном боксе?

    Поддерживает ли GRUB2 / загружается LVM на MD-рейде?

    получить вывод `top` для неинтерактивной оболочки

    Профиль AppArmor Firefox позволяет читать и писать в любом месте HOME, если явно не используется

    Какие фрагменты несовместимы в массиве Linux md?

    Как установить выходной порт на звуковой карте?

    Процесс восстановления mysql занимает больше времени

    crontab для команды запускать каждую неделю и три месяца?

    Ошибка KeePass при OpenBSD и libpng

    Использование «зарезервированных» кодов для статуса выхода сценариев оболочки

    Что эта вещь называется и как ее отключить? (Связанный с Gnome-shell)

    Bash globbing: как выражать "что-то – *. Txt кроме * -foobar.txt" как glob?

    Linux и Unix - лучшая ОС в мире.