mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-07-31 20:21:51 -07:00
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
This commit is contained in:
@@ -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)
|
||||
|
Reference in New Issue
Block a user