[xmonad] Suspend Keybinding Temporarily
Dmitriy Matrosov
sgf.dma at gmail.com
Mon Dec 3 14:38:37 UTC 2018
On November 30, 2018 11:18:51 PM GMT+03:00, Brandon Allbery <allbery.b at gmail.com> wrote:
>Er. What version of ghc? That sounds like either a ghc runtime bug, or
>a
>system configuration issue. In particular, xmonad creates no threads
>itself, so that would be the ghc runtime's IO manager thread.
That reminds me, that i've compiled my xmonad build with `-threaded - with-rtsopts=-N`. I've tried without these options and for now it seems stable. May that be the case?
Ghc versions are different: this error happens to me with different stack snapshots from time to time more than year already.
>On Fri, Nov 30, 2018 at 3:07 PM Dmitriy Matrosov <sgf.dma at gmail.com>
>wrote:
>
>> On 11/30/2018 12:11 AM, Brandon Allbery wrote:
>> > Yes. More specifically, it's ultimately using the execve()
>syscall, via
>> > one of the wrappers which propagates the environment (which one
>depends
>> > on whether it's asked to do $PATH search or not).
>>
>> So.. here is version using environment:
>>
>> import XMonad
>> import XMonad.Operations
>> import XMonad.Util.EZConfig
>>
>> import System.Environment
>> import Control.Exception
>>
>> main :: IO ()
>> main = do
>> let xcf = def
>> { modMask = mod4Mask
>> , handleExtraArgs = disableKeysE
>> }
>> `additionalKeys`
>> [ ((mod4Mask, xK_d), disableKeysOn) ]
>> xmonad xcf
>>
>> disableKeysOn :: X ()
>> disableKeysOn = do
>> trace "Preparing to disable keys and restarting.."
>> io $ setEnv "XMONAD_DISABLE_KEYS" "1"
>> restart "xmonad" True
>>
>> disableKeysE :: [String] -> XConfig Layout -> IO (XConfig
>Layout)
>> disableKeysE _ xcf = do
>> me <- lookupEnv "XMONAD_DISABLE_KEYS"
>> case me of
>> Just _ -> do
>> trace "Disabling all keys."
>> unsetEnv "XMONAD_DISABLE_KEYS"
>> return (xcf {keys = \_ -> mempty})
>> Nothing -> return xcf
>>
>> It also restarts xmonad on key press (when disabling keys) and all
>> works fine, but.. xmonad frequently crashes with
>>
>> xmonad: failed to create OS thread: Resource temporarily
>> unavailable
>>
>> I don't think this crash relates somehow to using environment, and it
>> happened from time to time before too, but still.. Can you advise,
>> how to fix it?
>>
>> > On Thu, Nov 29, 2018 at 4:07 PM Dmitriy Matrosov
><sgf.dma at gmail.com
>> > <mailto:sgf.dma at gmail.com>> wrote:
>> >
>> > On 11/29/2018 09:50 PM, Brandon Allbery wrote:
>> > > You were talking about restart, between the running xmonad
>and
>> its
>> > > replacement via executeFile. There, you can use the
>environment.
>> > There
>> > > is no way to pass information between an invoked "xmonad
>> > --restart" and
>> > > the running xmonad.
>> >
>> > You mean, `executeFile` preserves environment? So, i may
>change
>> it from
>> > running xmonad (by e.g. keybinding) and then restart it?
>> >
>> > > On Thu, Nov 29, 2018 at 6:01 AM Dmitriy Matrosov
>> > <sgf.dma at gmail.com <mailto:sgf.dma at gmail.com>
>> > > <mailto:sgf.dma at gmail.com <mailto:sgf.dma at gmail.com>>>
>wrote:
>> > >
>> > >
>> > >
>> > > On November 28, 2018 9:25:00 PM GMT+03:00, Brandon
>Allbery
>> > > <allbery.b at gmail.com <mailto:allbery.b at gmail.com>
>> > <mailto:allbery.b at gmail.com <mailto:allbery.b at gmail.com>>>
>wrote:
>> > > >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).
>> > >
>> > > Hm, i don't understand how to use environment. I need
>to pass
>> > > something to running xmonad process (to which i send
>> > > XMONAD_RESTART). As far as i know, i can't change
>> environment of
>> > > another process..
>> > >
>> > >
>> > > >On Wed, Nov 28, 2018 at 1:20 PM Dmitriy Matrosov
>> > > <sgf.dma at gmail.com <mailto:sgf.dma at gmail.com>
>> > <mailto:sgf.dma at gmail.com <mailto: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 <mailto:xmonad at haskell.org>
>> > <mailto:xmonad at haskell.org <mailto:xmonad at haskell.org>>
>> > > >>
>http://mail.haskell.org/cgi-bin/mailman/listinfo/xmonad
>> > > >>
>> > > _______________________________________________
>> > > xmonad mailing list
>> > > xmonad at haskell.org <mailto:xmonad at haskell.org>
>> > <mailto:xmonad at haskell.org <mailto:xmonad at haskell.org>>
>> > > http://mail.haskell.org/cgi-bin/mailman/listinfo/xmonad
>> > >
>> > >
>> > >
>> > > --
>> > > brandon s allbery kf8nh
>> > > allbery.b at gmail.com <mailto:allbery.b at gmail.com>
>> > <mailto:allbery.b at gmail.com <mailto:allbery.b at gmail.com>>
>> >
>> > _______________________________________________
>> > xmonad mailing list
>> > xmonad at haskell.org <mailto:xmonad at haskell.org>
>> > http://mail.haskell.org/cgi-bin/mailman/listinfo/xmonad
>> >
>> >
>> >
>> > --
>> > brandon s allbery kf8nh
>> > allbery.b at gmail.com <mailto:allbery.b at gmail.com>
>>
>>
More information about the xmonad
mailing list