Portability | unportable |
---|---|
Stability | unstable |
Maintainer | Adam Vogt <vogt.adam@gmail.com> |
A wrapper for keybinding configuration that can list the available keybindings.
- sendMessage' :: (Message a, Show a) => a -> NamedAction
- spawn' :: String -> NamedAction
- submapName :: HasName a => [((KeyMask, KeySym), a)] -> NamedAction
- addDescrKeys :: (HasName b1, HasName b) => ((KeyMask, KeySym), [((KeyMask, KeySym), NamedAction)] -> b) -> (XConfig Layout -> [((KeyMask, KeySym), b1)]) -> XConfig l -> XConfig l
- xMessage :: [((KeyMask, KeySym), NamedAction)] -> NamedAction
- showKmSimple :: [((KeyMask, KeySym), NamedAction)] -> [[Char]]
- showKm :: [((KeyMask, KeySym), NamedAction)] -> [String]
- noName :: X () -> NamedAction
- oneName :: (X (), String) -> NamedAction
- addName :: String -> X () -> NamedAction
- separator :: ((KeyMask, KeySym), NamedAction)
- subtitle :: String -> ((KeyMask, KeySym), NamedAction)
- (^++^) :: (HasName b, HasName b1) => [(d, b)] -> [(d, b1)] -> [(d, NamedAction)]
- data NamedAction = forall a . HasName a => NamedAction a
- class HasName a
- defaultKeysDescr :: XConfig Layout -> [((KeyMask, KeySym), NamedAction)]
Usage:
Here is an example config that demonstrates the usage of sendMessage'
,
mkNamedKeymap
, addDescrKeys
, and ^++^
import XMonad import XMonad.Util.NamedActions import XMonad.Util.EZConfig main = xmonad $ addDescrKeys ((mod4Mask, xK_F1), xMessage) myKeys defaultConfig { modMask = mod4Mask } myKeys c = (subtitle "Custom Keys":) $ mkNamedKeymap c $ [("M-x a", addName "useless message" $ spawn "xmessage foo"), ("M-c", sendMessage' Expand)] ^++^ [("<XF86AudioPlay>", spawn "mpc toggle" :: X ()), ("<XF86AudioNext>", spawn "mpc next")]
Using ^++^
, you can combine bindings whose actions are X ()
as well as actions that have descriptions. However you cannot mix the two in
a single list, unless each is prefixed with addName
or noName
.
If you don't like EZConfig, you can still use ^++^
with the basic XMonad
keybinding configuration too.
Also note the unfortunate necessity of a type annotation, since spawn
is
too general.
sendMessage' :: (Message a, Show a) => a -> NamedActionSource
sendMessage
but add a description that is show message
. Note that not
all messages have show instances.
spawn' :: String -> NamedActionSource
spawn
but the description is the string passed
submapName :: HasName a => [((KeyMask, KeySym), a)] -> NamedActionSource
submap
, but propagate the descriptions of the actions. Does this belong
in XMonad.Actions.Submap?
addDescrKeys :: (HasName b1, HasName b) => ((KeyMask, KeySym), [((KeyMask, KeySym), NamedAction)] -> b) -> (XConfig Layout -> [((KeyMask, KeySym), b1)]) -> XConfig l -> XConfig lSource
Merge the supplied keys with defaultKeysDescr
, also adding a keybinding
to run an action for showing the keybindings.
xMessage :: [((KeyMask, KeySym), NamedAction)] -> NamedActionSource
An action to send to addDescrKeys
for showing the keybindings. See also showKm
and showKmSimple
showKmSimple :: [((KeyMask, KeySym), NamedAction)] -> [[Char]]Source
noName :: X () -> NamedActionSource
These are just the NamedAction
constructor but with a more specialized
type, so that you don't have to supply any annotations, for ex coercing
spawn to X ()
from the more general MonadIO m => m ()
separator :: ((KeyMask, KeySym), NamedAction)Source
For a prettier presentation: keymask, keysym of 0 are reserved for this purpose: they do not happen, afaik, and keysymToString 0 would raise an error otherwise
(^++^) :: (HasName b, HasName b1) => [(d, b)] -> [(d, b1)] -> [(d, NamedAction)]Source
Combine keymap lists with actions that may or may not have names
data NamedAction Source
An existential wrapper so that different types can be combined in lists, and maps
forall a . HasName a => NamedAction a |
defaultKeysDescr :: XConfig Layout -> [((KeyMask, KeySym), NamedAction)]Source
A version of the default keys from XMonad.Config.defaultConfig
, but with
NamedAction
instead of X ()