With the Simple Orca Plugin System (SOPS) you can extend the functionality of the Orca screen reader. It offers the possibility to add plug-ins in nearly any programming language in an easy way. The settings for the plug-ins are controlled via the filename.
To setup the plug-in system for the current user, run:
/usr/share/SOPS/install-for-current-user.shThis will create the directory ~/.config/SOPS and its subdirectories and enable three plugins: plugin_manager, workspacenumber and clipboard.
To open the plug-in manager use orca+ctrl+p while Orca
is running. It can be used to activate, deactivate, install or configure
plug-ins. Orca gets re-started automatically after closing the plug-in
manager.
/usr/share/SOPS/. It contains
the default plug-ins, the documentation,the plugin loader and the
administration tools:~/.config/SOPS/plugins-available/
~/.config/SOPS/plugins-enabled/
The tools are located in the "tools" folder beneath the installation directory. The following command enables/activates a plug-in, but you have to rename the filename to create a shortcut and pass a command to the plug-in:
$ /usr/share/SOPS/tools/enssop <pluginname>The command to disable and unload a plug-in is:
$ /usr/share/SOPS/tools/dissop <pluginname>Both commands basically just create or delete links in ~./.config/SOPSP/plugins-enabled
and make the plug-ins executable. You have to configure the plug-ins
manually. Restart Orca to reload the plug-ins after changes.
You can find some fully predefined example plugins in:
/usr/share/SOPS/examples and others in:
/usr/share/SOPS/plugins
The shortcut, plug-in type and preference of a plug-in are controlled
by its filename. The descriptive part of the filename has to be
separated from the preferences part with -. The commands,
modifier and the key has to be separated by +.
<description>__-__[<command>__+__command...][__+__<modifier>__+__<modifier>__+__key_<key>].extThere are two different ways to run a plug-in:
If none of those are present. the plug-in won't load. There are some more #Commands to control the behavior of a plug-in.
With modifiers you can set different shortcut combinations for a
key. You always have to press the Orca-modifier. The order
of the three modifier keys do not matter:
control is the modifier for the ctrl key
on the keyboardshift is the modifier for the shift key
on the keyboardalt is the modifier for the alt key on
the keyboardkey_<key> defines the basic shortcut that is
used for the plug-in, maybe together with the defined modifiers
(example_plugin-key_d.sh uses orca+d).Only a few combinations of modifiers are valid. Those are predefined by Orca. Valid combinations are:
alt i.e. description-alt+key_y.shcontrol i.e.
description-control+key_b.shshift i.e.
description-shift+key_c.shcontrol + alt i.e.
description-control+alt+key_w.pyshift + alt i.e.
description-shift+alt+key_y.shAs key_<key> you can use any alphanumerical
key.
Preferences for plug-ins are called commands. A command defines the action to pass to the plug-in. With commands you control the behaviour of the plug-ins. You may add more than one command. The order of the commands do not matter. You can use them for all kinds of plug-ins.
startnotify announces "start <description>"
before the plug-in is executed. It is useful as feedback for plug-ins
with longer progress times. (all plug-ins)stopnotify announces "finish <description>".
This is useful as feedback for plug-ins with no output. (all
plugins)blockcall do not start the plug-in in a thread. Be
careful, as this locks Orca until the plug-in is finished. By default,
plug-ins each run in a dedicated thread. (all plug-ins)error announces returned errors. (all plug-ins)supressoutput ignores the output of STDOUT. This is
useful for plugins that may have a UI and do not pass output to STDOUT.
(sub process plug-in only)parameters_<parameter1> [parameter2] [parameter3]...
passes the parameters to the plug-in. (sub process plug-in only)exec run the plug-in once while loading it. Mostly
useful as advanced-plug-in. (all plug-ins)loadmodule does not load as a sub process plug-in but
loads it as advanced plug-in. (advanced plug-in only)Plugin name-startnotify+control+alt+key_n.sh Run with
orca+ctrl+alt+n and announce the start of the process.PluginName-error+stopnotify+shift+key_y.py Run with
orca+shift+m and announce the finishing. Does also read
occurring errors .Plugin_Name-key_m.py Run with orca+mPlugin_Name-exec.py Run once at starting Orca.Basically there are two different types of plug-ins.
Sub process plug-ins are simple plug-ins of a default type. They may
be any type of application or script that writes to STDOUT or STDERR.
Orca executes the plug-in, reads from STDOUT/ STDERR and announces the
result to the user, when the defined shortcut is pressed or the plug-in
is executed via exec while starting the screen reader.
key_<key> or exec have to be
defined in the filename.Say "Hello World when pressing orca+y:
Filename:Hello_world-key_y.sh
#!/bin/sh
echo "Hello World"Those type of plug-ins are loaded with the spec.loader.exec_module.
you can load them by using loadmodule in the filename. They
are fully integrated into Orca as soon as it starts. Advanced plug-ins
are more powerful, because you are able to work in the Orca context.
They are mostly similar to the orca-customizations.py.
.pyloadmodule in the filenamekey_<key> or exec have to been
defined in filenameConfigure Orca to speak/braille the word "bang" instead of the "!"
while loading the plug-in.
Filename:replace_chnames-loadmodule+exec.py
#!/bin/python
import orca.orca
orca.chnames.chnames["!"] = "bang"You can also host plug-ins, making them available for installation via the plug-in manager. If you want to Host plug-ins, read:
/usr/share/SOPS/tools/hosting.txtThe default online resource is: https://wiki.archlinux.org/title/Simple_Orca_Plugin_System