Вкратце: когда я переключаюсь на рабочее пространство X, я хочу, чтобы некоторые программы запускались автоматически, но только если они еще не запущены.
Это отличается от запуска XMonad в разных рабочих областях, поскольку я не хочу перемещать окна в определенные рабочие области (например, всегда перемещать xterm в рабочую область 2).
У меня это тоже не работает: xmonad появляется при запуске в другой рабочей области. Я не хочу, чтобы все приложения запускались сразу после входа в систему, также это не будет автоматически запускаться, например. xterm, если я закрою его и снова переключусь на рабочее пространство 2.
Хватит о том, что не работает, вот что работает:
(почти)
В моем списке рабочих областей я держу кортежи с именем рабочей области и списком программ, запускаемых при переключении туда:
myWorkspaces = [ ("VIM", ["gvim"]), ("TERM",[myTerminal ++ " -e tmux"]) ]
-- In my keybindings:
[ ((mod4Mask, key), loadWorkspace workspace cmd)
| (key, (workspace, cmd)) <- zip [xK_1..] myWorkspaces
]
Я определил функцию для переключения в рабочее пространство и запуска данных программ:
loadWorkspace :: String -> [String] -> X()
loadWorkspace workspace commands =
do windows $ W.greedyView workspace
mapM_ spawn filtered_commands
where filtered_commands :: X [String]
filtered_commands = filterM isNotOpen commands
isNotOpen :: String -> X Bool
isNotOpen command = return True
(По какой-то причине mapM_
требует, чтобы второй аргумент был String вместо [String]. Я хочу сопоставить spawn
со строками в filtered_commands. , есть идеи, почему это не работает?)
Последняя недостающая часть — это функция isNotOpen
, которая должна искать className
окон в текущей рабочей области и возвращать, есть ли уже command
.
Мне чрезвычайно сложно (по сравнению с другими языками и технологиями) искать способ работы с XMonad. В этом случае я смог найти только способ получить окна в текущем WS - https://superuser.com/a/852152/481701 а>. Хорошо, я думаю, это дает мне объект Window, я могу запросить у него некоторые атрибуты.
Но нет. Окно на самом деле... псевдоним для Word64
!!! Хорошо, я думаю. Google xmonad получает атрибуты окна. Ничего такого. xmonad получает имя класса из идентификатора окна. Ничего такого. информация об окне xmonad. И дюжина других способов сказать что-то подобное — без толку. Все, что я получаю, это домашняя страница xmonad, часто задаваемые вопросы или «советы по настройке Xmonad».
Я попробовал это и в hayoo!, и самое близкое, что я смог получить, это «fromClassName — Colorize a window в зависимости от его className.». Ха-ха.