xmonad-contrib-bluetilebranch-0.8.1.2: Third party extensions for xmonadSource codeContentsIndex
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 :: Integer
}
monitor :: Monitor a
data Property
= Title String
| ClassName String
| Resource String
| Role 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 = 0xAAAAAAAA
      -- 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.

 myLayouts = 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 Source
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 :: Integeropacity level
show/hide Instances
monitor :: Monitor aSource
Template for Monitor record. At least prop and rect should be redefined. Default settings: visible is True, persistent is False.
data Property Source
Most of the property constructors are quite self-explaining.
Constructors
Title String
ClassName String
Resource String
Role StringWM_WINDOW_ROLE property
And Property Property
Or Property Property
Not Property
Const Bool
show/hide Instances
data MonitorMessage Source
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 :: ManageHookSource
Hides window and ignores it.
manageMonitor :: Monitor a -> ManageHookSource
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.4.2