Как изменить 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. Это тоже будет хорошо, и я готов поспорить, что такое решение можно легко модифицировать, основываясь на окне, которое теперь сфокусировано.

  • Полноэкранный режим работает в Chrome, но не в Firefox в XMonad
  • Имеет ли терминал-мультиплексор какую-либо выгоду при использовании с диспетчером оконной панели?
  • Xmonad: некоторые приложения не запускаются в рабочей области, которые я определил в config
  • утечка памяти xorg
  • Xmonad не меняет макеты
  • Команда для открытия панели приложений?
  • Автозапуск под случайным WM?
  • 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

    Почему коронка может начинаться поздно случайно

    Каковы преимущества использования Tmux в любое время?

    Как я могу нажимать клавишу «keycode 53» каждую минуту в X?

    генерировать согласованный уникальный идентификатор машины

    Как вывести структуру каталогов в формат Json

    Есть ли общий способ автоматического обновления с помощью cron?

    Как отображать зависимости, заданные в make-файле как дерево?

    Замена текста из списка замен. Добавлено осложнение: обратная косая черта

    постфиксный виртуальный домен по определенному IP-адресу

    В PCManFM можно запустить и подключиться к SFTP-серверу?

    Cronjob для запуска, а затем завершения

    Настроить systemd journald как для пересылки, так и для хранения в постоянном журнале?

    libc.so.6 (GLIBC_2.14) (64 – битный)

    Как однозначно идентифицировать устройства ARM, не полагаясь на MAC-адрес?

    Как напечатать имя переменной вместе со значением?

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