XMonad.Hooks.FadeWindows

xmonad-contrib-0.12: Third party extensions for xmonad

Copyright | Brandon S Allbery KF8NH <allbery.b@gmail.com>
License | BSD
Maintainer | Brandon S Allbery KF8NH
Stability | unstable
Portability | unportable
Safe Haskell | None
Language | Haskell98

XMonad.Hooks.FadeWindows

Contents

- Usage
- The `logHook` for window fading
- The `FadeHook`
- Predefined `FadeHook`s
- `handleEventHook` for mapped/unmapped windows
- `doF` for simple hooks
- Useful `Query`s for `FadeHook`s

Description

A more flexible and general compositing interface than FadeInactive. Windows can be selected and opacity specified by means of FadeHooks, which are very similar to ManageHooks and use the same machinery.

Synopsis

- fadeWindowsLogHook :: FadeHook -> X ()
- type FadeHook = Query Opacity
- data Opacity
- idFadeHook :: FadeHook
- opaque :: FadeHook
- solid :: FadeHook
- transparent :: FadeHook
- invisible :: FadeHook
- transparency :: Rational -> FadeHook
- translucence :: Rational -> FadeHook
- fadeBy :: Rational -> FadeHook
- opacity :: Rational -> FadeHook
- fadeTo :: Rational -> FadeHook
- fadeWindowsEventHook :: Event -> X All
- doS :: Monoid m => m -> Query m
- isFloating :: Query Bool
- isUnfocused :: Query Bool

# Usage

To use this module, make sure your `xmonad` core supports generalized `ManageHook`s (check the type of `idHook`; if it's `ManageHook` then your `xmonad` is too old) and then add `fadeWindowsLogHook` to your `logHook` and `fadeWindowsEventHook` to your `handleEventHook`:

        , logHook = fadeWindowsLogHook myFadeHook
        , handleEventHook = fadeWindowsEventHook
        {- ... -}

    myFadeHook = composeAll [isUnfocused --> transparency 0.2
                            ,                opaque
                            ]

The above is like FadeInactive with a fade value of 0.2.

FadeHooks do not accumulate; instead, they compose from right to left like `ManageHook`s, so the above example `myFadeHook` will render unfocused windows at 4/5 opacity and the focused window as opaque. The `opaque` hook above is optional, by the way, as any unmatched window will be opaque by default.

This module is best used with XMonad.Hooks.MoreManageHelpers, which exports a number of Queries that can be used in either `ManageHook` or `FadeHook`.

Note that you need a compositing manager such as `xcompmgr`, `dcompmgr`, or `cairo-compmgr` for window fading to work. If you aren't running a compositing manager, the opacity will be recorded but won't take effect until a compositing manager is started.

For more detailed instructions on editing the `logHook` see:

XMonad.Doc.Extending

For more detailed instructions on editing the `handleEventHook`, see:

XMonad.Doc.Extending (which sadly doesnt exist at the time of writing...)

WARNING: This module is very good at triggering bugs in compositing managers. Symptoms range from windows not being repainted until the compositing manager is restarted or the window is unmapped and remapped, to the machine becoming sluggish until the compositing manager is restarted (at which point a popup/dialog will suddenly appear; apparently it's getting into a tight loop trying to fade the popup in). I find it useful to have a key binding to restart the compositing manager; for example,

main = xmonad $ def { {- ... -} } `additionalKeysP` [(M-S-4,spawn "killall xcompmgr; sleep 1; xcompmgr -cCfF &")] {- ... -} ]

(See XMonad.Util.EZConfig for `additionalKeysP`.)

# The `logHook` for window fading

fadeWindowsLogHook :: FadeHook -> X ()

A `logHook` to fade windows under control of a `FadeHook`, which is similar to but not identical to `ManageHook`.

# The `FadeHook`

type FadeHook = Query Opacity

A FadeHook is similar to a ManageHook, but records window opacity.

data Opacity

Instances

Monoid Opacity |

idFadeHook :: FadeHook

The identity `FadeHook`, which renders windows `opaque`.

# Predefined `FadeHook`s

opaque :: FadeHook

Render a window fully opaque.

solid :: FadeHook

An alias for `transparent`.

transparent :: FadeHook

Render a window fully transparent.

invisible :: FadeHook

An alias for `opaque`.

An alias for `transparent`.

transparency

Arguments

:: Rational | The window's transparency as a fraction. `transparency 1` is the same as `transparent`, whereas `transparency 0` is the same as `opaque`.
-> FadeHook |

Specify a window's transparency.

translucence :: Rational -> FadeHook

An alias for `transparency`.

An alias for `transparency`.

fadeBy :: Rational -> FadeHook

An alias for `transparency`.

opacity

Arguments

:: Rational | The opacity of a window as a fraction. `opacity 1` is the same as `opaque`, whereas `opacity 0` is the same as `transparent`.
-> FadeHook |

Specify a window's opacity; this is the inverse of `transparency`.

fadeTo :: Rational -> FadeHook

An alias for `transparency`.

An alias for `transparency`.

# `handleEventHook` for mapped/unmapped windows

fadeWindowsEventHook :: Event -> X All

A `handleEventHook` to handle fading and unfading of newly mapped or unmapped windows; this avoids problems with layouts such as XMonad.Layout.Full or XMonad.Layout.Tabbed. This hook may also be useful with XMonad.Hooks.FadeInactive.

# `doF` for simple hooks

doS :: Monoid m => m -> Query m

Like `doF`, but usable with `ManageHook`-like hooks that aren't `Query` wrapped around transforming functions (`Endo`).

# Useful `Query`s for `FadeHook`s

isFloating :: Query Bool

A Query to determine if a window is floating.

isUnfocused :: Query Bool

Returns True if the window doesn't have the focus.