Merge pull request #682 from rayes0/master

X.L.VoidBorders: Add ability to reset borders for certain layouts
This commit is contained in:
Tomáš Janoušek 2022-02-01 18:39:57 +00:00 committed by GitHub
commit ae9b9c43a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 11 deletions

View File

@ -111,6 +111,12 @@
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)
### Breaking Changes ### Breaking Changes

View File

@ -13,19 +13,21 @@
-- 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 --
-- border if the windows are moved to a different workspace or the layout is -- Unlike "XMonad.Layout.NoBorders", the 'voidBorders' modifier will not
-- changed. -- restore the window border if the windows are moved to a different workspace
-- or the layout is changed. There is, however, a companion 'normalBorders'
-- modifier which explicitly restores the border.
-- --
-- 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 "XMonad.Layout.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 +41,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 +52,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 +60,29 @@ 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