[xmonad] separate log for each Xinerama screen

Ethan Schoonover es at ethanschoonover.com
Wed Nov 10 17:13:03 EST 2010


Brilliant... will try this out. I just set up multihead and the mental
map of workspace management between the screens is not at all
intuitive. This looks like a possible solution.

Ethan Schoonover
es at ethanschoonover.com
http://ethanschoonover.com




On Wed, Nov 10, 2010 at 14:10, Oleksandr Manzyuk <manzyuk at gmail.com> 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