separate log for each Xinerama screen

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

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@ethanschoonover.com
http://ethanschoonover.com
On Wed, Nov 10, 2010 at 14:10, Oleksandr Manzyuk
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@haskell.org http://www.haskell.org/mailman/listinfo/xmonad

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@haskell.org http://www.haskell.org/mailman/listinfo/xmonad

Hi, I have something similar in my configuration: http://haskell.org/haskellwiki/Xmonad/Config_archive/adamvo's_xmonad.hs Though that approach isn't likely to do the right thing with ppExtras. So it's probably no good without changes. -- Adam * On Monday, November 15 2010, Brent Yorgey wrote:
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@haskell.org http://www.haskell.org/mailman/listinfo/xmonad
xmonad mailing list xmonad@haskell.org http://www.haskell.org/mailman/listinfo/xmonad
participants (4)
-
Adam Vogt
-
Brent Yorgey
-
Ethan Schoonover
-
Oleksandr Manzyuk