aboutsummaryrefslogtreecommitdiffstats
path: root/DynamicLog.hs
diff options
context:
space:
mode:
authorChristian Thiemann <mail@christian-thiemann.de>2007-10-06 19:31:13 +0200
committerChristian Thiemann <mail@christian-thiemann.de>2007-10-06 19:31:13 +0200
commit34dcdcd504107f39ad41769c351a4732ffd04f21 (patch)
treee9c2264b82240c5b09ad789786138cf25c6eed7b /DynamicLog.hs
parentfcec780f4bf68073bfad76998b05bf8663e9b83f (diff)
downloadXMonadContrib-34dcdcd504107f39ad41769c351a4732ffd04f21.tar.gz
XMonadContrib-34dcdcd504107f39ad41769c351a4732ffd04f21.tar.xz
XMonadContrib-34dcdcd504107f39ad41769c351a4732ffd04f21.zip
Two new dynamic log functions that display the title of the currently focused window
I liked the window-title-in-statusbar feature of dwm very much and wanted to have that in XMonad as well. Somewhere on the net I found some code to put into Config.hs (and sorry, that was last week and I already forgot where I got it from) which I modified and put into the DynamicLog extension. One can now set the logHook in Config.hs either to dynamicLogWithTitle to get the usual layout description and workspace list plus window title enclosed in angle brackets, or dynamicLogWithTitleColored "white" (or "red" etc.) to have xmonad print out some ^fg() markers for dzen to display the window title in the given color. Some windows (like terminals or browsers) change their window title from time to time but xmonad does not recognize this. So I started learning Haskell to provide patches for X11-extras and xmonad so that PropertyNotify events are captured and, if the event notifies about a WM_NAME property change, call the logHook to update the status bar. Hope you find this useful, Christian darcs-hash:20071006173113-8602e-c5404faf1ae148cc510644b8146a5997556e5703.gz
Diffstat (limited to 'DynamicLog.hs')
-rw-r--r--DynamicLog.hs33
1 files changed, 31 insertions, 2 deletions
diff --git a/DynamicLog.hs b/DynamicLog.hs
index 468a335..d2ad23b 100644
--- a/DynamicLog.hs
+++ b/DynamicLog.hs
@@ -21,7 +21,7 @@
module XMonadContrib.DynamicLog (
-- * Usage
-- $usage
- dynamicLog, dynamicLogXinerama, pprWindowSet, pprWindowSetXinerama
+ dynamicLog, dynamicLogWithTitle, dynamicLogWithTitleColored, dynamicLogXinerama, pprWindowSet, pprWindowSetXinerama
) where
--
@@ -35,6 +35,7 @@ import Data.List
import Data.Ord ( comparing )
import qualified StackSet as S
import Data.Monoid
+import XMonadContrib.NamedWindows
-- $usage
--
@@ -42,10 +43,23 @@ import Data.Monoid
--
-- > import XMonadContrib.DynamicLog
-- > logHook = dynamicLog
+--
+-- To get the title of the currently focused window after the workspace list:
+--
+-- > import XMonadContrib.DynamicLog
+-- > logHook = dynamicLogWithTitle
+--
+-- To have the window title highlighted in any color recognized by dzen:
+--
+-- > import XMonadContrib.DynamicLog
+-- > logHook = dynamicLogWithTitleColored "white"
+--
-- %import XMonadContrib.DynamicLog
--- %def -- comment out default logHook definition above if you uncomment this:
+-- %def -- comment out default logHook definition above if you uncomment any of these:
-- %def logHook = dynamicLog
+-- %def logHook = dynamicLogWithTitle
+-- %def logHook = dynamicLogWithTitleColored "white"
-- |
@@ -64,6 +78,21 @@ dynamicLog = withWindowSet $ \ws -> do
let desc = description . S.layout . S.workspace . S.current $ ws
io . putStrLn $ "(" ++ desc ++ ") " ++ pprWindowSet ws
+-- Appends title of currently focused window to log output
+-- Arguments are: pre-title text and post-title text
+dynamicLogWithTitle_ :: String -> String -> X ()
+dynamicLogWithTitle_ pre post= do ld <- withWindowSet $ return . description . S.layout . S.workspace . S.current -- layout description
+ ws <- withWindowSet $ return . pprWindowSet -- workspace list
+ wt <- withWindowSet $ maybe (return "") (fmap show . getName) . S.peek -- window title
+ io . putStrLn $ "(" ++ ld ++ ") " ++ ws ++ " " ++ pre ++ wt ++ post
+
+dynamicLogWithTitle :: X ()
+dynamicLogWithTitle = dynamicLogWithTitle_ "<" ">"
+
+-- As dynamicLogWithTitle but with colored window title instead of angle brackets (works with dzen only)
+dynamicLogWithTitleColored :: String -> X ()
+dynamicLogWithTitleColored color = dynamicLogWithTitle_ ("^fg(" ++ color ++ ")") "^fg()"
+
pprWindowSet :: WindowSet -> String
pprWindowSet s = concatMap fmt $ sortBy cmp
(map S.workspace (S.current s : S.visible s) ++ S.hidden s)