[xmonad] Suspend Keybinding Temporarily

Brandon Allbery allbery.b at gmail.com
Mon Dec 3 18:55:33 UTC 2018


Threaded builds would run a certain risk of confusing X11 under some
circumstances (specifically, if you tried to use the existing server
connection in a thread, you could see X11 protocol errors). They shouldn't
produce that error.

On Mon, Dec 3, 2018 at 9:38 AM Dmitriy Matrosov <sgf.dma at gmail.com> wrote:

>
>
> 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>
> >>
> >>
> _______________________________________________
> 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/20181203/82251229/attachment-0001.html>


More information about the xmonad mailing list