xmonad-contrib-0.9.1: Third party extensions for xmonadContentsIndex
XMonad.Layout.Monitor
Portabilityunportable
Stabilityunstable
MaintainerRoman Cheplyaka <roma@ro-che.info>
Contents
Usage
Hints and issues
TODO
Description
Layout modfier for displaying some window (monitor) above other windows
Synopsis
data Monitor a = Monitor {
prop :: Property
rect :: Rectangle
visible :: Bool
name :: String
persistent :: Bool
opacity :: Rational
}
monitor :: Monitor a
data Property
= Title String
| ClassName String
| Resource String
| Role String
| Machine String
| And Property Property
| Or Property Property
| Not Property
| Const Bool
data MonitorMessage
= ToggleMonitor
| ShowMonitor
| HideMonitor
| ToggleMonitorNamed String
| ShowMonitorNamed String
| HideMonitorNamed String
doHideIgnore :: ManageHook
manageMonitor :: Monitor a -> ManageHook
Usage

You can use this module with the following in your ~/.xmonad/xmonad.hs:

 import XMonad.Layout.Monitor

Define Monitor record. monitor can be used as a template. At least prop and rect should be set here. Also consider setting persistent to True.

Minimal example:

 myMonitor = monitor
     { prop = ClassName "SomeClass"
     , rect = Rectangle 0 0 40 20 -- rectangle 40x20 in upper left corner
     }

More interesting example:

 clock = monitor {
      -- Cairo-clock creates 2 windows with the same classname, thus also using title
      prop = ClassName "Cairo-clock" `And` Title "MacSlow's Cairo-Clock"
      -- rectangle 150x150 in lower right corner, assuming 1280x800 resolution
    , rect = Rectangle (1280-150) (800-150) 150 150
      -- avoid flickering
    , persistent = True
      -- make the window transparent
    , opacity = 0.6
      -- hide on start
    , visible = False
      -- assign it a name to be able to toggle it independently of others
    , name = "clock"
    }

Add ManageHook to de-manage monitor windows and apply opacity settings.

 manageHook = myManageHook <+> manageMonitor clock

Apply layout modifier.

 myLayout = ModifiedLayout clock $ tall ||| Full ||| ...

After that, if there exists a window with specified properties, it will be displayed on top of all tiled (not floated) windows on specified position.

It's also useful to add some keybinding to toggle monitor visibility:

 , ((mod1Mask, xK_u     ), broadcastMessage ToggleMonitor >> refresh)

Screenshot: http://www.haskell.org/haskellwiki/Image:Xmonad-clock.png

Hints and issues
  • This module assumes that there is only one window satisfying property exists.
  • If your monitor is available on all layouts, set persistent to True to avoid unnecessary flickering. You can still toggle monitor with a keybinding.
  • You can use several monitors with nested modifiers. Give them names
data Monitor a
Constructors
Monitor
prop :: Propertyproperty which uniquely identifies monitor window
rect :: Rectanglespecifies where to put monitor
visible :: Boolis it visible by default?
name :: Stringname of monitor (useful when we have many of them)
persistent :: Boolis it shown on all layouts?
opacity :: Rationalopacity level
show/hide Instances
monitor :: Monitor a
Template for Monitor record. At least prop and rect should be redefined. Default settings: visible is True, persistent is False.
data Property
Most of the property constructors are quite self-explaining.
Constructors
Title String
ClassName String
Resource String
Role StringWM_WINDOW_ROLE property
Machine StringWM_CLIENT_MACHINE property
And Property Property
Or Property Property
Not Property
Const Bool
show/hide Instances
data MonitorMessage
Messages without names affect all monitors. Messages with names affect only monitors whose names match.
Constructors
ToggleMonitor
ShowMonitor
HideMonitor
ToggleMonitorNamed String
ShowMonitorNamed String
HideMonitorNamed String
show/hide Instances
doHideIgnore :: ManageHook
Hides window and ignores it.
manageMonitor :: Monitor a -> ManageHook
ManageHook which demanages monitor window and applies opacity settings.
TODO
  • make Monitor remember the window it manages
  • specify position relative to the screen
Produced by Haddock version 2.6.0