brick-1.0: A declarative terminal user interface library
Safe HaskellNone
LanguageHaskell2010

Brick.Keybindings.KeyConfig

Description

This module provides KeyConfig and associated functions. A KeyConfig is the basis for the custom keybinding system in this library.

To get started, see newKeyConfig. Once a KeyConfig has been constructed, see keyDispatcher.

Synopsis

Documentation

data KeyConfig k Source #

A configuration of custom key bindings. A KeyConfig stores everything needed to resolve a key event into one or more key bindings. Make a KeyConfig with newKeyConfig, then use it to dispatch to KeyEventHandlers with keyDispatcher.

Make a new KeyConfig with newKeyConfig.

A KeyConfig stores:

  • A collection of named key events, mapping the event type k to Text labels.
  • For each event k, optionally store a list of default key bindings for that event.
  • An optional customized binding list for each event, setting the event to either Unbound or providing explicit overridden bindings with BindingList.

Instances

Instances details
Eq k => Eq (KeyConfig k) Source # 
Instance details

Defined in Brick.Keybindings.KeyConfig

Methods

(==) :: KeyConfig k -> KeyConfig k -> Bool #

(/=) :: KeyConfig k -> KeyConfig k -> Bool #

Show k => Show (KeyConfig k) Source # 
Instance details

Defined in Brick.Keybindings.KeyConfig

newKeyConfig Source #

Arguments

:: Ord k 
=> KeyEvents k

The base mapping of key events and names to use.

-> [(k, [Binding])]

Default bindings by key event, such as from a configuration file or embedded code. Optional on a per-event basis.

-> [(k, BindingState)]

Custom bindings by key event, such as from a configuration file. Explicitly setting an event to Unbound here has the effect of disabling its default bindings. Optional on a per-event basis.

-> KeyConfig k 

Build a KeyConfig with the specified KeyEvents event-to-name mapping, list of default bindings by event, and list of custom bindings by event.

data BindingState Source #

An explicit configuration of key bindings for a key event.

Constructors

BindingList [Binding]

Bind the event to the specified list of bindings.

Unbound

Disable all bindings for the event, including default bindings.

Specifying bindings

data Binding Source #

A key binding.

The easiest way to express Bindings is to use the helper functions in this module that work with instances of ToBinding, e.g.

let ctrlB = ctrl 'b'
    shiftX = shift 'x'
    ctrlMetaK = ctrl $ meta 'k'
    -- Or with Vty keys directly:
    ctrlDown = ctrl KDown

Constructors

Binding 

Fields

Instances

Instances details
Eq Binding Source # 
Instance details

Defined in Brick.Keybindings.KeyConfig

Methods

(==) :: Binding -> Binding -> Bool #

(/=) :: Binding -> Binding -> Bool #

Ord Binding Source # 
Instance details

Defined in Brick.Keybindings.KeyConfig

Show Binding Source # 
Instance details

Defined in Brick.Keybindings.KeyConfig

ToBinding Binding Source # 
Instance details

Defined in Brick.Keybindings.KeyConfig

Methods

bind :: Binding -> Binding Source #

class ToBinding a where Source #

The class of types that can form the basis of Bindings.

This is provided to make it easy to write and modify bindings in less verbose ways.

Methods

bind :: a -> Binding Source #

Binding constructor.

Instances

Instances details
ToBinding Char Source # 
Instance details

Defined in Brick.Keybindings.KeyConfig

Methods

bind :: Char -> Binding Source #

ToBinding Key Source # 
Instance details

Defined in Brick.Keybindings.KeyConfig

Methods

bind :: Key -> Binding Source #

ToBinding Binding Source # 
Instance details

Defined in Brick.Keybindings.KeyConfig

Methods

bind :: Binding -> Binding Source #

binding :: Key -> [Modifier] -> Binding Source #

Construct a Binding. Modifier order is ignored.

fn :: Int -> Binding Source #

Function key binding.

meta :: ToBinding a => a -> Binding Source #

Add Meta to a binding.

ctrl :: ToBinding a => a -> Binding Source #

Add Ctrl to a binding.

shift :: ToBinding a => a -> Binding Source #

Add Shift to a binding.

Querying KeyConfigs

firstDefaultBinding :: (Show k, Ord k) => KeyConfig k -> k -> Maybe Binding Source #

A convenience function to return the first result of allDefaultBindings, if any.

firstActiveBinding :: (Show k, Ord k) => KeyConfig k -> k -> Maybe Binding Source #

A convenience function to return the first result of allActiveBindings, if any.

allDefaultBindings :: Ord k => KeyConfig k -> k -> [Binding] Source #

Returns the list of default bindings for the specified event, irrespective of whether the event has been explicitly configured with other bindings or set to Unbound.

allActiveBindings :: (Show k, Ord k) => KeyConfig k -> k -> [Binding] Source #

Return all active key bindings for the specified event. This returns customized bindings if any have been set in the KeyConfig, no bindings if the event has been explicitly set to Unbound, or the default bindings if the event is absent from the customized bindings.

Misc

keyConfigEvents :: KeyConfig k -> KeyEvents k Source #

The base mapping of events and their names that is used in this configuration.

lookupKeyConfigBindings :: Ord k => KeyConfig k -> k -> Maybe BindingState Source #

Look up the binding state for the specified event. This returns Nothing when the event has no explicitly configured custom BindingState.