blob: b5b466cc097debcc9e891dc2d9208d74ddaa34d7 [file] [log] [blame] [edit]
~~~~~~~~
Profiles
~~~~~~~~
.. include:: prologue.rst
Description
===========
A profile is an activatable group of settings which explicitly override the
ones that were established via command line options, the configuration file
(``brltty.conf``), the preferences file (``brltty.prefs``), etc when BRLTTY
was invoked. Profiles must be placed in the ``/etc/brltty/Profiles/``
directory (see |README.Customize| for more details).
A profile must be encoded in UTF-8. Blank lines are ignored. If the first
non-whitespace character of a line is ``#`` then that line is a comment and is
ignored. The `Standard Directives`_ are supported. All other lines specify the
settings that are to be overridden, and must be in the form:
.. parsed-literal:: *name* *value*
Each type of profile has the following properties:
* A specific group of settings that it can override.
* Its own file extension.
* Its own selector within BRLTTY's Profiles submenu.
* Its own SET_*_PROFILE command for direct selection (see
`Profile Selection`_).
Supported Profile Types
-----------------------
Language Profiles
~~~~~~~~~~~~~~~~~
A language profile must have the ``.lpf`` file extension. It can override the
following settings:
* locale
* speech-driver
* speech-parameters
* text-table
* contraction-table
For example, a profile for the German language might look like this::
locale de_DE.UTF-8
speech-driver es
speech-parameters voice=de,maxrate=300
text-table de
contraction-table de-g2
All of the speech driver parameters must be specified on a single line, and be
separated from one another by a comma (``,``).
Profile Selection
-----------------
Each type of profile has a selector within BRLTTY's Profiles submenu. The
selector for a given profile type allows for setting that type of profile
either to ``off`` (which means "no profile") or to any of the files in the
``/etc/brltty/Profiles/`` directory which have the file extension for that type
of profile. The file names are sorted alphabetically.
If you'd like to select a profile directly (rather than use the Profiles
submenu) then you can define key bindings for the appropriate ``SET_*_PROFILE``
command. For example, if you'd like to directly select your language profile
then you'd define bindings for the ``SET_LANGUAGE_PROFILE`` command. You may
add your bindings either to the keyboard table that you're using or to the key
table for your braille device. Except for a few examples below, exactly how to
do this is beyond the scope of this document (see |README.KeyTables| for
details).
One approach is to define a single binding which involves a routing key. For
example::
bind Key1+Key2+RoutingKey SET_LANGUAGE_PROFILE
Using this paradigm, the leftmost routing key means to use no language profile,
and the next few routing keys select each of your language profiles in the same
order as they appear within the Language selector of the Profiles submenu.
Another approach is to define a specific binding for each language profile. For
example::
bind Key1+Key2 SET_LANGUAGE_PROFILE+0
bind Key1+Key3 SET_LANGUAGE_PROFILE+1
bind Key2+Key3 SET_LANGUAGE_PROFILE+2
bind Key1+Key2+Key3 SET_LANGUAGE_PROFILE+3
Using this paradigm, the binding for ``+0`` (Key1+Key2) means to use no
language profile, and the bindings for ``+1`` (Key1+Key3), ``+2`` (Key2+Key3),
etc select each of your language profiles in the same order as they appear
within the Language selector of the Profiles submenu.
A practical approach, which would make it easy to remember the bindings, might
be to use a keyboard table, and to use a simple key combination plus a
meaningful letter for each language name. Let's say that your primary language
is English, and that you also use French and German. In this case, your default
settings (no profile) would be for English, and you'd create french.lpf for
French and german.lpf for German. You could then define a set of bindings which
use ``e`` for English, ``f`` for French, and ``g`` for German. For example::
bind ShiftLeft+ShiftRight+!e SET_LANGUAGE_PROFILE+0
bind ShiftLeft+ShiftRight+!f SET_LANGUAGE_PROFILE+1
bind ShiftLeft+ShiftRight+!g SET_LANGUAGE_PROFILE+2
The ``+1`` binding would activate ``french.lpf`` and the ``+2`` binding would
activate ``german.lpf`` because that's how the profile name list would be
sorted. If, however, you choose to use the native language names then you'd
have ``deutsch.lpf`` for German and ``français.lpf`` for French. In this case,
you'd need a different set of bindings because ``deutsch.lpf`` (for German)
sorts before ``français.lpf`` (for French)::
bind ShiftLeft+ShiftRight+!e SET_LANGUAGE_PROFILE+0
bind ShiftLeft+ShiftRight+!d SET_LANGUAGE_PROFILE+1
bind ShiftLeft+ShiftRight+!f SET_LANGUAGE_PROFILE+2
When adding the bindings to a key table, they should most likely be defined
within the default context. The best way to ensure this is to add them at the
very end of the appropriate key table or subtable, and to add the ``context
default`` statement just before them. For example::
context default
bind Key1+RoutingKey SET_LANGUAGE_PROFILE
If you'd like your additional binding definitions to survive a BRLTTY reinstall
then you should use a customized key table or subtable (see |README.Customize|)
that includes the provided one, and then defines your additiional bindings.
Let's say that you'd like to add your bindings to the ``laptop`` keyboard table
(``laptop.ktb``). Create a file with the same name - ``laptop.ktb`` - in the
``/etc/xdg/brltty/`` directory, and, with an editor, make it look like this::
include laptop.ktb
context default
bind Key1+Key2+RoutingKey SET_LANGUAGE_PROFILE
Standard Directives
===================
.. include:: nesting-directives.rst
.. include:: variable-directives.rst
.. include:: condition-directives.rst