mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 11:30:22 -07:00
X.U.Loggers: Add variants of logTitle with urgent windows support
This commit is contained in:
parent
2ae1c86ceb
commit
cfc6a52935
@ -787,6 +787,11 @@
|
|||||||
ones) on the focused workspace, as well as `logTitlesOnScreen` as
|
ones) on the focused workspace, as well as `logTitlesOnScreen` as
|
||||||
a screen-specific variant thereof.
|
a screen-specific variant thereof.
|
||||||
|
|
||||||
|
- Added `logTitles'` and `logTitleOnScreen'`. These act like
|
||||||
|
`logTitles` and `logTitlesOnScreen` but use a record as an input
|
||||||
|
to enable logging for more window types. For example, currently
|
||||||
|
urgent windows are additionally supported.
|
||||||
|
|
||||||
* `XMonad.Layout.Minimize`
|
* `XMonad.Layout.Minimize`
|
||||||
|
|
||||||
- Export `Minimize` type constructor.
|
- Export `Minimize` type constructor.
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
{-# LANGUAGE MultiWayIf #-}
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
-- |
|
-- |
|
||||||
-- Module : XMonad.Util.Loggers
|
-- Module : XMonad.Util.Loggers
|
||||||
@ -32,12 +33,15 @@ module XMonad.Util.Loggers (
|
|||||||
|
|
||||||
-- * XMonad Loggers
|
-- * XMonad Loggers
|
||||||
-- $xmonad
|
-- $xmonad
|
||||||
, logCurrent, logLayout, logTitle, logTitles
|
, logCurrent, logLayout
|
||||||
|
, logTitle, logTitles, logTitles'
|
||||||
, logConst, logDefault, (.|)
|
, logConst, logDefault, (.|)
|
||||||
-- * XMonad: Screen-specific Loggers
|
-- * XMonad: Screen-specific Loggers
|
||||||
-- $xmonad-screen
|
-- $xmonad-screen
|
||||||
, logCurrentOnScreen, logLayoutOnScreen
|
, logCurrentOnScreen, logLayoutOnScreen
|
||||||
, logTitleOnScreen, logWhenActive, logTitlesOnScreen
|
, logTitleOnScreen, logWhenActive
|
||||||
|
, logTitlesOnScreen, logTitlesOnScreen'
|
||||||
|
, TitlesFormat(..)
|
||||||
-- * Formatting Utilities
|
-- * Formatting Utilities
|
||||||
-- $format
|
-- $format
|
||||||
, onLogger
|
, onLogger
|
||||||
@ -48,10 +52,11 @@ module XMonad.Util.Loggers (
|
|||||||
|
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import XMonad (liftIO, gets)
|
import XMonad (Default, gets, liftIO, Window)
|
||||||
import XMonad.Core
|
import XMonad.Core
|
||||||
import qualified XMonad.StackSet as W
|
import qualified XMonad.StackSet as W
|
||||||
import XMonad.Hooks.StatusBar.PP
|
import XMonad.Hooks.StatusBar.PP
|
||||||
|
import XMonad.Hooks.UrgencyHook (readUrgents)
|
||||||
import XMonad.Util.Font (Align (..))
|
import XMonad.Util.Font (Align (..))
|
||||||
import XMonad.Util.NamedWindows (getName)
|
import XMonad.Util.NamedWindows (getName)
|
||||||
|
|
||||||
@ -193,15 +198,30 @@ logTitlesOnScreen
|
|||||||
-> (String -> String) -- ^ Formatting for the focused window
|
-> (String -> String) -- ^ Formatting for the focused window
|
||||||
-> (String -> String) -- ^ Formatting for the unfocused window
|
-> (String -> String) -- ^ Formatting for the unfocused window
|
||||||
-> Logger
|
-> Logger
|
||||||
logTitlesOnScreen sid formatFoc formatUnfoc = (`withScreen` sid) $ \screen -> do
|
logTitlesOnScreen sid formatFoc formatUnfoc =
|
||||||
let focWin = fmap W.focus . W.stack . W.workspace $ screen
|
logTitlesOnScreen' sid TitlesFormat{ focusedFormat = formatFoc
|
||||||
wins = maybe [] W.integrate . W.stack . W.workspace $ screen
|
, unfocusedFormat = formatUnfoc
|
||||||
|
, urgentFormat = id
|
||||||
|
}
|
||||||
|
|
||||||
|
-- | Like 'logTitlesOnScreen' but with support for urgent windows. To
|
||||||
|
-- be used with "XMonad.Hooks.UrgencyHook".
|
||||||
|
logTitlesOnScreen' :: ScreenId -> TitlesFormat -> Logger
|
||||||
|
logTitlesOnScreen' sid (TitlesFormat formatFoc formatUnfoc formatUrg) =
|
||||||
|
(`withScreen` sid) $ \screen -> do
|
||||||
|
let focWin = fmap W.focus . W.stack . W.workspace $ screen
|
||||||
|
urgWins <- readUrgents
|
||||||
|
logTitlesOnScreenWorker screen $ \win name ->
|
||||||
|
if | Just win == focWin -> formatFoc name
|
||||||
|
| win `elem` urgWins -> formatUrg name
|
||||||
|
| otherwise -> formatUnfoc name
|
||||||
|
|
||||||
|
-- | Internal function for 'logTitlesOnScreen' and 'logTitlesOnScreen''.
|
||||||
|
logTitlesOnScreenWorker :: WindowScreen -> (Window -> String -> String) -> Logger
|
||||||
|
logTitlesOnScreenWorker screen logger = do
|
||||||
|
let wins = maybe [] W.integrate . W.stack . W.workspace $ screen
|
||||||
winNames <- traverse (fmap show . getName) wins
|
winNames <- traverse (fmap show . getName) wins
|
||||||
pure . Just
|
pure . Just . unwords $ zipWith logger wins winNames
|
||||||
. unwords
|
|
||||||
$ zipWith (\w n -> if Just w == focWin then formatFoc n else formatUnfoc n)
|
|
||||||
wins
|
|
||||||
winNames
|
|
||||||
|
|
||||||
-- | Like 'logTitlesOnScreen', but directly use the "focused" screen
|
-- | Like 'logTitlesOnScreen', but directly use the "focused" screen
|
||||||
-- (the one with the currently focused workspace).
|
-- (the one with the currently focused workspace).
|
||||||
@ -210,6 +230,27 @@ logTitles formatFoc formatUnfoc = do
|
|||||||
sid <- gets $ W.screen . W.current . windowset
|
sid <- gets $ W.screen . W.current . windowset
|
||||||
logTitlesOnScreen sid formatFoc formatUnfoc
|
logTitlesOnScreen sid formatFoc formatUnfoc
|
||||||
|
|
||||||
|
-- | Variant of 'logTitles', but with support for urgent windows.
|
||||||
|
logTitles' :: TitlesFormat -> Logger
|
||||||
|
logTitles' formatter =
|
||||||
|
gets (W.screen . W.current . windowset) >>= (`logTitlesOnScreen'` formatter)
|
||||||
|
|
||||||
|
-- | Formatting applied to the titles of certain windows.
|
||||||
|
data TitlesFormat = TitlesFormat
|
||||||
|
{ focusedFormat :: String -> String -- ^ Focused formatting.
|
||||||
|
, unfocusedFormat :: String -> String -- ^ Unfocused formatting.
|
||||||
|
, urgentFormat :: String -> String -- ^ Formatting when urgent.
|
||||||
|
}
|
||||||
|
|
||||||
|
-- | How to format these titles by default when using 'logTitles'' and
|
||||||
|
-- 'logTitlesOnScreen''.
|
||||||
|
instance Default TitlesFormat where
|
||||||
|
def = TitlesFormat
|
||||||
|
{ focusedFormat = wrap "[" "]" . xmobarRaw . shorten 30 . xmobarStrip
|
||||||
|
, unfocusedFormat = xmobarRaw . shorten 30 . xmobarStrip
|
||||||
|
, urgentFormat = wrap "!" "!" . xmobarRaw . shorten 30 . xmobarStrip
|
||||||
|
}
|
||||||
|
|
||||||
-- | Get the name of the current layout.
|
-- | Get the name of the current layout.
|
||||||
logLayout :: Logger
|
logLayout :: Logger
|
||||||
logLayout = withWindowSet $ return . Just . ld
|
logLayout = withWindowSet $ return . Just . ld
|
||||||
|
Loading…
x
Reference in New Issue
Block a user