~~~~~~~~~~~~~~~~~~~~~~
Introduction to BRLTTY   
~~~~~~~~~~~~~~~~~~~~~~

.. include:: prologue.rst

You can look up a full listing of all of your braille device's key bindings at:
`<https://brltty.app/doc/KeyBindings/index.html>`_

With one exception, this document applies to using BRLTTY with any braille device.
The exception is that, when key bindings are given,
it assumes that the braille device has a braille keyboard.
If it doesn't, then, as mentioned above,
you can look up your device's corresponding key bindings online.

Many *chords* (combining a dot key combination with the Space key) are toggles.
Repeatedly pressing any of these key bindings alternately turns the corresponding feature on and off.
Adding the Dot7 key forces the feature to be turned off,
and adding the Dot8 key forces the feature to be turned on.

Useful Key Bindings
===================

Space + h (dots 125)
  Go to the help screen.
  It's a toggle, so pressing it again returns to the actual screen.
  This screen is only shown on the braille display.
  It contains a full listing of all of your braille device's key bindings.

Space + l (dots 123)
  Enter learn mode.
  It's a toggle, so pressing it again leaves learn mode.
  Additionally, if you don't do anything for 10 seconds then learn mode is automatically terminated.
  When in learn mode, pressing any key combination shows, on the braille display, what it'll do without actually doing it.

Space + p (dots 1234)
  Go to `the preferences menu`_.
  It's a toggle, so pressing it again returns to the actual screen.
  Adding the Dot8 key saves the current settings.
  Adding the Dot7 key restores the settings as of the most recent time that they were saved.

Space + g (dots 1245)
  Toggle between computer braille and contracted braille.
  Adding the Dot7 key forces computer braille,
  and adding the Dot8 key forces contracted braille.

Space + t (dots 2345)
  Toggle cursor tracking on/off.
  When cursor tracking is on, any motion of the cursor drags the braille display to the new screen location.

Space + i (dots 24)
  Toggle the skipping of identical lines on/off.
  This feature is especially useful for compressing multiple contiguous blank lines into a single one.

Space + b (dots 12)
  Toggle the skipping of blank braille windows on/off.
  This feature is especially useful for skipping over the blank ends of short lines when panning.

The Preferences Menu
====================

The preferences menu contains a lot of settings that let you customize how BRLTTY behaves.
It's internal to BRLTTY so it doesn't show up on the actual screen -
it's only presented on the braille display.

The Dot Keys
------------

The dot keys can be used to navigate the preferences menu:

Dots 1 and 4
  In the same way as they (when combined with the Space key) move the cursor up/down when using a conventional screen reader,
  these dot keys move up/down within the current submenu.
  In other words, Dot1 moves to the previous item and Dot4 moves to the next item.

Dots 3 and 6
  In a similar way to how they (when combined with the Space key) move the cursor left/right when using a conventional screen reader,
  these dot keys select the previous/next possible setting for the current item.
  The setting choices wrap,
  so Dot3, when the first choice is selected, wraps to the last one,
  and Dot6, when the last choice is selected, wraps to the first one.

Dot 2
  Move to the first item.

Dot 5
  Move to the last item.

Dot 7
  Go up one submenu level.
  If in the main menu then exit and return to the actual screen.

Dot 8
  Exit and return to the actual screen.

The Routing Keys
----------------

The routing keys can be used to change the setting for the current item:

* If the setting is a discrete set of choices, e.g. ``Yes`` or ``No``,
  then each successive group of routing keys selects those choices.
  For example:

  * If there are two choices
    then keys 1,3,5,... select the first one
    and keys 2,4,6,... select the second one.

  * If there are three choices
    then keys 1,4,7,... select the first one,
    keys 2,5,8,... select the second one,
    and keys 3,6,9,... select the third one.

* If the setting is a number then the routing keys behave like a scroll bar.

  * The leftmost key selects the lowest possible value.
  * The rightmost key selects the highest possible value.
  * The inner keys select an evenly distributed value within the range.

Exiting the Preferences Menu
----------------------------

These are the ways to exit the preferences menu:

Dot7
  Go up one level when in the main menu.

Dot8
  Exit the preferences menu.

Space + p  (dots 1234)
  Preferences Menu enter/exit toggle.

Space + p (dots 1234) + Dot8
  Save the current settings.

None of these methods close `Submenus`_.
This means that going back to the preferences menu later resumes at the same place.

The ``Save on Exit`` item is at the top of the main menu.
It specifies whether or not (``Yes`` or ``No``)
the current settings are to be saved when exiting the preferences menu.
If it's set to ``No`` then you can still manually save the current settings with Space + p (dots 1234) + Dot8.

Submenus
--------

The preferences menu is a tree structure of menus.
The one at the root (or top) is known as the main menu.

If an item ends with an ASCII right arrow (``-->``)
then it's the name of a submenu.
For example::

  Braille Presentation -->

Pressing Dot3, Dot6, or any routing key on this kind of item opens the submenu.
If it's closed then the braille display is placed on the first item.
If it's open then the braille display is placed on the current item.

The first item of each submenu always is
an ASCII left arrow (``<--``),
followed by the word ``Close``,
followed by the name of the submenu.
For example::

  <-- Close Braille Presentation

Pressing Dot3, Dot6, or any routing key on this kind of item closes the submenu.

Another way to leave a submenu is to press Dot7.
Leaving a submenu this way leaves it open.

Additional Notes
----------------

The default is that only relevant items are shown.
In the Braille Presentation submenu, for example,
Computer Braille Cell Type is only shown when Braille Variant is set to Computer,
and Expand Current Word is only shown when Braille Variant is set to Contracted.
This can be changed by setting Show All Items (in the Menu Options submenu) to Yes.

Table selection changes are currently not saved along with the other settings.
These include:

* The current text (computer braille) table.
* The current attributes table.
* The current contraction table.
* The current keyboard table.

The Braille Keyboard
====================

Dots 7 and 8
------------

Dots 7 and 8 are special because
the Dot7 key is Backspace and the Dot8 key is Enter.
If either of these keys is pressed together with other dot keys then it functions as itself.
If you need to type either just dot 7 or just dot 8
then combine the corresponding key with the Space key.
So:

Dot7
  Press the Backspace key.

Dot8
  Press the Enter key.

Space + Dot7
  Type dot 7.

Space + Dot8
  Type dot 8.

Typing
------

Characters are typed by pressing either the Space key or any combination of the dot keys.
This can be disabled in order to avoid inadvertently typing a character by accidentally pressing keyboard keys.

Space + Dots13 + Dot7
  Disable typing.

Space + Dots13 + Dot8
  Enable typing.

The following typing modes are supported:

Space + Dots46 + Dot7
  Switch to interpreting the characters being typed as regular text.
  The dot combination is back-translated through the currently selected text (computer braille) table.
  This is the default.

Space + Dots46 + Dot8
  Switch to interpreting the characters being typed as Unicode braille patterns.

Special Keys
------------

The special keys on a normal keyboard can be individually pressed as follows:

Space + Dots45 (conventional screen reader binding)
  The Forward Tab key.

Space + Dot3 (conventional screen reader binding)
  The Cursor Left key.

Space + Dot6 (conventional screen reader binding)
  The Cursor Right key.

Space + Dot1 (conventional screen reader binding)
  The Cursor Up key.

Space + Dot4 (conventional screen reader binding)
  The Cursor Down key.

Space + Dots23 (conventional screen reader binding)
  The Page Up key.

Space + Dots56 (conventional screen reader binding)
  The Page Down key.

Space + Dot2
  The Home key.

Space + Dot5
  The End key.

Space + Dots35 (low i)
  The Insert key.

Space + Dots256 (low d)
  The Delete key.

Space + Dots26 (low e)
  The Escape key.

Space + a routing key
  In most cases, a function key can be pressed by pressing the corresponding routing key along with the Space key.
  For example, the ``F1`` key can be pressed by pressing Space + the leftmost routing key.

Modifier Keys
-------------

A subset of the modifier keys, the most common being Control and Left Alt, have been defined for most braille devices.
Especially for those braille devices for which no modifier keys have been defined,
but also for those for which only some of them have been defined,
a general scheme for supporting sticky modifiers is provided.

The key combinations for these modifiers all consist of Space + Dot8 + one of the other dot keys.
They are as follows:

Space + Dot8 + Dot1
  The GUI (Windows, Command) key.

Space + Dot8 + Dot4
  The Shift key.

Space + Dot8 + Dot2
  The Left Alt (Meta) key.

Space + Dot8 + Dot5
  The Right Alt (AltGr) key.

Space + Dot8 + Dot3
  The Control key.

Space + Dot8 + Dot6
  The Uppercase key.

Space + Dot8 + Dot7
  Unlock and clear all of the modifiers.
  This is especially useful when you forget how the various modifiers have been set.

Each modifier can be cycled through these three states:

First Press
  Temporarily set the modifier.
  It'll only apply to the next typed character.

Second Press
  Lock the modifier.
  It'll apply to all typed characters until it's cleared.

Third Press
  Unlock and clear the modifier.

What does BRLTTY mean?
======================

Since people are asking, let's answer it here.

The ``BRL`` part means **braille**.
The ``TTY`` part actually does mean **tty**, which needs a bit of an explanation.
The most important thing to know, though, is that it has nothing at all to do with the ``tty`` devices that deaf people use to communicate over phone lines.

BRLTTY began its life on the Linux platform.
That platform has virtual consoles, which, among other things,
allow multiple, simultaneous login sessions.
These virtual consoles, way back in the early days, emulated serially-connected terminals.
They can still do that, of course, but, these days, they can do a whole lot more.

Serially-connected terminals, especially those that used paper (as opposed to a screen), were commonly known as teletypes (or teletypewriters).
That's where the term ``tty`` comes from.
This may well also be the reason that the devices that deaf people use to communicate over hone lines are called ``ttys``,
i.e. they, too, behave very much like serially-connected terminals.

For a historical perspective regarding the term ``tty``, you might read:
`<https://en.wikipedia.org/wiki/Teleprinter>`_

