~~~~~~~~~~
Key Tables
~~~~~~~~~~

.. include:: prologue.rst

Description
===========

Files with names of the form ``*.ktb`` are key tables, and with names of the
form ``*.kti`` are key subtables. They are used to bind braille device and
computer keyboard key combinations to BRLTTY commands.

*  Braille device key tables can usually be found in the
   ``/etc/brltty/Input/xx/`` directory, where ``xx`` is the two-letter braille
   driver identification code (see `Braille Driver List`_). The name of a
   braille device key table identifies the model(s) for which it is used. The
   driver selects which key table is to be used.

*  Computer keyboard key tables can usually be found in the
   ``/etc/brltty/Keyboard/`` directory. The name of a keyboard key table
   describes the kind of keyboard for which it has been designed. See
   `Keyboard Table List`_ for a list of BRLTTY's keyboard tables.

*  See |README.Customize| for more details regarding key table locations.

A key table consists of a sequence of directives, one per line, which define 
how keys and key combinations are to be interpreted. UTF-8 character encoding 
must be used. Whitespace (blanks, tabs) at the beginning of a line, as well as 
before and/or after any operand, is ignored. Lines containing only whitespace 
are ignored. If the first non-whitespace character of a line is ``#`` then
that line is a comment and is ignored.

The precedence for resolving each key press/release event is as follows:

1) A hotkey press or release defined within the current context.
2) A key combination defined within the current context.
3) A braille keyboard command defined within the current context.
4) A key combination defined within the default context.

Directives
==========

.. |key operand| replace::
   The name of the key whose availability is to be tested.

.. |platform operand| replace::
   The name of a host platform.
   The following platform names are recognized:
   android, apple, cygwin, dos, grub, linux,
   mingw32, mingw64, openbsd, sun, windows.

The Bind Directive
------------------

.. parsed-literal:: bind *keys* *commands*

Use this directive to define which BRLTTY command is executed when a particular
combination of keys is pressed. The binding is defined within the current
context.

*keys*
   The key combination which is to be bound. It's a sequence of one or more key
   and/or key group names separated by plus (``+``) signs. The final (or only)
   key name may be optionally prefixed with an exclamation (``!``) point. For
   example::

      key1
      group1
      key1+key2
      key1+key2+group1
      !group1
      key1+!key2

   A key group name refers to any key within the named group. A specific key
   within the group may be identified by appending a dot (``.``) and a number
   to the group's name. The first key within a group is key #1 (e.g.
   ``keyGroupName.1``).

   The keys may be pressed in any order, with the exception that if the final
   key name is prefixed with an exclamation point then it must be pressed last.
   The exclamation point prefix means that the primary command (see below) is
   executed as soon as that key is pressed. If not used, the primary command is
   executed as soon as any of the keys is released.

*commands*
   The primary and secondary BRLTTY commands that are to be bound to the key
   combination. The two commands (primary first and secondary last) are
   separated from one another by a colon (``:``). Both commands are optional.
   If just a primary command is being bound then the colon needn't be supplied.
   All of these are valid:

   *  bind key primaryCommand
   *  bind key primaryCommand:
   *  bind key primaryCommand:secondaryCommand
   *  bind key :secondaryCommand
   *  bind key :

   The primary command is executed as described above. The secondary command is
   executed if the key combination is held for a while (i.e. when a long key
   press is detected). If the **autorepeat** feature is enabled then the
   secondary command is autorepeated if it has been defined, else the primary
   command is autorepeated.

   For a list of commands, see |README.CommandReference|.

.. _Bind Command Modifiers:

One or more modifiers may be optionally appended to a command name by using a 
plus (``+``) sign as the separator. For example::

   bind key command
   bind key command+modifier1
   bind key command+modifier1+modifier2

For commands which enable/disable a feature:

*  If the modifier ``+on`` is specified then the feature is enabled.
*  If the modifier ``+off`` is specified then the feature is disabled.
*  If neither ``+on`` nor ``+off`` is specified then the state of the feature
   is toggled on/off.

For commands which move the braille window:

*  If the modifier ``+route`` is specified then, if necessary, the screen
   cursor is automatically routed so that it's always visible on the braille
   display.

For commands which move the braille window to a specific line on the screen:

*  If the modifier ``+toleft`` is specified then the braille window is also
   moved to the beginning of that line.
*  If the modifier ``+scaled`` is specified then the key group bound to the 
   command is interpreted as though it were a scroll bar. If it isn't
   specified then there's a one-to-one correspondence between keys and lines.

For commands which require an offset:

*  The modifier ``+offset``, where ``offset`` is a non-negative integer, may be
   specified. If it isn't specified then ``+0`` is assumed.

For commands which input any keyboard key (print or braille): 

*  The ``+shift`` modifier adds the shift key.
*  The ``+control`` modifier adds the control key.
*  The ``+meta`` modifier adds the left alt (or meta) key.
*  The ``+altgr`` modifier adds the right alt (or altgr) key.
*  The ``+gui`` modifier adds the gui (or windows) key.

For commands which input characters (print or braille):

*  The modifier ``+upper`` converts a lowercase character to uppercase.

For commands which input braille characters:

*  The modifiers ``+dot1`` through ``+dot8`` add those dots to the character.
*  The modifier ``+space`` adds the space bar (or "chord" key) to the
   character.

For commands which input keyboard scancodes:

*  The ``+release`` modifier means that it's a key release scancode. If it
   isn't specified then it's a key press scancode (unless, of course, the
   scancode itself indicates something else).
*  The ``+emul0`` modifier means that it's an emulation mode 0 scancode.
*  The ``+emul1`` modifier means that it's an emulation mode 1 scancode.

Examples::

   bind Key1 CSRTRK
   bind Key1+Key2 CSRTRK+off
   bind Key1+Key3 CSRTRK+on
   bind Key4 TOP
   bind Key5 TOP+route
   bind VerticalSensor GOTOLINE+toleft+scaled
   bind Key6 CONTEXT+context1

The Context Directive
---------------------

.. parsed-literal:: context *name* *title*

Use this directive to define alternate ways to interpret certain key events
and/or combinations.
Switching to another context is done via the BRLTTY command CONTEXT+name.

A context contains definitions created by any of:

*  `The Bind Directive`_
*  `The Hotkey Directive`_
*  `The Ignore Directive`_
*  `The Macro Directive`_
*  `The Map Directive`_
*  `The Run Directive`_
*  `The Superimpose Directive`_

*name*
   Which context subsequent definitions are to be created within.

*title*
   A person-readable description of the context. It may contain spaces.
   Standard capitalization conventions should be used. This operand is
   optional. If supplied when selecting a context which already has a title
   then the two must match. Special contexts already have internally-assigned
   titles.

A context is created the first time it's selected. It may be reselected any
number of times thereafter. These special contexts are predefined:

``default``
   The default context. If a definition can't be found within the current
   context then it's looked up within the default context. This only applies
   to definitions created by:

   *  `The Bind Directive`_.
   *  `The Macro Directive`_.
   *  `The Run Directive`_.

``menu``
   This context is used when within BRLTTY's Preferences Menu.

All subsequent definitions until either the next ``context`` directive or the
end of the current include level are created within the selected context. The 
initial context of the top-level key table is ``default``. The initial context
of an included key subtable is the context which was selected when it was 
included. Context changes within included key subtables don't affect the 
context of the including key table or subtable.

If a context has a title then it is persistent. When a key event causes a
persistent context to be activated, that context remains current until a
subsequent key event causes a different persistent context to be activated.

If a context doesn't have a title then it is temporary. When a key event causes
a temporary context to be activated, that context is only used to interpret the 
very next key event.

Examples::

   context menu
   context braille Braille Input
   context DESCCHAR

The Hide Directive
------------------

.. parsed-literal:: hide *state*

Use this directive to specify whether or not definitions created by:

*  `The Bind Directive`_
*  `The Hotkey Directive`_
*  `The Map Directive`_
*  `The Superimpose Directive`_

and text added by:

*  `The Note Directive`_

are to be included within the key table's help text.

*state*
   One of these keywords:

   ``on``
      They're excluded.
   ``off``
      They're included.

The specified hide state applies to all subsequent definitions and notes until 
either the next ``hide`` directive or the end of the current include level. The
initial hide state of the top-level key table is ``off``. The initial hide
state of an included key subtable is the hide state that was in effect when it
was included. Hide State changes within included key subtables don't affect the
hide state of the including key table or subtable.

Examples::

   hide on

The Hotkey Directive
--------------------

.. parsed-literal:: hotkey *key* *press* *release*

Use this directive to bind the press and release events of a specific key to
two separate BRLTTY commands. The bindings are defined within the current
context.

*key*
   The name of the key which is to be bound.

*press*
   The name of the BRLTTY command which is to be executed whenever the key is
   pressed.

*release*
   The name of the BRLTTY command which is to be executed whenever the key is
   released.

Modifiers may be appended to the command names. See
`Bind Command Modifiers`_ for details.

Specify the ``NOOP`` command if no command is to be executed. Specifying the
``NOOP`` command for both events effectively disables the key.

Examples::

   hotkey Key1 CSRVIS+off CSRVIS+on
   hotkey Key2 NOOP NOOP

The IfKey Directive
-------------------

.. parsed-literal:: ifKey *key* *directive*

Use this directive to only process one or more directives if the device has a
particular key.

*key*
   |key operand|

*directive*
   |directive operand|

Examples::

   ifKey Key1 ifkey Key2 bind Key1+Key2 HOME

The IfNotKey Directive
----------------------

.. parsed-literal:: ifNotKey *key* *directive*

Use this directive to only process one or more directives if the device doesn't
have a particular key.

*key*
   |key operand|

*directive*
   |directive operand|

Examples::

   ifNotKey Key2 bind Key1 HOME

The IfPlatform Directive
------------------------

.. parsed-literal:: ifPlatform *platform* *directive*

Use this directive to only process one or more directives if running on the
named host platform.

*platform*
   |platform operand|

*directive*
   |directive operand|

Examples::

   ifPlatform android include android.kti

The IfNotPlatform Directive
---------------------------

.. parsed-literal:: ifNotPlatform *platform* *directive*

Use this directive to only process one or more directives if not running on
the named host platform.

*platform*
   |platform operand|

*directive*
   |directive operand|

Examples::

   ifNotPlatform grub include advanced.kti

The Ignore Directive
--------------------

.. parsed-literal:: ignore *key*

Use this directive to ignore a specific key while within the current context.

*key*
   The name of the key which is to be ignored.

Examples::

   ignore Key1

The Isolated Directive
----------------------

.. parsed-literal:: isolated

Use this directive to isolate the current context.
If a key binding can't be found within an isolated context
then it won't be looked up within the default context.

Examples::

   isolated

The Macro Directive
-------------------

.. parsed-literal:: macro *keys* *command* ...

Use this directive to bind a sequence of BRLTY commands to a key combination.

*keys*
   The key combination being defined.

*command* ...
   The BRLTTY commands that are to be executed.

Examples::

   macro Key1+Key2 TOP LNEND

The Map Directive
-----------------

.. parsed-literal:: map *key* *function*

Use this directive to map a key to a braille keyboard function. The mapping is
defined within the current context.

*key*
   The name of the key that is to be mapped. More than one key may be mapped to
   the same braille keyboard function.

.. _The Map Function Operand:

*function*
   The name of the braille keyboard function. It may be one of the following
   keywords:

   ``DOT1``
      The upper-left standard braille dot key.
   ``DOT2``
      The middle-left standard braille dot key.
   ``DOT3``
      The lower-left standard braille dot key.
   ``DOT4``
      The upper-right standard braille dot key.
   ``DOT5``
      The middle-right standard braille dot key.
   ``DOT6``
      The lower-right standard braille dot key.
   ``DOT7``
      The lower-left computer braille dot key.
   ``DOT8``
      The lower-right computer braille dot key.
   ``SPACE``
      The space bar.
   ``SHIFT``
      The shift key.
   ``UPPER``
      If a lowercase letter is being entered then translate it to its
      uppercase equivalent.
   ``CONTROL``
      The control key.
   ``META``
      The left alt (or meta) key.
   ``ALTGR``
      The right alt (or altgr) key.
   ``GUI``
      The gui (or windows) key.

If a key combination consists only of keys which have been mapped to braille 
keyboard functions, and if those functions, when combined, form a valid braille 
keyboard command, then that command is executed as soon as any of the keys is 
released. A valid braille keyboard command must include either any combination 
of dot keys or the space bar (but not both). If at least one dot key is 
included then the braille keyboard functions specified by
`The Superimpose Directive`_ within the same context are also implicitly
included.

Examples::

   map Key1 DOT1

The Note Directive
------------------

.. parsed-literal:: note *text*

Use this directive to add a person-readable explanation to the key table's help
text. Notes are commonly used, for example, to describe the placement, sizes,
and shapes of the keys on the device.

*text*
   The explanation that is to be added. It may contain spaces, and should be
   grammatically correct.

Each note specifies exactly one line of explanatory text. Leading space is 
ignored so indentation cannot be specified.

There's no limit to the number of notes that may be added. All of them are 
gathered together and presented in a single block at the start of the key 
table's help text.

*  A note that doesn't have a special prefix begins a new outer bulleted list
   element.

*  A note that is prefixed with an asterisk (``*``) continues the current outer
   bulleted list element.

*  A note that is prefixed with a plus (``+``) sign is an inner bulletged list
   element.

Examples::

   note This is the first outer list element.
   note This is the second outer list element.
   note * Continue the second outer list element.
   note + The first element of an inner list.
   note + The second element of an inner list.
   note * The third line of the second outer list element.

The above example would be rendered as:

*  This is the first outer list element.

*  This is the second outer list element.
   Continue the second outer list element.

   +  The first element of an inner list.

   +  The second element of an inner list.

   The third line of the second outer list element.

The Run Directive
-----------------

.. parsed-literal:: run *keys* *name* [*argument* ...]

Use this directive to bind a host command to a key combination.

*keys*
   The key combination being defined.

<name*
   The name of the host command. It may also be the path.

*argument* ...
   The arguments to be passed to the host command.

Examples::

   run Key1+Key2 pkill --exact brltty

The Superimpose Directive
-------------------------

.. parsed-literal:: superimpose *function*

Use this directive to implicitly include a braille keyboard function whenever a
braille keyboard command consisting of at least one dot is executed. Only
implicit inclusions defined within the current context are performed. Any
number of these directives may be specified.

*function*
   The name of the braille keyboard function that is to be implicitly included.
   See `The Map Function Operand`_ for details.

Examples::

   superimpose DOT7

The Title Directive
-------------------

.. parsed-literal:: title <text>

Use this directive to specify a person-readable, one-line summary of the key
table's purpose.

*text*
   A brief summary of what the key table is used for. It may contain spaces,
   and standard capitalization conventions should be used.

The title of the key table may be specified only once.

Examples::

   title Bindings for Keypad-based Navigation

.. include:: nesting-directives.rst
.. include:: variable-directives.rst
.. include:: condition-directives.rst

Keyboard Table List
===================

.. csv-table::
   :header-rows: 1
   :file: keyboard-table.csv

Braille Driver List
===================

.. csv-table::
   :header-rows: 1
   :file: braille-driver.csv

