X.L.VoidBorders: Add ability to reset borders for certain layouts

This commit is contained in:
rayes
2022-01-30 20:49:32 -07:00
parent 741d90eb9b
commit a3012eaa27
2 changed files with 38 additions and 11 deletions

View File

@@ -110,6 +110,12 @@
different X property) to communicate trayer resize events to different X property) to communicate trayer resize events to
XMobar so that padding space may be reserved on xmobar for the XMobar so that padding space may be reserved on xmobar for the
tray. Requires `xmobar` version 0.40 or higher. tray. Requires `xmobar` version 0.40 or higher.
- `XMonad.Layout.VoidBorders`
- Added new layout modifier `normalBorders` which can be used for
resetting borders back in layouts where you want borders after calling
`voidBorders`.
## 0.17.0 (October 27, 2021) ## 0.17.0 (October 27, 2021)

View File

@@ -13,19 +13,18 @@
-- Portability : unportable -- Portability : unportable
-- --
-- Modifies a layout to set borders to 0 for all windows in the workspace. -- Modifies a layout to set borders to 0 for all windows in the workspace.
-- Unlike XMonad.Layout.NoBorders, this modifier will not restore the window -- It can also restore the window border if the window is moved to a different
-- border if the windows are moved to a different workspace or the layout is -- workspace or if the layout is changed.
-- changed.
-- --
-- This modifier's primary use is to eliminate the "border flash" you get -- This modifier's primary use is to eliminate the "border flash" you get
-- while switching workspaces with the `noBorders` modifier. It won't return -- while switching workspaces with the `noBorders` modifier.
-- the borders to their original width, however.
-- --
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
module XMonad.Layout.VoidBorders ( -- * Usage module XMonad.Layout.VoidBorders ( -- * Usage
-- $usage -- $usage
voidBorders voidBorders
, normalBorders
) where ) where
import XMonad import XMonad
@@ -39,9 +38,10 @@ import XMonad.StackSet (integrate)
-- > import XMonad.Layout.VoidBorders -- > import XMonad.Layout.VoidBorders
-- --
-- and modify the layouts to call 'voidBorders' on the layouts you want to -- and modify the layouts to call 'voidBorders' on the layouts you want to
-- remove borders from windows: -- remove borders from windows, and 'normalBorders' on the layouts you want
-- to keep borders for:
-- --
-- > layoutHook = ... ||| voidBorders Full ||| ... -- > layoutHook = ... ||| voidBorders Full ||| normalBorders Tall ...
-- --
-- For more detailed instructions on editing the layoutHook see: -- For more detailed instructions on editing the layoutHook see:
-- --
@@ -49,9 +49,6 @@ import XMonad.StackSet (integrate)
data VoidBorders a = VoidBorders deriving (Read, Show) data VoidBorders a = VoidBorders deriving (Read, Show)
voidBorders :: l Window -> ModifiedLayout VoidBorders l Window
voidBorders = ModifiedLayout VoidBorders
instance LayoutModifier VoidBorders Window where instance LayoutModifier VoidBorders Window where
modifierDescription = const "VoidBorders" modifierDescription = const "VoidBorders"
@@ -60,6 +57,30 @@ instance LayoutModifier VoidBorders Window where
mapM_ setZeroBorder $ integrate s mapM_ setZeroBorder $ integrate s
return (wrs, Nothing) return (wrs, Nothing)
voidBorders :: l Window -> ModifiedLayout VoidBorders l Window
voidBorders = ModifiedLayout VoidBorders
data NormalBorders a = NormalBorders deriving (Read, Show)
instance LayoutModifier NormalBorders Window where
modifierDescription = const "NormalBorders"
redoLayout NormalBorders _ Nothing wrs = return (wrs, Nothing)
redoLayout NormalBorders _ (Just s) wrs = do
mapM_ resetBorders $ integrate s
return (wrs, Nothing)
normalBorders :: l Window -> ModifiedLayout NormalBorders l Window
normalBorders = ModifiedLayout NormalBorders
-- | Sets border width to 0 for every window from the specified layout. -- | Sets border width to 0 for every window from the specified layout.
setZeroBorder :: Window -> X () setZeroBorder :: Window -> X ()
setZeroBorder w = withDisplay $ \d -> io $ setWindowBorderWidth d w 0 setZeroBorder w = setBorders w 0
-- | Resets the border to the value read from the current configuration.
resetBorders :: Window -> X ()
resetBorders w = asks (borderWidth . config) >>= setBorders w
setBorders :: Window -> Dimension -> X ()
setBorders w bw = withDisplay $ \d -> io $ setWindowBorderWidth d w bw