mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 11:30:22 -07:00
Add XMonad.Hooks.ShowWName
This is a reimplementation of X.L.ShowWName as a logHook, using the new simpleWindow interface from 86b816ec5046ec09b911d48df282b7039a201dfc. Fixes: https://github.com/xmonad/xmonad-contrib/issues/612
This commit is contained in:
parent
6a46ff449f
commit
fba22a7366
@ -46,6 +46,11 @@
|
|||||||
visible workspaces combined with the workspace name, for example in a status
|
visible workspaces combined with the workspace name, for example in a status
|
||||||
bar. This module provides utility functions to do just that.
|
bar. This module provides utility functions to do just that.
|
||||||
|
|
||||||
|
* `XMonad.Hooks.ShowWName`
|
||||||
|
|
||||||
|
Flashes the name of the current workspace when switching to it.
|
||||||
|
Like `XMonad.Layout.ShowWName`, but as a logHook.
|
||||||
|
|
||||||
### Bug Fixes and Minor Changes
|
### Bug Fixes and Minor Changes
|
||||||
|
|
||||||
* `XMonad.Prompt.OrgMode`
|
* `XMonad.Prompt.OrgMode`
|
||||||
|
84
XMonad/Hooks/ShowWName.hs
Normal file
84
XMonad/Hooks/ShowWName.hs
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
{-# LANGUAGE InstanceSigs #-}
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
-- |
|
||||||
|
-- Module : XMonad.Hooks.ShowWName
|
||||||
|
-- Description : Like 'XMonad.Layout.ShowWName', but as a logHook
|
||||||
|
-- Copyright : (c) 2022 Solid <soliditsallgood@mailbox.org>
|
||||||
|
-- License : BSD3-style (see LICENSE)
|
||||||
|
--
|
||||||
|
-- Maintainer : soliditsallgood@mailbox.org
|
||||||
|
--
|
||||||
|
-- Flash the names of workspaces name when switching to them. This is a
|
||||||
|
-- reimplementation of 'XMonad.Layout.ShowWName' as a logHook.
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
module XMonad.Hooks.ShowWName (
|
||||||
|
-- * Usage
|
||||||
|
-- $usage
|
||||||
|
showWNameLogHook,
|
||||||
|
SWNConfig(..),
|
||||||
|
flashName,
|
||||||
|
) where
|
||||||
|
|
||||||
|
import qualified XMonad.StackSet as W
|
||||||
|
import qualified XMonad.Util.ExtensibleState as XS
|
||||||
|
|
||||||
|
import XMonad
|
||||||
|
import XMonad.Layout.ShowWName (SWNConfig (..))
|
||||||
|
import XMonad.Prelude
|
||||||
|
import XMonad.Util.XUtils (WindowConfig (..), showSimpleWindow)
|
||||||
|
|
||||||
|
import Control.Concurrent (threadDelay)
|
||||||
|
|
||||||
|
{- $usage
|
||||||
|
|
||||||
|
You can use this module with the following in your
|
||||||
|
@~\/.xmonad\/xmonad.hs@:
|
||||||
|
|
||||||
|
> import XMonad.Hooks.ShowWName
|
||||||
|
>
|
||||||
|
> main :: IO ()
|
||||||
|
> main = xmonad $ def
|
||||||
|
> { logHook = showWNameLogHook def
|
||||||
|
> }
|
||||||
|
|
||||||
|
Whenever a workspace gains focus, the above logHook will flash its name.
|
||||||
|
You can customise the duration of the flash, as well as colours by
|
||||||
|
customising the 'SWNConfig' argument that 'showWNameLogHook' takes.
|
||||||
|
|
||||||
|
Alternatively, you can also bind 'flashName' to a key and manually
|
||||||
|
invoke it when you want to know which workspace you are on.
|
||||||
|
-}
|
||||||
|
|
||||||
|
-- | LogHook for flashing the name of a workspace upon entering it.
|
||||||
|
showWNameLogHook :: SWNConfig -> X ()
|
||||||
|
showWNameLogHook cfg = do
|
||||||
|
LastShown s <- XS.get
|
||||||
|
foc <- withWindowSet (pure . W.currentTag)
|
||||||
|
unless (s == foc) $ do
|
||||||
|
flashName cfg
|
||||||
|
XS.put (LastShown foc)
|
||||||
|
|
||||||
|
-- | Flash the name of the currently focused workspace.
|
||||||
|
flashName :: SWNConfig -> X ()
|
||||||
|
flashName cfg = do
|
||||||
|
n <- withWindowSet (pure . W.currentTag)
|
||||||
|
showSimpleWindow cfg' [n] >>= \w -> void . xfork $ do
|
||||||
|
dpy <- openDisplay ""
|
||||||
|
threadDelay (fromEnum $ swn_fade cfg * 1000000) -- 1_000_000 needs GHC 8.6.x and up
|
||||||
|
void $ destroyWindow dpy w
|
||||||
|
closeDisplay dpy
|
||||||
|
where
|
||||||
|
cfg' :: WindowConfig
|
||||||
|
cfg' = def{ winFont = swn_font cfg, winBg = swn_bgcolor cfg, winFg = swn_color cfg }
|
||||||
|
|
||||||
|
-- | Last shown workspace.
|
||||||
|
newtype LastShown = LastShown WorkspaceId
|
||||||
|
deriving (Show, Read)
|
||||||
|
|
||||||
|
instance ExtensionClass LastShown where
|
||||||
|
initialValue :: LastShown
|
||||||
|
initialValue = LastShown ""
|
||||||
|
|
||||||
|
extensionType :: LastShown -> StateExtension
|
||||||
|
extensionType = PersistentExtension
|
@ -198,6 +198,7 @@ library
|
|||||||
XMonad.Hooks.Script
|
XMonad.Hooks.Script
|
||||||
XMonad.Hooks.ServerMode
|
XMonad.Hooks.ServerMode
|
||||||
XMonad.Hooks.SetWMName
|
XMonad.Hooks.SetWMName
|
||||||
|
XMonad.Hooks.ShowWName
|
||||||
XMonad.Hooks.StatusBar
|
XMonad.Hooks.StatusBar
|
||||||
XMonad.Hooks.StatusBar.PP
|
XMonad.Hooks.StatusBar.PP
|
||||||
XMonad.Hooks.StatusBar.WorkspaceScreen
|
XMonad.Hooks.StatusBar.WorkspaceScreen
|
||||||
|
Loading…
x
Reference in New Issue
Block a user