diff options
author | Anton Vorontsov <anton@enomsg.org> | 2014-09-01 09:21:58 +0200 |
---|---|---|
committer | Anton Vorontsov <anton@enomsg.org> | 2014-09-01 09:21:58 +0200 |
commit | 30c1202c3b6e9c45deaabfbaf2fb43d8c78ed5c6 (patch) | |
tree | 71698210c3150965bd094bfa22ce9a8575b462d4 /XMonad/Layout | |
parent | 925a7ecf632eddb21ff92e6b6f73850d6d2d1ee0 (diff) | |
download | XMonadContrib-30c1202c3b6e9c45deaabfbaf2fb43d8c78ed5c6.tar.gz XMonadContrib-30c1202c3b6e9c45deaabfbaf2fb43d8c78ed5c6.tar.xz XMonadContrib-30c1202c3b6e9c45deaabfbaf2fb43d8c78ed5c6.zip |
Implement proper handling of dynamically changing hostname
Ignore-this: 2aeac6d2161e666d40cda6a09f78b208
The module implements a proper way of finding out whether the window is
remote or local.
Just checking for a hostname and WM_CLIENT_MACHINE being equal is often
not enough because the hostname is a changing subject (without any
established notification mechanisms), and thus WM_CLIENT_MACHINE and the
hostname can diverge even for a local window.
This module solves the problem. As soon as there is a new window created,
we check the hostname and WM_CLIENT_MACHINE, and then we cache the result
into the XMONAD_REMOTE property.
Notice that XMonad itself does not know anything about hostnames, nor does
it have any dependency on Network.* modules. For this module it is not a
problem: you can provide a mean to get the hostname through your config
file (see usage). Or, if you don't like the hassle of handling dynamic
hostnames (suppose your hostname never changes), it is also fine: this
module will fallback to using environment variables.
darcs-hash:20140901072158-1836e-fa2b05c79ec3217d5024b7e050b2239dcf7de4b4.gz
Diffstat (limited to '')
-rw-r--r-- | XMonad/Layout/Stoppable.hs | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/XMonad/Layout/Stoppable.hs b/XMonad/Layout/Stoppable.hs index 35c3c01..5c95aa1 100644 --- a/XMonad/Layout/Stoppable.hs +++ b/XMonad/Layout/Stoppable.hs @@ -46,10 +46,10 @@ module XMonad.Layout.Stoppable import XMonad import XMonad.Actions.WithAll import XMonad.Util.WindowProperties +import XMonad.Util.RemoteWindows import XMonad.Util.Timer import XMonad.StackSet hiding (filter) import XMonad.Layout.LayoutModifier -import System.Posix.Env import System.Posix.Signals import Data.Maybe import Control.Monad @@ -67,8 +67,10 @@ import Control.Monad -- proccesses, which means that it needs to know the hostname, so it looks -- for environment variables (e.g. HOST). -- --- Beware that as of now this module does not support dynamically changing --- hostnames. +-- Environment variables will work for most cases, but won't work if the +-- hostname changes. To cover dynamic hostnames case, in addition to +-- layoutHook you have to provide manageHook from +-- "XMonad.Util.RemoteWindows" module. -- -- For more detailed instructions on editing the layoutHook see: -- @@ -80,12 +82,7 @@ signalWindow s w = do io $ (signalProcess s . fromIntegral) `mapM_` fromMaybe [] pid signalLocalWindow :: Signal -> Window -> X () -signalLocalWindow s w = do - host <- io $ pickOneMaybe `liftM` (getEnv `mapM` vars) - hasProperty (Machine host) w >>= flip when (signalWindow s w) - where - pickOneMaybe = last . (mzero:) . take 1 . catMaybes - vars = ["XAUTHLOCALHOSTNAME","HOST","HOSTNAME"] +signalLocalWindow s w = isLocalWindow w >>= flip when (signalWindow s w) withAllOn :: (a -> X ()) -> Workspace i l a -> X () withAllOn f wspc = f `mapM_` integrate' (stack wspc) |