new module NoBorders to let a given layout have windows without borders.

This is designed for layouts like full and tabbed, where the red square
around the screen actually conveys no information (except for weird windows
that use the shape extension or something, so that more than one window is
actually visible).  Save some real estate at no cost.
This commit is contained in:
David Roundy
2007-06-12 13:37:27 +00:00
parent 9d6fa84ea9
commit 6f45009aea
2 changed files with 37 additions and 0 deletions

View File

@@ -23,6 +23,7 @@ import XMonadContrib.HintedTile ()
import XMonadContrib.LayoutHints ()
import XMonadContrib.Mosaic ()
import XMonadContrib.NamedWindows ()
import XMonadContrib.NoBorders ()
import XMonadContrib.RotView ()
import XMonadContrib.SimpleDate ()
import XMonadContrib.Spiral ()

36
NoBorders.hs Normal file
View File

@@ -0,0 +1,36 @@
module XMonadContrib.NoBorders ( noBorders, withBorder ) where
-- Make a given layout display without borders. This is useful for
-- full-screen or tabbed layouts, where you don't really want to waste a
-- couple of pixels of real estate just to inform yourself that the visible
-- window has focus.
-- Usage:
-- import XMonadContrib.NoBorders
-- layouts = [ noBorders full, tall, ... ]
import Control.Monad.State ( gets )
import Graphics.X11.Xlib
import XMonad
import Operations ( UnDoLayout(UnDoLayout) )
import qualified StackSet as W
import {-# SOURCE #-} Config (borderWidth)
noBorders :: Layout -> Layout
noBorders = withBorder 0
withBorder :: Dimension -> Layout -> Layout
withBorder bd l = l { doLayout = \r x -> setborders bd >> doLayout l r x
, modifyLayout = ml }
where ml m | Just UnDoLayout == fromMessage m
= do setborders borderWidth
fmap (withBorder bd) `fmap` (modifyLayout l) m
| otherwise = fmap (withBorder bd) `fmap` (modifyLayout l) m
setborders :: Dimension -> X ()
setborders bw = withDisplay $ \d ->
do ws <- gets (W.integrate . W.stack . W.workspace . W.current . windowset)
mapM_ (\w -> io $ setWindowBorderWidth d w bw) ws