[xmonad] Suspend Keybinding Temporarily
Brandon Allbery
allbery.b at gmail.com
Wed Nov 28 18:25:00 UTC 2018
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 <sgf.dma at gmail.com> wrote:
> 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 at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/xmonad
>
--
brandon s allbery kf8nh
allbery.b at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/xmonad/attachments/20181128/b5a87f7b/attachment.html>
More information about the xmonad
mailing list