[xmonad] separate log for each Xinerama screen

Brent Yorgey byorgey at seas.upenn.edu
Mon Nov 15 07:16:36 EST 2010


Hi Sasha,

I think this would make a nice addition to DynamicLog (except the
functions really ought to be named something better than just adding
primes).  Do you know how to make a darcs patch and send it to this
list, or would you like some pointers?

-Brent

On Wed, Nov 10, 2010 at 10:10:08PM +0000, Oleksandr Manzyuk wrote:
> Hello all,
> 
> I've been experimenting with XMonad recently and I've come up with a
> solution to the following "problem": I have a dual-head setup and am
> running two status bars on the top of each screen; I would like to be
> able to display in each status bar the information that is relevant to
> the corresponding screen.  In particular, when I am moving the focus
> around, staying on one screen, the window title shown in the status
> bar of that screen should be changing according to the focused window,
> while that shown in the status bar on the other screen should not and
> should show the title of the window that would have the focus if I
> switched to the other screen.  Similarly for layouts.  On the other
> hand, both status bars should show the same list of hidden non-empty
> workspaces.  This way, when I'm doing something on a particular screen
> I don't have to turn my head to find out which workspace I am on and
> what is my current layout.  The solution I have is sufficiently
> general, so that I thought it could be added to
> XMonad.Hooks.DynamicLog module.  In that module there are functions
> dynamicLogWithPP, dynamicLogString, and pprWindowSet that operate on
> the current screen;  I wrote the functions dynamicLogWithPP',
> dynamicLogString', and pprWindowSet' that are like their undashed
> counterparts but take the screen to operate on as the first argument.
> This way I can do
> 
> xmobar screen template commands = spawnPipe . intercalate " " $ options
>    where options = [ "xmobar"
>                    , "-x"
>                    , show screen
>                    , "-t"
>                    , wrap "'" "'" template
>                    , "-c"
>                    , wrap "'" "'" commands
>                    ]
> 
> main = do
>   xmobar0 <- xmobar 0 "%StdinReader%}{"       "[Run StdinReader]"
>   xmobar1 <- xmobar 1 "%StdinReader%}{%date%" "[Run StdinReader, Run
> Date \"%a %b %_d, %H:%M\" \"date\" 10]"
>   xmonad $ defaultConfig {
>              ...
>              , logHook = myLogHook [ pp { ppOutput = hPutStrLn xmobar0 }
>                                    , pp { ppOutput = hPutStrLn xmobar1 }
>                                    ]
>              ...
>              }
> 
> myLogHook pps = do
>   screens <- (sortBy (compare `on` S.screen) . S.screens) `fmap` gets windowset
>   zipWithM_ dynamicLogWithPP' screens pps
> 
> and be happy!  If you are interested, please see
> https://github.com/manzyuk/dotfiles for details.  I don't know if this
> is a valuable addition, but it works very well for me, so I thought I
> would share.
> 
> Best,
> Sasha
> _______________________________________________
> xmonad mailing list
> xmonad at haskell.org
> http://www.haskell.org/mailman/listinfo/xmonad


More information about the xmonad mailing list