
Not by default; there's already a bug (
https://github.com/xmonad/xmonad/issues/78) about our not obeying the ICCCM
replace protocol unless started by replacing some other WM.
There's a few other places you can hide extra parameters; starting that
early, the environment is probably the easiest to use, provided they're not
too large (see why there's a state file now).
On Wed, Nov 28, 2018 at 1:20 PM Dmitriy Matrosov
Hi.
On 11/21/2018 09:49 PM, Eyal Erez wrote:
Hi,
I'm getting some collisions between my xmonad keybindings and an application I'm running (it's a game that is suppose to run full screen but in reality just uses a large window). I was wondering if I could suspend or change some keybindings from a script that I can run before the app launches and then restore later.
Is this at all possible? Happy to entertain other options.
Here is proof of concept:
import XMonad import XMonad.Hooks.EwmhDesktops
import System.Directory import System.FilePath
main :: IO () main = do let xcf = ewmh $ def { modMask = mod4Mask , handleExtraArgs = disableKeys } xmonad xcf
disableKeys :: [String] -> XConfig Layout -> IO (XConfig Layout) disableKeys _ xcf = do xd <- getXMonadDir let disableFn = xd > "disable_keys" b <- doesFileExist disableFn if b then do trace "Disabling all keys." removeFile disableFn return (xcf {keys = \_ -> mempty}) else return xcf
To disable all keys create file `~/.xmonad/disable_keys` and then restart xmonad with `xmonad --restart`. All keys will be disabled _and_ file deleted (to avoid locking yourself), thus next restart will restore all keys back.
As far as i understand, xmonad grabs keys in `X.Main.launch` before entering main loop. Thus, the one way to change key grab is to restart xmonad. I need to modify `XConfig` before calling X.Main.launch`, and this may be done by `handleExtraArgs` (called in `launch'` in `X.Main.xmonad`). Unfortunately, it seems, that xmonad does not allow to pass extra cmd arguments during restart (`X.Operations.restart` always starts xmonad with name `xmonad` and no arguments). Also, i can't use extensible state in `handleExtraArgs`, because it runs in `IO` (`X` context is not yet built at that time). Thus, to pass something to it, i may use either file or (probably) `--replace`. The above version uses file. And i have no luck with `--replace`: it seems, `xmonad` can't replace itself?.. _______________________________________________ xmonad mailing list xmonad@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/xmonad
-- brandon s allbery kf8nh allbery.b@gmail.com