xmonad-contrib-0.11.1: Third party extensions for xmonad

Portability | unportable
Stability | unstable
Maintainer | Ben Boeckel <mathstuf@gmail.com>
Safe Haskell | None

XMonad.Hooks.ToggleHook

Contents

- Usage
- The hook
- Actions
- Queries
- `DynamicLog` utilities

Description

Hook and keybindings for toggling hook behavior.

Synopsis

- toggleHook :: String -> ManageHook -> ManageHook
- toggleHook' :: String -> ManageHook -> ManageHook -> ManageHook
- hookNext :: String -> Bool -> X ()
- toggleHookNext :: String -> X ()
- hookAllNew :: String -> Bool -> X ()
- toggleHookAllNew :: String -> X ()
- willHook :: String -> X Bool
- willHookNext :: String -> X Bool
- willHookAllNew :: String -> X Bool
- willHookNextPP :: String -> (String -> String) -> X (Maybe String)
- willHookAllNewPP :: String -> (String -> String) -> X (Maybe String)
- runLogHook :: X ()

# Usage

This module provides actions (that can be set as keybindings) to be able to cause hooks to be occur on a conditional basis.

You can use it by including the following in your `~/.xmonad/xmonad.hs`:

     import XMonad.Hooks.ToggleHook

and adding 'toggleHook name hook' to your `ManageHook` where `name` is the name of the hook and `hook` is the hook to execute based on the state.

     myManageHook = toggleHook "float" doFloat <+> manageHook defaultConfig

Additionally, toggleHook' is provided to toggle between two hooks (rather than on/off).

     myManageHook = toggleHook' "oldfocus" (const id) W.focusWindow <+> manageHook defaultConfig

The `hookNext` and `toggleHookNext` functions can be used in key bindings to set whether the hook is applied or not.

     , ((modm, xK_e), toggleHookNext "float")

`hookAllNew` and `toggleHookAllNew` are similar but float all spawned windows until disabled again.

     , ((modm, xK_r), toggleHookAllNew "float")

# The hook

toggleHook :: String -> ManageHook -> ManageHook

This `ManageHook` will selectively apply a hook as set by `hookNext` and `hookAllNew`.

toggleHook' :: String -> ManageHook -> ManageHook -> ManageHook

# Actions

hookNext :: String -> Bool -> X ()

`hookNext name True` arranges for the next spawned window to have the hook `name` applied, `hookNext name False` cancels it.

toggleHookNext :: String -> X ()

hookAllNew :: String -> Bool -> X ()

`hookAllNew name True` arranges for new windows to have the hook `name` applied, `hookAllNew name False` cancels it

toggleHookAllNew :: String -> X ()

# Queries

willHook :: String -> X Bool

Query what will happen at the next ManageHook call for the hook `name`.

willHookNext :: String -> X Bool

Whether the next window will trigger the hook `name`.

willHookAllNew :: String -> X Bool

Whether new windows will trigger the hook `name`.

# `DynamicLog` utilities

The following functions are used to display the current state of `hookNext` and `hookAllNew` in your `dynamicLogWithPP`. `willHookNextPP` and `willHookAllNewPP` should be added to the `ppExtras` field of your `PP`.

Use `runLogHook` to refresh the output of your `logHook`, so that the effects of a `hookNext`/... will be visible immediately:

     , ((modm, xK_e), toggleHookNext "float" >> runLogHook)

The `String -> String` parameters to `willHookNextPP` and `willHookAllNewPP` will be applied to their output, you can use them to set the text color, etc., or you can just pass them `id`.

willHookNextPP :: String -> (String -> String) -> X (Maybe String)

willHookAllNewPP :: String -> (String -> String) -> X (Maybe String)

runLogHook :: X ()