| xmonad-contrib-0.9.1: Third party extensions for xmonad | Source code | Contents | Index

XMonad.Layout.Monitor

Portability | unportable
Stability | unstable
Maintainer | Roman 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 | Source

Constructors

Monitor |

prop :: Property | property which uniquely identifies monitor window
rect :: Rectangle | specifies where to put monitor
visible :: Bool | is it visible by default?
name :: String | name of monitor (useful when we have many of them)
persistent :: Bool | is it shown on all layouts?
opacity :: Rational | opacity level

Instances

LayoutModifier Monitor Window
Read (Monitor a)
Show (Monitor a)

monitor :: Monitor a | Source

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 String | WM_WINDOW_ROLE property
Machine String | WM_CLIENT_MACHINE property
And Property Property |
Or Property Property |
Not Property |
Const Bool |

Instances

Read Property
Show Property

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 |

Instances

Eq MonitorMessage
Read MonitorMessage
Show MonitorMessage
Typeable MonitorMessage
Message MonitorMessage

doHideIgnore :: ManageHook | Source

Hides window and ignores it.

manageMonitor :: Monitor a -> ManageHook | Source

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