diff --git a/docu/fenrir.1 b/docu/fenrir.1 new file mode 100644 index 00000000..520360a0 --- /dev/null +++ b/docu/fenrir.1 @@ -0,0 +1,2764 @@ +.\"t +.\" Automatically generated by Pandoc 1.19.2.1 +.\" +.TH "" "" "" "" "" +.hy +.SH Fenrir User Manual +.PP +Fenrir is a modern command line screen reader written in Python3. +.PP +It has a modular structure, a flexible based driver model, is highly +configurable and easy to customize and extend (see Developer +Manual (fenrir_development_manual)). +.PP +Please see the following pages for the current (fenrir_current_version) +and Git (fenrir_git_version) version of Fenrir. +.SH Support and Requirements +.PP +Fenrir requires several drivers to interact with the operating system. +.SS Speech Drivers +.PP +A speech driver is for communication with the text to speech system like +Speech\-Dispatcher (#SpeechDispatcher) or +Espeak (http://espeak.sourceforge.net). +\\ See section Speech (#Speech) in \[aq]\[aq]settings.conf\[aq]\[aq] for +more information. +.SS SpeechDispatcher +.PP +This driver is used by default. +It uses Speech\-dispatcher as its backend. +.PP +Dependencies: +.IP \[bu] 2 +Speech\-dispatcher (installed and configured, +Documentation (https///devel.freebsoft.org/speechd#sec2)) +.IP \[bu] 2 +Python\-speechd +.SS Espeak +.PP +Uses Espeak via Python bindings. +.PP +Dependencies: +.IP \[bu] 2 +Espeak or Espeak\-ng +.IP \[bu] 2 +python\-espeak (https///launchpad.net/python-espeak) +.SS Generic +.PP +This invokes speech via a sub\-process. +This is almost the same as using the commandline. +The performance depends on the overhead of the speech synthesis +application but it is really flexible. +.PP +Dependencies: +.IP \[bu] 2 +Espeak or Espeak\-ng +.PP +The Requirements are flexible, they depend on the configuration in +settings.conf. +.SS Dummy +.PP +this is just for debugging, logs are output to the screen and logged as +well. +.SS Sound Drivers +.PP +To play sound icons and similar.\\ See section Sound (#Sound) in +\[aq]\[aq]settings.conf\[aq]\[aq] for more information. +.SS Generic +.PP +This driver is used by default. +.PP +Dependencies: +.IP \[bu] 2 +Sox (http://sox.sourceforge.net/) with opus support The Requirements are +flexible, they depend on the configuration in settings.conf. +.SS Gstreamer +.PP +if you prefer to use Gstreamer for sound output. +.PP +Dependencies: +.IP \[bu] 2 +Gstreamer >= 1.x +.IP \[bu] 2 +Glibc +.SS Dummy +.PP +this is just for debugging, logs are output to the screen and logged as +well. +.SS Input Drivers +.PP +Input drivers are to capture keyboard shortcuts issued to the screen +reader +.PD 0 +.P +.PD +See section Keyboard (#Keyboard) in \[aq]\[aq]settings.conf\[aq]\[aq] +for more information. +.SS Evdev +.PP +This driver is used by default. +.PP +Evdev is the low level input device framework for Linux. +.PP +Dependencies: +.IP \[bu] 2 +python\-evdev >=0.6.3 +.IP \[bu] 2 +pyudev +.IP \[bu] 2 +loaded uinput kernel module +.IP \[bu] 2 +exclusive access to the input devices Read permission to the following +files and services: +.IP \[bu] 2 +/dev/input +.IP \[bu] 2 +/dev/uinput +.SS Screen Drivers +.PP +The job of a screen driver is to get the information of current screen +content.\\ See section Screen (#Screen) in +\[aq]\[aq]settings.conf\[aq]\[aq] for more information. +.SS VCSA +.PP +This driver is used by default. +For Linux VCSA devices. +These exist on any current standard installation of Linux. +.PP +Dependencie s: +.IP \[bu] 2 +python\-dbus Read permission to the following files and services (or run +as root): +.IP \[bu] 2 +/sys/devices/virtual/tty/tty0/active +.IP \[bu] 2 +/dev/tty[1 \- 64] +.IP \[bu] 2 +/dev/vcsa[1 \- 64] (VCSA manpage (https///linux.die.net/man/4/vcsa)) +.IP \[bu] 2 +read Logind DBUS +.SS Braille Drivers +.PP +This is for Braille support. +Braille is currently a work in progress and is planned for the Fenrir +2.0 release.\\ See section Braille (#Braille) in +\[aq]\[aq]settings.conf\[aq]\[aq] for more information. +.SS BRLTTY +.PP +This driver is used by default. +It uses BrlTTY (brltty) to communicate with with a Braille device. +.PP +Dependencies: +.IP \[bu] 2 +BrlTTY (configured and running, +Documentation (http://mielke.cc/brltty/doc/Manual-BRLTTY/English/BRLTTY.html)) +.IP \[bu] 2 +python\-brlapi (configured, +Documentation (http://mielke.cc/brltty/doc/Manual-BrlAPI/English/BrlAPI.html)) +## Currently supported platforms +.PP +Currently Fenrir completely supports the following Platforms: +.IP \[bu] 2 +Linux TTY Support for further Systems are planned. +.SH Installation +.PP +Fenrir can run without installation. +It just requires the dependencies are installed first. +.PP +We recommend to try it out before installation to be sure everything +works and prevent yourself from experiencing a non\-talking environment. +.SS Try Out +.PP +Fenrir does not require installation. +You can try it and make sure everything works before you decide to +install. +In this way you can be sure that your system doesnt break or stop +talking. +for that you can just grab the code and run as root +\[aq]\[aq]src/fenrir/fenrir\[aq]\[aq] (in foreground) or +\[aq]\[aq]src/fenrir/fenrir\-daemon\[aq]\[aq] (in background, used by +systemd for autostart) +.SS Install it +.SS Documented operating systems +.SS Arch Linux +.PP +For Arch there are PKGBUILDs in the AUR: +.IP \[bu] 2 +fenrir (https///aur.archlinux.org/packages/fenrir/) +.IP \[bu] 2 +fenrir\-git (https///aur.archlinux.org/packages/fenrir-git/) +.SS Manual +.IP "1." 3 +Download the latest stable version from the +Fenrir\-Project (https///linux-a11y.org/index.php?page=fenrir-screenreader) +site. +.IP "2." 3 +Unpack the archive +.IP "3." 3 +Check the needed Dependencys by running +check\-dependencys.py (https///github.com/chrys87/fenrir/blob/master/check-dependencies.py) +script +.IP "4." 3 +install the missing dependencies an standard installation requires the +following: +.RS 4 +.IP \[bu] 2 +python3 >= 3.3 (and all the following is needed for python3 ) +.IP \[bu] 2 +python3\-speechd (screen) +.IP \[bu] 2 +python3\-dbus (screen) +.IP \[bu] 2 +python3\-evdev >= 0.6.4(input) +.IP \[bu] 2 +python3\-daemonize (background service) +.IP \[bu] 2 +python3\-brlapi (braille) +.IP \[bu] 2 +python3\-pyenchant (spellchecker) +.IP \[bu] 2 +your language for aspell (aspell\-\f[C]\f[]) (spellchecker) +.IP \[bu] 2 +sox (sound) +.IP \[bu] 2 +For an individual installation see Support and +Requirements (#Support%20and%20Requirements) or consult the +Readme (https///github.com/chrys87/fenrir/blob/master/README.md)) +.RE +.IP "5." 3 +run "install.sh" as root +.PP +this installs Fenrir as the following +.IP +.nf +\f[C] +*\ Application:\[aq]\[aq]/opt/fenrir\[aq]\[aq] +*\ Settings:\[aq]\[aq]/etc/fenrir\[aq]\[aq] +*\ Sound\ Icons:\[aq]\[aq]/usr/share/fenrir/\[aq]\[aq] +\f[] +.fi +.PP +to remove Fenrir just run uninstall.sh as root +.SS Git +.PP +if you want to get the latest code you can use git to get a development +snapshot: +.IP +.nf +\f[C] +git\ clone\ https://github.com/chrys87/fenrir.git +\f[] +.fi +.SS Auto Start +.PP +To start Fenrir once: systemctl start fenrir +.PP +To enable auto start on system boot: systemctl enable fenrir +.SH First Steps +.PP +If you are using Fenrir for the first time you may want to take a look +at these resources: +.IP \[bu] 2 +Keybindings (#Keybindings) +.IP \[bu] 2 +Tutorial Mode (#Tutorial%20Mode) +.SH Features +.SS Commands +.SS Keybindings +.PP +Normal commands can be invoked in two ways: 1. +Using a Metakey (FenrirKey (#Fenrir%20Key)) 2. +Shortcuts with a single key +.PP +See section Keyboard (#Keyboard) in \[aq]\[aq]settings.conf\[aq]\[aq] +for more information. +#### Fenrir Key +.PP +The Fenrir Key is for invoking screen reader commands. +Fenrir can utilize more than one FenrirKey at the same time. +By default the following keys are used: 1. +Insert 2. +KeyPad Insert 3. +Meta (Super, Windows) +.SS Script Key +.PP +To invoke "Scripts" the Script Key is mandatory. +The shortcut is encoded in the filename of the script. +See Scripting (#Scripting) #### Desktop Layout +.PP +.TS +tab(@); +l l. +T{ +Shortcut +T}@T{ +Command +T} +_ +T{ +FenrirKey + H +T}@T{ +toggle tutorial mode (#Tutorial%20Mode) +T} +T{ +CTRL +T}@T{ +shut up (interrupts speech) (#shut%20up) +T} +T{ +FenrirKey + KeyPad 9 +T}@T{ +reviews bottom (#review%20bottom) +T} +T{ +FenrirKey + KeyPad 7 +T}@T{ +reviews top (#review%20top) +T} +T{ +KeyPad 8 +T}@T{ +reviews current line (#review%20current%20line) +T} +T{ +KeyPad 7 +T}@T{ +reviews previous line (#review%20previous%20line) +T} +T{ +KeyPad 9 +T}@T{ +reviews next line (#review%20next%20line) +T} +T{ +FenrirKey + KeyPad 4 +T}@T{ +reviews line beginning (#review%20line%20beginning) +T} +T{ +FenrirKey + KeyPad 6 +T}@T{ +reviews line ending (#review%20line%20ending) +T} +T{ +FenrirKey + KeyPad 1 +T}@T{ +reviews line first character (#review%20line%20first%20character) +T} +T{ +FenrirKey + KeyPad 3 +T}@T{ +reviews line last character (#review%20line%20last%20character) +T} +T{ +FenrirKey + Alt + 1 +T}@T{ +presents first line (#present%20first%20line) +T} +T{ +FenrirKey + Alt + 2 +T}@T{ +presents last line (#present%20last%20line) +T} +T{ +KeyPad 5 +T}@T{ +reviews current word (#review%20current%20word) +T} +T{ +KeyPad 4 +T}@T{ +reviews previous word (#review%20previous%20word) +T} +T{ +KeyPad 6 +T}@T{ +reviews next word (#review%20next%20word) +T} +T{ +FenrirKey + Shift + KeyPad 5 +T}@T{ +reviews current word phonetic (#review%20current%20word%20phonetic) +T} +T{ +FenrirKey + Shift + KeyPad 4 +T}@T{ +reviews previous word phonetic (#review%20previous%20word%20phonetic) +T} +T{ +FenrirKey + Shift + KeyPad 6 +T}@T{ +reviews next word phonetic (#review%20next%20word%20phonetic) +T} +T{ +KeyPad 2 +T}@T{ +reviews current char (#review%20current%20character) +T} +T{ +KeyPad 1 +T}@T{ +reviews previous char (#review%20previous%20character) +T} +T{ +KeyPad 3 +T}@T{ +reviews next char (#review%20next%20character) +T} +T{ +FenrirKey + Shift + KeyPad 2 +T}@T{ +reviews current character +phonetic (#review%20current%20character%20phonetic) +T} +T{ +FenrirKey + Shift + KeyPad 1 +T}@T{ +reviews previous character +phonetic (#review%20previous%20character%20phonetic) +T} +T{ +FenrirKey + Shift + KeyPad 3 +T}@T{ +reviews next character phonetic (#review%20next%20character%20phonetic) +T} +T{ +FenrirKey + CTRL + KeyPad 8 +T}@T{ +reviews up (#review%20up) +T} +T{ +FenrirKey + CTRL + KeyPad 2 +T}@T{ +reviews down (#review%20down) +T} +T{ +FenrirKey + KeyPad dot +T}@T{ +exit review (#exit%20review) +T} +T{ +KeyPad dot +T}@T{ +cursor position (#cursor%20position) +T} +T{ +FenrirKey + I +T}@T{ +indent curr line (#indent%20current%20line) +T} +T{ +FenrirKey + KeyPad 5 +T}@T{ +current screen (#current%20screen) +T} +T{ +FenrirKey + KeyPad 8 +T}@T{ +current screen before cursor (#current%20screen%20before%20cursor) +T} +T{ +FenrirKey + KeyPad 2 +T}@T{ +current screen after cursor (#current%20screen%20after%20cursor) +T} +T{ +\f[C]\f[] +T}@T{ +cursor read to end of line (#cursor%20read%20to%20end%20of%20line) +T} +T{ +\f[C]\f[] +T}@T{ +cursor column (#cursor%20column) +T} +T{ +\f[C]\f[] +T}@T{ +cursor line number (#cursor%20line%20number) +T} +T{ +\f[C]\f[] +T}@T{ +Braille flush (#braille%20flush) +T} +T{ +\f[C]\f[] +T}@T{ +Braille pan left (#braille%20pan%20left) +T} +T{ +\f[C]\f[] +T}@T{ +Braille pan right (#braille%20pan%20right) +T} +T{ +\f[C]\f[] +T}@T{ +Braille return to cursor (#braille%20return%20to%20cursor) +T} +T{ +FenrirKey + CTRL + 1 +T}@T{ +clear bookmark 1 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 1 +T}@T{ +set bookmark 1 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 1 +T}@T{ +bookmark 1 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 2 +T}@T{ +clear bookmark 2 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 2 +T}@T{ +set bookmark 2 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 2 +T}@T{ +bookmark 2 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 3 +T}@T{ +clear bookmark 3 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 3 +T}@T{ +set bookmark 3 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 3 +T}@T{ +bookmark 3 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 4 +T}@T{ +clear bookmark 4 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 4 +T}@T{ +set bookmark 4 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 4 +T}@T{ +bookmark 4 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 5 +T}@T{ +clear bookmark 5 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 5 +T}@T{ +set bookmark 5 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 5 +T}@T{ +bookmark 5 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 6 +T}@T{ +clear bookmark 6 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 6 +T}@T{ +set bookmark 6 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 6 +T}@T{ +bookmark 6 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 7 +T}@T{ +clear bookmark 7 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 7 +T}@T{ +set bookmark 7 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 7 +T}@T{ +bookmark 7 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 8 +T}@T{ +clear bookmark 8 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 8 +T}@T{ +set bookmark 8 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 8 +T}@T{ +bookmark 8 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 9 +T}@T{ +clear bookmark 9 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 9 +T}@T{ +set bookmark 9 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 9 +T}@T{ +bookmark 9 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 0 +T}@T{ +clear bookmark 10 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 0 +T}@T{ +set bookmark 10 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 0 +T}@T{ +bookmark 10 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + KeyPad Slash +T}@T{ +set window application (#Create%20Window) +T} +T{ +2 * FenrirKey + KeyPad Slash +T}@T{ +clear window application (#Remove%20Window) +T} +T{ +KeyPad Plus +T}@T{ +read last incoming (#last%20incoming) +T} +T{ +FenrirKey + F2 +T}@T{ +toggles braille (#toggle%20braille) +T} +T{ +FenrirKey + F3 +T}@T{ +toggles sound (#toggle%20sound) +T} +T{ +FenrirKey + F4 +T}@T{ +toggles speech (#toggle%20speech) +T} +T{ +KeyPad Enter +T}@T{ +temporarily disables speech (#disable%20speech%20temporarily) +T} +T{ +FenrirKey + CTRL + P +T}@T{ +toggles punctuation level (#toggle%20punctuation%20level) +T} +T{ +FenrirKey + RightBrace +T}@T{ +toggle auto spell check (#toggle%20auto%20spell%20check) +T} +T{ +FenrirKey + Backslash +T}@T{ +toggles output (#toggle%20output) +T} +T{ +FenrirKey + CTRL + E +T}@T{ +toggles emoticons (#toggle%20emoticons) +T} +T{ +FenrirKey + KeyPad Enter +T}@T{ +toggles auto read (#toggle%20auto%20read) +T} +T{ +FenrirKey + CTRL + T +T}@T{ +toggles auto time (#toggle%20auto%20time) +T} +T{ +FenrirKey + KeyPad ASTERISK +T}@T{ +toggles highlight tracking (#toggle%20highlight%20tracking) +T} +T{ +FenrirKey + Q +T}@T{ +quits fenrir (#quit%20Fenrir) +T} +T{ +FenrirKey + T +T}@T{ +Announce time (#Time) +T} +T{ +2 * FenrirKey + T +T}@T{ +Announce date (#Date) +T} +T{ +FenrirKey + S +T}@T{ +spell check (#spell%20check) +T} +T{ +2 * FenrirKey + S +T}@T{ +add word to spell check (#add%20word%20to%20spell%20check) +T} +T{ +FenrirKey + Shift + S +T}@T{ +removes word from spell check (#removes%20word%20from%20spell%20check) +T} +T{ +FenrirKey + Backspace +T}@T{ +forward keypress (#forward%20keypress) +T} +T{ +FenrirKey + Up +T}@T{ +increase speech volume (#increase%20speech%20volume) +T} +T{ +FenrirKey + Down +T}@T{ +decrease speech volume (#decrease%20speech%20volume) +T} +T{ +FenrirKey + Right +T}@T{ +increase speech rate (#increase%20speech%20rate) +T} +T{ +FenrirKey + Left +T}@T{ +decrease speech rate (#decrease%20speech%20rate) +T} +T{ +FenrirKey + Alt + Right +T}@T{ +increase speech pitch (#increase%20speech%20pitch) +T} +T{ +FenrirKey + Alt + Left +T}@T{ +decrease speech pitch (#decrease%20speech%20pitch) +T} +T{ +FenrirKey + Alt + Up +T}@T{ +increase sound volume (#increase%20sound%20volume) +T} +T{ +FenrirKey + Alt + Down +T}@T{ +decrease sound volume (#decrease%20sound%20volume) +T} +T{ +FenrirKey + CTRL + Shift + C +T}@T{ +clears clipboard (#clear%20clipboard) +T} +T{ +FenrirKey + Home +T}@T{ +first clipboard (#first%20clipboard) +T} +T{ +FenrirKey + End +T}@T{ +last clipboard (#last%20clipboard) +T} +T{ +FenrirKey + PageUp +T}@T{ +previous clipboard (#previous%20clipboard) +T} +T{ +FenrirKey + PageDown +T}@T{ +next clipboard (#next%20clipboard) +T} +T{ +FenrirKey + Shift + C +T}@T{ +current clipboard (#read%20current%20clipboard) +T} +T{ +FenrirKey + C +T}@T{ +copy marked text to clipboard (#copy%20marked%20to%20clipboard) +T} +T{ +FenrirKey + V +T}@T{ +paste clipboard contents (#paste%20clipboard) +T} +T{ +FenrirKey + P +T}@T{ +import clipboard from file (#import%20clipboard%20from%20file) +T} +T{ +FenrirKey + Alt + Shift +C +T}@T{ +export clipboard to file (#export%20clipboard%20to%20file) +T} +T{ +FenrirKey + CTRL + Shift + X +T}@T{ +remove marks (#Remove%20Marks) +T} +T{ +FenrirKey + X +T}@T{ +set mark (#Set%20mark) +T} +T{ +FenrirKey + Shift + X +T}@T{ +announce marked text (#Get%20text%20between%20marks) +T} +T{ +Linux specific +T}@T{ +T} +T{ +\f[C]\f[] +T}@T{ +export clipboard to X +T} +T{ +FenrirKey + CTRL + Up +T}@T{ +include Alsa volume +T} +T{ +FenrirKey + CTRL + Down +T}@T{ +decrease Alsa volume +T} +.TE +.SS Laptop Layout +.PP +.TS +tab(@); +l l. +T{ +Shortcut +T}@T{ +Command +T} +_ +T{ +FenrirKey + H +T}@T{ +toggle tutorial mode (#Tutorial%20Mode) +T} +T{ +CTRL +T}@T{ +shut up (interrupts speech) (#shut%20up) +T} +T{ +FenrirKey + Shift + O +T}@T{ +reviews bottom (#review%20bottom) +T} +T{ +FenrirKey + Shift + U +T}@T{ +reviews top (#review%20top) +T} +T{ +FenrirKey + I +T}@T{ +reviews current line (#review%20current%20line) +T} +T{ +FenrirKey + U +T}@T{ +reviews previous line (#review%20previous%20line) +T} +T{ +FenrirKey + O +T}@T{ +reviews next line (#review%20next%20line) +T} +T{ +FenrirKey + Shift + J +T}@T{ +reviews line beginning (#review%20line%20beginning) +T} +T{ +FenrirKey + Shift + L +T}@T{ +reviews line ending (#review%20line%20ending) +T} +T{ +FenrirKey + CTRL + J +T}@T{ +reviews line first character (#review%20line%20first%20character) +T} +T{ +FenrirKey + CTRL + L +T}@T{ +reviews line last character (#review%20line%20last%20character) +T} +T{ +FenrirKey + Alt + 1 +T}@T{ +presents first line (#present%20first%20line) +T} +T{ +FenrirKey + Alt + 2 +T}@T{ +presents last line (#present%20last%20line) +T} +T{ +FenrirKey + K +T}@T{ +reviews current word (#review%20current%20word) +T} +T{ +FenrirKey + J +T}@T{ +reviews previous word (#review%20previous%20word) +T} +T{ +FenrirKey + L +T}@T{ +reviews next word (#review%20next%20word) +T} +T{ +FenrirKey + CTRL + ALT + K +T}@T{ +reviews current word phonetic (#review%20current%20word%20phonetic) +T} +T{ +FenrirKey + CTRL + ALT + J +T}@T{ +reviews previous word phonetic (#review%20previous%20word%20phonetic) +T} +T{ +FenrirKey + CTRL + ALT + L +T}@T{ +reviews next word phonetic (#review%20next%20word%20phonetic) +T} +T{ +FenrirKey + comma +T}@T{ +reviews current character (#review%20current%20character) +T} +T{ +FenrirKey + M +T}@T{ +reviews previous character (#review%20previous%20character) +T} +T{ +FenrirKey + dot +T}@T{ +reviews next character (#review%20next%20character) +T} +T{ +FenrirKey + CTRL + ALT + comma +T}@T{ +reviews current character +phonetic (#review%20current%20character%20phonetic) +T} +T{ +FenrirKey + CTRL + ALT + M +T}@T{ +reviews previous character +phonetic (#review%20previous%20character%20phonetic) +T} +T{ +FenrirKey + CTRL + ALT + dot +T}@T{ +reviews next character phonetic (#review%20next%20character%20phonetic) +T} +T{ +FenrirKey + CTRL + I +T}@T{ +reviews up (#review%20up) +T} +T{ +FenrirKey + CTRL + comma +T}@T{ +reviews down (#review%20down) +T} +T{ +FenrirKey + Slash +T}@T{ +exit review (#exit%20review) +T} +T{ +FenrirKey + Shift + dot +T}@T{ +cursor position (#cursor%20position) +T} +T{ +2 * FenrirKey + I +T}@T{ +indent curr line (#indent%20current%20line) +T} +T{ +FenrirKey + Shift + K +T}@T{ +current screen (#current%20screen) +T} +T{ +FenrirKey + Shift + I +T}@T{ +current screen before cursor (#current%20screen%20before%20cursor) +T} +T{ +FenrirKey + Shift + comma +T}@T{ +current screen after cursor (#current%20screen%20after%20cursor) +T} +T{ +\f[C]\f[] +T}@T{ +cursor read to end of line (#cursor%20read%20to%20end%20of%20line) +T} +T{ +\f[C]\f[] +T}@T{ +cursor column (#cursor%20column) +T} +T{ +\f[C]\f[] +T}@T{ +cursor line number (#cursor%20line%20number) +T} +T{ +\f[C]\f[] +T}@T{ +Braille flush (#braille%20flush) +T} +T{ +\f[C]\f[] +T}@T{ +Braille pan left (#braille%20pan%20left) +T} +T{ +\f[C]\f[] +T}@T{ +Braille pan right (#braille%20pan%20right) +T} +T{ +\f[C]\f[] +T}@T{ +Braille return to cursor (#braille%20return%20to%20cursor) +T} +T{ +FenrirKey + CTRL + 1 +T}@T{ +clear bookmark 1 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 1 +T}@T{ +set bookmark 1 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 1 +T}@T{ +bookmark 1 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 2 +T}@T{ +clear bookmark 2 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 2 +T}@T{ +set bookmark 2 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 2 +T}@T{ +bookmark 2 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 3 +T}@T{ +clear bookmark 3 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 3 +T}@T{ +set bookmark 3 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 3 +T}@T{ +bookmark 3 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 4 +T}@T{ +clear bookmark 4 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 4 +T}@T{ +set bookmark 4 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 4 +T}@T{ +bookmark 4 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 5 +T}@T{ +clear bookmark 5 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 5 +T}@T{ +set bookmark 5 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 5 +T}@T{ +bookmark 5 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 6 +T}@T{ +clear bookmark 6 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 6 +T}@T{ +set bookmark 6 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 6 +T}@T{ +bookmark 6 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 7 +T}@T{ +clear bookmark 7 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 7 +T}@T{ +set bookmark 7 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 7 +T}@T{ +bookmark 7 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 8 +T}@T{ +clear bookmark 8 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 8 +T}@T{ +set bookmark 8 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 8 +T}@T{ +bookmark 8 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 9 +T}@T{ +clear bookmark 9 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 9 +T}@T{ +set bookmark 9 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 9 +T}@T{ +bookmark 9 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 0 +T}@T{ +clear bookmark 10 (#clear%20Bookmark%20X) +T} +T{ +FenrirKey + Shift + 0 +T}@T{ +set bookmark 10 (#set%20Bookmark%20X) +T} +T{ +FenrirKey + 0 +T}@T{ +bookmark 10 (#read%20Bookmark%20X) +T} +T{ +FenrirKey + CTRL + 8 +T}@T{ +set window application (#Create%20Window) +T} +T{ +2 * FenrirKey + CTRL + 8 +T}@T{ +clear window application (#Remove%20Window) +T} +T{ +FenrirKey + Semicolon +T}@T{ +read last incoming (#last%20incoming) +T} +T{ +FenrirKey + F2 +T}@T{ +toggles braille (#toggle%20braille) +T} +T{ +FenrirKey + F3 +T}@T{ +toggles sound (#toggle%20sound) +T} +T{ +FenrirKey + F4 +T}@T{ +toggles speech (#toggle%20speech) +T} +T{ +FenrirKey + Enter +T}@T{ +temporarily disables speech (#disable%20speech%20temporarily) +T} +T{ +FenrirKey + Shift + CTRL + P +T}@T{ +toggles punctuation level (#toggle%20punctuation%20level) +T} +T{ +FenrirKey + RightBrace +T}@T{ +toggle auto spell check (#toggle%20auto%20spell%20check) +T} +T{ +FenrirKey + Shift + Enter +T}@T{ +toggles output (#toggle%20output) +T} +T{ +FenrirKey + Shift + E +T}@T{ +toggles emoticons (#toggle%20emoticons) +T} +T{ +FenrirKey + Enter +T}@T{ +toggles auto read (#toggle%20auto%20read) +T} +T{ +FenrirKey + CTRL + T +T}@T{ +toggles auto time (#toggle%20auto%20time) +T} +T{ +FenrirKey + Y +T}@T{ +toggles highlight tracking (#toggle%20highlight%20tracking) +T} +T{ +FenrirKey + Q +T}@T{ +quits fenrir (#quit%20Fenrir) +T} +T{ +FenrirKey + T +T}@T{ +Announce time (#Time) +T} +T{ +2 * FenrirKey + T +T}@T{ +Announce date (#Date) +T} +T{ +FenrirKey + S +T}@T{ +spell check (#spell%20check) +T} +T{ +2 * FenrirKey + S +T}@T{ +add word to spell check (#add%20word%20to%20spell%20check) +T} +T{ +FenrirKey + Shift + S +T}@T{ +removes word from spell check (#removes%20word%20from%20spell%20check) +T} +T{ +FenrirKey + Backspace +T}@T{ +forward keypress (#forward%20keypress) +T} +T{ +FenrirKey + Up +T}@T{ +increase speech volume (#increase%20speech%20volume) +T} +T{ +FenrirKey + Down +T}@T{ +decrease speech volume (#decrease%20speech%20volume) +T} +T{ +FenrirKey + Right +T}@T{ +increase speech rate (#increase%20speech%20rate) +T} +T{ +FenrirKey + Left +T}@T{ +decrease speech rate (#decrease%20speech%20rate) +T} +T{ +FenrirKey + Alt + Right +T}@T{ +increase speech pitch (#increase%20speech%20pitch) +T} +T{ +FenrirKey + Alt + Left +T}@T{ +decrease speech pitch (#decrease%20speech%20pitch) +T} +T{ +FenrirKey + Alt + Up +T}@T{ +increase sound volume (#increase%20sound%20volume) +T} +T{ +FenrirKey + Alt + Down +T}@T{ +decrease sound volume (#decrease%20sound%20volume) +T} +T{ +FenrirKey + CTRL + Shift + C +T}@T{ +clears clipboard (#clear%20clipboard) +T} +T{ +FenrirKey + Home +T}@T{ +first clipboard (#first%20clipboard) +T} +T{ +FenrirKey + End +T}@T{ +last clipboard (#last%20clipboard) +T} +T{ +FenrirKey + PageUp +T}@T{ +previous clipboard (#previous%20clipboard) +T} +T{ +FenrirKey + PageDown +T}@T{ +next clipboard (#next%20clipboard) +T} +T{ +FenrirKey + Shift + C +T}@T{ +current clipboard (#read%20current%20clipboard) +T} +T{ +FenrirKey + C +T}@T{ +copy marked text to clipboard (#copy%20marked%20to%20clipboard) +T} +T{ +FenrirKey + V +T}@T{ +paste clipboard contents (#paste%20clipboard) +T} +T{ +FenrirKey + F5 +T}@T{ +import clipboard from file (#import%20clipboard%20from%20file) +T} +T{ +FenrirKey + Alt + Shift +C +T}@T{ +export clipboard to file (#export%20clipboard%20to%20file) +T} +T{ +FenrirKey + CTRL + Shift + X +T}@T{ +remove marks (#Remove%20Marks) +T} +T{ +FenrirKey + X +T}@T{ +set mark (#Set%20mark) +T} +T{ +FenrirKey + Shift + X +T}@T{ +announce marked text (#Get%20text%20between%20marks) +T} +T{ +Linux specific +T}@T{ +T} +T{ +\f[C]\f[] +T}@T{ +export clipboard to X +T} +T{ +FenrirKey + CTRL + Up +T}@T{ +increases Alsa volume +T} +T{ +FenrirKey + CTRL + Down +T}@T{ +decreases Alsa volume +T} +.TE +.SS General +.SS quit Fenrir +.PP +Just stops fenrir. +#### shut up +.PP +Interrupt the current spoken. +### Review Modes +.PP +Fenrir provides a virtual cursor, with it you can navigate all over the +screen without changing the text cursor. +.PP +Using the review feature will open the review mode automatically. +.PP +The review cursor always starts from the text cursor. +Attention: after using the review mode, the review cursor will stay open +until you use the \[aq]\[aq]exit review\[aq]\[aq] shortcut. +.PP +Think when using clipboard operations and similar. +The review cursor is always prefered over the text cursor. +.PP +Fenrir sounds a bell sound if the used review command jumps to another +line or end of screen. +#### exit review +.PP +You can leave the review mode by pressing the \[aq]\[aq]exit +review\[aq]\[aq] shortcut. +#### review bottom +.PP +Set the review cursor to first column in the last line. +#### review top +.PP +Set the review cursor to the first column in the first line #### review +current line +.PP +Set the review cursor to the beginn of the the current line and review +it. +#### review previous line +.PP +Set the review cursor to the previous line and review it. +#### review next line +.PP +Set the review cursor to the next line and review it. +#### review line beginning +.PP +Set the review cursor to the begin of the current line #### review line +ending +.PP +Set the review cursor to the end of the current line #### review line +first character +.PP +Set the review cursor the first char (that is not space) in the current +line and review it. +#### review line last character +.PP +Set the review cursor the last char (that is not space) in the current +line and review it. +#### review current word +.PP +Sets the review cursor to the beginning of the current word and review +it. +#### review previous word +.PP +Sets the review cursor to the beginning of the previous word and review +it. +#### review next word +.PP +Sets the review cursor to the beginning of the next word and review it. +#### review current word phonetic +.PP +Sets the review cursor to the beginning of the current word and spell it +phonetic. +#### review previous word phonetic +.PP +Sets the review cursor to the beginning of the previous word and spell +it phonetic. +#### review next word phonetic +.PP +Sets the review cursor to the beginning of the next word and spell it +phonetic. +#### review current character +.PP +Does not change the review cursor. +Just announce the current char. +#### review previous character +.PP +Sets review cursor to the previous column and review it #### review next +character +.PP +Sets review cursor to the next column and review it #### review current +character phonetic +.PP +Does not change the review cursor. +Just announce the current char phonetic. +#### review previous character phonetic +.PP +Sets review cursor to the previous column and announce the char +phonetic. +#### review next character phonetic +.PP +Sets review cursor to the next column and announce the char phonetic. +#### review up +.PP +Set the review cursor in the same column one line above the current one +and review it. +#### review down +.PP +Set the review cursor in the same column one line below the current one +and review it. +### Handling marking +.PP +A mark defines a point of origin or end to prepare to copy or paste a +block of text. +\\ Examples where you need marks are: +.IP \[bu] 2 +copy to clipboard +.IP \[bu] 2 +set window application +.IP \[bu] 2 +set bookmark 1 \- X #### Set mark +.PP +How to set a mark: 1. +navigate with review or textcursor to the position you want to set the +mark. +Attention: if a review cursor is set, that is the prefered. +If you want to use text cursor, be sure that you are not in review mode. +2. +press shortcut for \[aq]\[aq]set mark\[aq]\[aq] you can set two marks +(begin and end). +Some commands allow some simpler usecases just using the whole line if +only one mark is set. +you may want to try this out. +#### Get text between marks +.PP +To get the text that is currently between your marks press shortcut for +\[aq]\[aq]marked text\[aq]\[aq].\\ #### Remove Marks +.PP +You can remove all current marks by pressing the shortcut for +\[aq]\[aq]remove marks\[aq]\[aq]. +Changing the screen also removes the marks. +### Screen Interaction +.PP +Fenrir provides several methods to interact with the current screen. +#### forward keypress +.PP +This just forwards the next shortcut to the screen Fenrir shortcut or +not. +This is useful if the currently pressed shortcut is also in use by +Fenrir. +#### Clipboard +.PP +Fenrir provides a clipboard with multible items represented by a list. +You navigate throught the list and paste the selected clipboard. +##### copy marked to clipboard +.PP +To copy something to the clipboard you need to set one or two marks. +if you set one mark, the text between the mark and your current cursor +is copied to clipboard. +Setting two marks just copies the text between the marks into the +clipboard. +If you copy something it is always placed as the first item on your +clipboard. +##### clear clipboard +.PP +You can remove all items from the current clipboard by \[aq]\[aq]clear +clipboard\[aq]\[aq] functionality. +##### first clipboard +.PP +This moves quick to the first item of the clipboard. +##### last clipboard +.PP +This moves quick to the last item of the clipboard. +##### previous clipboard +.PP +Go to previous item in the clipboard. +##### next clipboard +.PP +Go to next item on the clipboard. +##### read current clipboard +.PP +Read the content of the current item of the clipboard. +##### paste clipboard +.PP +Pass whatever item is currently selected by first, last, prev or next +clipboard commands. +if no special clipboard is selected the (last copied) is used. +##### export clipboard to file +.PP +This allows you to export the current clipboard to a configurable +filepath. +This is useful to share the clipboard with a graphical desktop. +##### import clipboard from file +.PP +Import a clipboard from a configurable file. +This is useful to share the clipboard with a graphical desktop. +### Quick Settings +.PP +Fenrir provides shortcuts to change settings temporarily and on the fly +without the need to permanently change the +\[aq]\[aq]settings.conf\[aq]\[aq] file. +#### toggle braille +.PP +Enables and disables Braille. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during run time. +#### toggle sound +.PP +Enables and disables sound. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during run time. +#### toggle speech +.PP +Enables and disables speech. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during run time. +#### disable speech temporarily +.PP +Disables the speech until next key press. +it might be useful if you want to listen to music or similar. +As soon as a key is pressed it is going to be enabled again. +#### toggle punctuation level +.PP +Cycle between all available punctuation levels. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during run time. +#### toggle auto spell check +.PP +Enables and disables automatic spellchecker (when typing). +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during run time. +#### toggle emoticons +.PP +Enables and disables emoticons. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during runtime. +#### toggle output +.PP +Enables and disables all output at once (sound, Braille, speech). +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during run time. +#### toggle auto read +.PP +Enables and disables what is automatically spoken. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during run time. +#### toggle auto time +.PP +Enables and disables auto time functionality. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during run time. +#### toggle highlight tracking +.PP +Enables and disables highlight tracking. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during run time. +#### increase speech volume +.PP +Increase the volume of the speech. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during runtime. +#### decrease speech volume +.PP +Decrease the volume of the speech. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during runtime. +#### increase speech rate +.PP +Increase the rate of the speech. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during runtime. +#### decrease speech rate +.PP +Decrease the rate of the speech. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during runtime. +#### increase speech pitch +.PP +Increase the pitch of the speech. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during runtime. +#### decrease speech pitch +.PP +Decrease the pitch of the speech. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during runtime. +#### increase sound volume +.PP +Increase the volume of the sound. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during runtime. +#### decrease sound volume +.PP +Decrease the volume of the sound. +This is not persistent stored in your \[aq]\[aq]settings.conf\[aq]\[aq] +but during runtime. +### Window Mode +.PP +Fenrir supports window mode, a window is a partial area of the screen. +#### Create Window +.PP +To create a window you need to do the following: 1. +set a beginning mark (as the start of the window) 2. +set an end mark (where the window should end) 3. +press \[aq]\[aq]set window application\[aq]\[aq] shortcut. +Now Fenrir ignores anything outside of the window.\\ #### Remove Window +.PP +You can remove the window by pressing \[aq]\[aq]the clear window +application\[aq]\[aq] shortcut. +Now Fenrir will read everything on the screen again. +### Tracking Modes +.PP +Different types of tracking are currently supported See section +Focus (#Focus) in \[aq]\[aq]settings.conf\[aq]\[aq] for more +information. +#### Cursor Tracking +.PP +This follows the text cursor. +This is the typical way an application works. +This is used by: +.IP \[bu] 2 +almost any shell such as (Bash, Zsh, sh) +.IP \[bu] 2 +vim +.IP \[bu] 2 +nano +.IP \[bu] 2 +emacs +.IP \[bu] 2 +mutt +.IP \[bu] 2 +tintin++ #### Highlight Tracking +.PP +In some applications there are no text cursors. +In those applications cursor changes are represented by different colors +or attributes (underlined or bold). +This mode tracks and announces these changes for you. +This is used by: +.IP +.nf +\f[C] +*\ wifi\-menu +*\ dialog +*\ alpine +\f[] +.fi +.SS Tutorial Mode +.PP +Fenrir provides a Tutorial mode. +When you enter tutorial mode, screen reader commands are intercepted and +explained instead of executing them. +\[aq]\[aq]Arrow up\[aq]\[aq] and \[aq]\[aq]Arrow Down\[aq]\[aq] let you +navigate through a list of all available commands with shortcuts and +description. +Pressing escape leaves the tutorial mode. +.SS Information +.SS Time +.PP +Announces the current Time. +#### Date +.PP +Announces the current Date. +#### Bookmarks +.PP +Bookmarks provide quick access to part of the screen without the need to +navigate to the area. +By default Fenrir provides 10 bookmarks. +Those can be set and accessed via shortcut. +This is useful for status lines or other information where the position +does not change. +##### set Bookmark X +.PP +You need to set the bookmark first. +For that you have to set one or two lines for use. +1. +Set marks (one or two) 2. +press shortcut for \[aq]\[aq]set bookmark X\[aq]\[aq]. +X represents the number 1 \- 10. +##### read Bookmark X +.PP +If a bookmark is set you can access the area just by pressing the +\[aq]\[aq]bookmark X\[aq]\[aq] shortcut. +X represents the number 1 \- 10. +Bookmarks are dynamic. +That means the content changes with the screen. +##### clear Bookmark X +.PP +to remove a bookmark just press the \[aq]\[aq]clear bookmark X\[aq]\[aq] +shortcut. +X represents the number 1 \- 10. +Afterward the bookmark is no longer available. +#### cursor position +.PP +You can get information about the current cursor and its position by +using the "cursor position" functionality. +#### indent current line +.PP +Announce the current indent level of the current line. +It represents the number of trailing spaces of the line. +#### current screen +.PP +Reads all the current screen from the beginning to the end. +#### current screen before cursor +.PP +Reads current screen from the beginning of the screen to the current +cursor position. +#### current screen after cursor +.PP +Read anything after current cursor position to the end. +#### cursor read to end of line +.PP +Read from the current cursor position to the end of the current line. +#### cursor column +.PP +Read the current X position of a cursor (column of the current line). +#### cursor line number +.PP +Read the current Y position of a cursor (line number). +#### present first line +.PP +Reads just the first line. +this is maybe useful for status information. +#### present last line +.PP +Presets the last line. +This is maybe useful for status information. +#### last incoming +.PP +Repeat the last automatically incoming text. +## Input +.SS Echo +.PP +Fenrir provides different methods of echoing content: +.IP \[bu] 2 +Word: Will speak each word after you push space +.IP \[bu] 2 +Character: speak any letter you type on the screen +.IP \[bu] 2 +Delete Character: speaks the character prior to the cursor when you push +backspace ### Silence on Key press +.SS Spellchecker +.PP +Fenrir has a built\-in spellchecker, it can invoke automatically while +typing or be called by a shortcut. +Commands to add or remove the current word to the dictionary are +included. +As using the spellchecker is enhanced usage. +You will need dictionary aspell\-\f[C]\f[]. +See section General (#General) in \[aq]\[aq]settings.conf\[aq]\[aq] for +more information. +#### spell check +.PP +Invokes the spellcheck on the word that contains the Review or text +cursor. +#### add word to spell check +.PP +Adds the word under the Review or Text cursor to the dictionary. +#### removes word from spell check +.PP +Removes the word under the Review or Text cursor from the dictionary. +## Announcements +.SS Emoticons +.PP +If you want to replace ":)" emoticons with "smile" in speech you can use +this feature. +It can be toggled on or off. +You can define emoticons in a dictionary, please see Emoticon +Dictionary. +See section General (#General) in \[aq]\[aq]settings.conf\[aq]\[aq] to +see how to enable or disable this feature. +.SS Time +.PP +Announce the time at periodical increments, To track the time easily. +You can define 2 different ways of time announcements. +1. +periodic 2. +on fix minutes +.PP +Example periodic, every 20 minutes "delaySec=20": +.IP +.nf +\f[C] +[time] +enabled=True +presentTime=True +presentDate=True +delaySec=20 +onMinutes= +announce=True +interrupt=False\ \ \ \ +\f[] +.fi +.PP +Example on fix minutes in an hour. +example every quarter "delaySec=0" and "onMinutes=00,15,30,45": +.IP +.nf +\f[C] +[time] +enabled=True +presentTime=True +presentDate=True +#delaySec\ is\ repected\ bevore\ onMinutes\ so\ it\ need\ to\ be\ set\ to\ 0 +delaySec=0\ +onMinutes=00,15,30,45 +announce=True +interrupt=False\ \ \ \ \ \ +\f[] +.fi +.SS Promoted List +.PP +Promoted Lists are a nice feature if you are away from your computer or +performing more longer tasks. +you can define a list of words which you want to hear a sound icon for +after a period of inactivity. +Example if the word "Chrys" appears after 120 Seconds of inactivity: +[promote] enabled=True +.PD 0 +.P +.PD +inactiveTimeoutSec=120 list=Chrys See section Promote (#Promote) in +\[aq]\[aq]settings.conf\[aq]\[aq] for more information. +### Punctuation +.PP +Fenrir handles punctuation levels and names for you with several +provided dictionaries. +.PP +See levelDict See punctuationDict ## Braille +.PP +Fenrir provides Braille support in Version >= 2.0. +See section Braille (#Braille) in \[aq]\[aq]settings.conf\[aq]\[aq] for +more information. +### braille flush +.PP +If a message appears on the Braille device you can flush it to get back +to the review\- or system cursor ### Braille pan left +.PP +If a line is longer than your Braille devices you can move the view +(called panning) to the left. +So you can read stuff without the need to move the review\- or system +cursor. +### Braille pan right +.PP +If a line is longer than your Braille devices you can move the view +(called panning) to the right. +So you can read stuff without the need to move the review\- or system +cursor. +### braille return to cursor +.PP +When you have finished reading the line on the Braille device using +panning, the focus can be returned to the current used cursor by using +"return to cursor" command. +## Dictionary +.PP +You can make use of different kinds of built\-in dictionary\[aq]s. +A dictionary has a name and list of keys and values separated by :===: +Example: [customDict] Chrys:===:Chrys is cool lollipop:===:lolli that +means that every instance "chrys" is displayed, speech will say Chrys is +cool. +"lollipop" is spoken as "lolli". +Before making changes to a dictionary we recommend making a backup of +your current dictionary in case future updates overwrite your local +changes. +### Punctuation +.SS Level +.PP +The punctuation level dict contains lists with "what punctuation is +spoken in what level". +the default one looks like this: [levelDict] none:===: +some:===:.\-$~+*\-/\\\@ most:===:.,:\-$~+*\-/\@!#%^&\f[I]()[]}{\f[C]<>\f[]; +all:===:!"#$%& \[aq]()\f[]+,\-./:;\f[C]<=>\f[]?\@[\\]^_`{|}~ the level +"none" has no values. +so it should not speak any punctuation (sadly this is not respected by +every TTS system) if "some" is the current level the following are +spoken: dot dash dollar tilde plus star slash backslash at. +same for most and all, you can add new levels. +if you cycle punctuation levels they are recognized. +the default punctuation level is set in settings.conf. +The default is "some". +#### Punctuation +.PP +The punctuation dictionary "[punctDict]" contains how the punctuation is +spoken. +Example: [punctDict] \f[I]:===:line +.PD 0 +.P +.PD +speaks an \f[] as "line". +.PD 0 +.P +.PD +[punctDict] \f[I]:===:underscore speaks an \f[] as underscore. +for question mark an ? +is appended to the word that the TTS system can announce the question +correctly. +.PD 0 +.P +.PD +### Custom +.PP +The dict "[customDict]" is just for your own use, it just replace the +key with the value without any special functionality. +This might be used to fix incorrectly spoken words, make words more +common, shorter or just for fun. +:) ### Emoticons +.PP +The Emoticons dictionary "[emoticonDict]" by default contains some +emoticons. +it can replace ":)" with "smile" or "XD" with "loool" Making chat more +colorful. +A nice feature with this dictionary is that you can toggle the +substitution on or off during run time or in settings.conf. +This is useful because while doing programming or other serious work you +want to hear colons and perryns not smiles. +# Configuration +.PP +You can configure Fenrir in the following places (ordered by priority): +1. +Commandline Parameters \[aq]\[aq]\-o\[aq]\[aq] see Set settings +coption (#Set%20settings%20coption) 2. +/etc/fenrir/settings/settings.conf see Settigns (#Settings) 3. +\f[C]\f[]/config/settings/settings.conf see +Settigns (#Settings) 4. +hard coded defaults ## Commandline Arguments +.SS Set settings option +.PP +You can specify options that overwrite the setting.conf. +This is done with \[aq]\[aq]\-o \f[C]\f[] parameter. +The list of options have the following syntax fenrir \-o +"section#setting=value;section#setting=value" +.PP +For example changing the sound driver to gstreamer and disabling Braille +.PD 0 +.P +.PD +fenrir \-o "sound#driver=gstreamerDriver;braille#enabled=False=False" or +change the debug level to verbose fenrir \-o "general#debugLevel=3" You +can find the available sections and variables here <#Settings> See +Syntax #settings.conf syntax (#settings.conf%20syntax) ### settings.conf +syntax +.PP +the syntax of the settings.conf (#Settings) is quite simple and similar +to a "*.ini" file, there are 4 different elements. +1. +Sections 2. +Settings 3. +Values 4. +Comments +.PP +A comment starts with a # and is ignored by Fenrir. +# this is a comment To group settings we have sections. +A section can look like this: [Section] A setting looks like this: +settingName=Value +.PP +Example: sound (#sound) # Turn sound on or off: enabled=True # Select +the driver used to play sounds, choices are genericDriver and +gstreamerDriver. +# Sox is default. +driver=genericDriver +.SS Settings +.SS Sound +.PP +The sound is configured in section \[aq]\[aq]sound (#sound)\[aq]\[aq]. +.PP +Turn sound on or off: enabled=True Values: on=\[aq]\[aq]True\[aq]\[aq], +off=\[aq]\[aq]False\[aq]\[aq] +.PP +Select the driver used to play sounds. +The genericDriver using Sox is the default. +.IP +.nf +\f[C] +driver=genericDriver +\f[] +.fi +.PP +Available Drivers: +.IP \[bu] 2 +\[aq]\[aq]genericDriver\[aq]\[aq] using the generic driver, for Fenrir +<1.5 just use \[aq]\[aq]generic\[aq]\[aq] +.IP \[bu] 2 +\[aq]\[aq]gstreamerDriver\[aq]\[aq] using the gstreamer, for Fenrir <1.5 +just use \[aq]\[aq]gstreamer\[aq]\[aq] +.PP +These are the pack of sounds used for sound icons. +theme=default By default we ship two sound packs. +1. +\[aq]\[aq]default\[aq]\[aq] opus encoded, for newer Sox versions 2. +\[aq]\[aq]default\-wav\[aq]\[aq] wav encoded, just for compatibility +Sound packs are located at /usr/share/sounds/fenrir/ +.PP +Sound volume controls how loud the sounds for your selected sound pack +are. +volume=1.0 Values: \[aq]\[aq]0.0\[aq]\[aq] is quietest, +\[aq]\[aq]1.0\[aq]\[aq] is loudest. +.SS Generic Driver +.PP +The generic sound driver uses shell commands for play sound and +frequencies. +.PP +\[aq]\[aq]genericPlayFileCommand\[aq]\[aq] defines the command that is +used to play a sound file. +genericPlayFileCommand=\f[C]\f[] +\[aq]\[aq]genericFrequencyCommand\[aq]\[aq] defines the command that is +used playing frequencies. +genericFrequencyCommand=\f[C]\f[] +.PP +The following variables are substituted in +\[aq]\[aq]genericPlayFileCommand\[aq]\[aq] and +\[aq]\[aq]genericFrequencyCommand\[aq]\[aq]: +.IP \[bu] 2 +\[aq]\[aq]fenrirVolume\[aq]\[aq] = the current volume setting +.IP \[bu] 2 +\[aq]\[aq]fenrirSoundFile\[aq]\[aq] = the sound file for an sound icon +.IP \[bu] 2 +\[aq]\[aq]fenrirFrequence\[aq]\[aq] = the frequency to play +.IP \[bu] 2 +\[aq]\[aq]fenrirDuration\[aq]\[aq] = the duration of the frequency +.PP +Example genericPlayFileCommand (default) genericPlayFileCommand=play \-q +\-v fenrirVolume fenrirSoundFile Example genericFrequencyCommand +(default) genericFrequencyCommand=play \-q \-v fenrirVolume \-n \-c1 +synth fenrirDuration sine fenrirFrequence ### Speech +.PP +Speech is configured in section \[aq]\[aq][speech]\[aq]\[aq]. +Turn speech on or off: enabled=True Values: on=\[aq]\[aq]True\[aq]\[aq], +off=\[aq]\[aq]False\[aq]\[aq] +.SH Select speech driver, options are speechdDriver (default), +genericDriver or espeakDriver: +.PP +driver=speechdDriver #driver=espeakDriver +.SH driver=genericDriver +.PP +Select the driver used to generate speech output. +.IP +.nf +\f[C] +driver=speechdDriver +\f[] +.fi +.PP +Available Drivers: +.IP \[bu] 2 +\[aq]\[aq]genericDriver\[aq]\[aq] using the generic driver, for Fenrir +<1.5 this is not available +.IP \[bu] 2 +\[aq]\[aq]speechdDriver\[aq]\[aq] using speech\-dispatcher, for Fenrir +<1.5 just use \[aq]\[aq]speechd\[aq]\[aq] +.IP \[bu] 2 +\[aq]\[aq]espeakDriver\[aq]\[aq] using the espeak directly, for Fenrir +<1.5 just use \[aq]\[aq]espeak\[aq]\[aq] +.PP +The rate selects how fast Fenrir will speak. +rate=0.65 Values: Range Minimum:\[aq]\[aq]0.0\[aq]\[aq] is slowest, +Maximum:\[aq]\[aq]1.0\[aq]\[aq] is fastest. +.PP +Pitch controls the pitch of the voice. +pitch=0.5 Values: Range Minimum:\[aq]\[aq]0.0\[aq]\[aq] is lowest, +Maximum:\[aq]\[aq]1.0\[aq]\[aq] is highest. +.PP +A Pitch for capital letters can be set. +capitalPitch=0.9 Values: Range Minimum:\[aq]\[aq]0.0\[aq]\[aq] is +lowest, Maximum:\[aq]\[aq]1.0\[aq]\[aq] is highest. +.PP +The Volume controls the loudness of the voice. +volume=1.0 Values: Range Minimum:\[aq]\[aq]0.0\[aq]\[aq] is quietest, +Maximum:\[aq]\[aq]1.0\[aq]\[aq] is loudest. +.PP +Some speech drivers like speechdDriver can support various modules. +these can be set here. +module=espeak Values: Text, Consult speech\-dispatcher\[aq]s +configuration to see what modules are available. +.PP +Voice selects the varient you want to use, for example, f5 will use the +female voice #5 in Espeak, or if using the Espeak module in +Speech\-dispatcher. +To find out which voices are available, consult the documentation +provided with your selected synthesizer. +voice= Values: Text, see your TTS synths documentation what is +available. +.PP +Select the language you want Fenrir to use. +language=english\-us Values: Text, see your TTS synths documentation +what is available. +.PP +Read new text as it occurs autoReadIncoming=True Values: +on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.SS Generic Driver +.PP +The generic speech driver uses shell commands for speech synthisus. +.PP +\[aq]\[aq]genericSpeechCommand\[aq]\[aq] defines the command that is +executed for creating speech The following variables are substituted in +\[aq]\[aq]genericSpeechCommand\[aq]\[aq]: +.IP \[bu] 2 +\[aq]\[aq]FenrirText\[aq]\[aq] = is the text that should be spoken +.IP \[bu] 2 +\[aq]\[aq]fenrirModule\[aq]\[aq] = may be the speech module like used in +speech\-dispatcher, not every TTY needs this +.IP \[bu] 2 +\[aq]\[aq]fenrirLanguage\[aq]\[aq] = the language to speak in +.IP \[bu] 2 +\[aq]\[aq]fenrirVoice\[aq]\[aq] = is the current voice that should be +used +.IP \[bu] 2 +\[aq]\[aq]fenrirVolume\[aq]\[aq] = is replaced with the current volume +.IP \[bu] 2 +\[aq]\[aq]fenrirPitch\[aq]\[aq] = is replaced with the current pitch +.IP \[bu] 2 +\[aq]\[aq]fenrirRate\[aq]\[aq] = is replaced with the current speed +(speech rate) +.PP +Example genericSpeechCommand (default): genericSpeechCommand=espeak \-a +fenrirVolume \-s fenrirRate \-p fenrirPitch \-v fenrirVoice "fenrirText" +.PP +These are the minimum and maximum values of the TTS system used in +genericSpeechCommand. +They are needed to calculate the abstract range in volume, rate and +pitch 0.0 \- 1.0. +.IP +.nf +\f[C] +FenrirMinVolume=0 +fenrirMaxVolume=200 +fenrirMinPitch=0 +fenrirMaxPitch=99 +fenrirMinRate=80 +fenrirMaxRate=450 +\f[] +.fi +.PP +The current volume, pitch and rate is calculated like this value = min + +[volume,pitch,rate] * (min \- max ) ### Braille +.PP +Braille is a WIP and not ready yet. +Braille support can be configured in section +\[aq]\[aq][braille]\[aq]\[aq]. +.PP +Turn braille on or off: enabled=False Values: +on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +Select the driver used for communication with a braille device. +driver=brlapiDriver Values: Text, available Driver Available Drivers: +.IP \[bu] 2 +\[aq]\[aq]brlttyDriver\[aq]\[aq] using brltty for braille communication, +for Fenrir <1.5 just use \[aq]\[aq]brltty\[aq]\[aq] +.PP +The Braille layout can be configured here layout=en Values: Text, see +braille driver for layouts. +.PP +What should the flush timeout relate to flushMode=word Values: Text, an +flushMode Existing flushModes: +.IP \[bu] 2 +\[aq]\[aq]word\[aq]\[aq] = flush after (number of words to display) * +seconds +.IP \[bu] 2 +\[aq]\[aq]char\[aq]\[aq] = flush after (number of chars to display) * +seconds +.IP \[bu] 2 +\[aq]\[aq]fix\[aq]\[aq] = flush after X seconds +.IP \[bu] 2 +\[aq]\[aq]none\[aq]\[aq] = no automatic flush (manual via shortcut) +.PP +Seconds to flush (see flushMode) flushTimeout=3 Values: Integer, in +Seconds or \[aq]\[aq]\-1\[aq]\[aq] = no automatic flush (manual via +shortcut) The total flush time calculates in relation to flushMode. +.PP +How should the Braille cursor focus be tracked? +cursorFocusMode=page Values: Text, an existing cursor focus mode +Available cursor focus modes: +.IP \[bu] 2 +\[aq]\[aq]page\[aq]\[aq] = if the cursor crosses the border move to next +page and start at begin +.IP \[bu] 2 +\[aq]\[aq]fixCell\[aq]\[aq] = ajust the cursor on a special cell where +it is always placed. +the display scroll here more smooth. +.PP +Define the cell on the Braille device where Fenrir should scroll and +keep the cursor fixCursorOnCell=\-1 Values: Integer +.IP \[bu] 2 +\[aq]\[aq]0\[aq]\[aq] = first cell on device, +.IP \[bu] 2 +\[aq]\[aq]\-1\[aq]\[aq] = last cell on device +.IP \[bu] 2 +\[aq]\[aq]>0\[aq]\[aq] = fix cell number +.PP +What cursor should Fenrir show on the Braille device +cursorFollowMode=review Values: Text, an exsiting cursor following mode. +Existing cursor following mode: +.IP \[bu] 2 +\[aq]\[aq]none\[aq]\[aq] = no automatic toggle command used +.IP \[bu] 2 +\[aq]\[aq]review\[aq]\[aq] = priority to review +.IP \[bu] 2 +\[aq]\[aq]last\[aq]\[aq] = follow last used cursor +.PP +number of cells in panning (horizontal). +How many cell should be panned on press the routing key? +panSizeHorizontal=0 Values: Integer, +.IP \[bu] 2 +\[aq]\[aq]0\[aq]\[aq] = display size +.IP \[bu] 2 +\[aq]\[aq]>0\[aq]\[aq] number of cells ### Screen +.PP +The settings for screens, (TTY, PTY) are configured in the +\[aq]\[aq][screen]\[aq]\[aq] section. +.PP +The driver to get the information from the screen: driver=vcsaDriver +Available Drivers: +.IP \[bu] 2 +\[aq]\[aq]vcsaDriver\[aq]\[aq] using the VCSA driver (for TTYs), for +Fenrir <1.5 just use \[aq]\[aq]vcsa\[aq]\[aq] The encoding of the screen +encoding=cp850 Values:\[aq]\[aq]cp850\[aq]\[aq] is used for Western +languages like USA or Europe. +.PP +The driver updates Fenrir with changes on the screen. +screenUpdateDelay=0.05 Values: in Seconds +.PP +If you want Fenrir to not be active on any screen for various reasons. +Maybe an X server or Wayland is running on that screen. +You can make Fenrir ignore it or multiple screens seperated by +\[aq]\[aq],\[aq]\[aq] with: suspendingScreen= Values: Depends on driver: +.IP \[bu] 2 +VCSA: the number of the TTY. +TTY6 is \[aq]\[aq]6\[aq]\[aq]. +Example ignore TTY1 and TTY2: suspendingScreen=1,2 +.PP +There is also the ability to let Fenrir auto detect screens that are +running an X server. +So Screens running an GUI can be ignored. +autodetectSuspendingScreen=True Values: on=\[aq]\[aq]True\[aq]\[aq], +off=\[aq]\[aq]False\[aq]\[aq] +.SS Keyboard +.PP +The settings for keyboard and input related configuration is located in +the section \[aq]\[aq]keyboard (#keyboard)\[aq]\[aq] of the +\[aq]\[aq]settings.conf\[aq]\[aq] file. +.PP +Select the driver used for grabbing keybord input and for recieving +shortcuts. +driver=evdevDriver Values: Text, available Driver Available Drivers: +.IP \[bu] 2 +\[aq]\[aq]evdevDriver\[aq]\[aq] uses the evdev input system of linux, +for Fenrir <1.5 just use \[aq]\[aq]evdev\[aq]\[aq] +.PP +You can let Fenrir know about what input devices are to be used. +device=ALL Values: +.IP \[bu] 2 +\[aq]\[aq]ALL\[aq]\[aq] use all devices with key capabilities. +.IP \[bu] 2 +\[aq]\[aq]NOMICE\[aq]\[aq] Exclude mices from handling. +.IP \[bu] 2 +\f[C]\f[] just use the device with the given name. +.PP +Gives Fenrir exclusive access to the keyboard and lets it control +keystrokes. +This is needed to intercept Fenrir related shortcuts. +grabDevices=True Values: on=\[aq]\[aq]True\[aq]\[aq], +off=\[aq]\[aq]False\[aq]\[aq] +.PP +The following makes sense if you are using a second screenreader and +want to have some hooked events. +Fenrir ignores all shortcuts then. +ignoreShortcuts=False Values: on=\[aq]\[aq]True\[aq]\[aq], +off=\[aq]\[aq]False\[aq]\[aq] +.PP +The current keyboard layout used for shortcuts. +keyboardLayout=desktop Values: An absolute Path to a Keyboard definition +file or a Filename without extension located in +\[aq]\[aq]/etc/fenrir/keyboard\[aq]\[aq] +.PP +Announce characters while typing. +charEcho=False Values: on=\[aq]\[aq]True\[aq]\[aq], +off=\[aq]\[aq]False\[aq]\[aq] +.PP +Announce deleted characters charDeleteEcho=True Values: +on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +Announce word after pressing space wordEcho=False Values: +on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +Interrupt speech on any keypress interruptOnKeyPress=False Values: +on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +You can filter the keys that speech should interrupt +interruptOnKeyPressFilter= Values: (List) empty = all keys, otherwise +interrupt with specified keys +.PP +The timeout that is used for double tap shortcuts doubleTapTimeout=0.2 +Values: Seconds ### General +.PP +Overall settings can be configured from the section +\[aq]\[aq]general (#general)\[aq]\[aq]. +.PP +Set the current debug level: debugLevel=1 Values: off=0, error=1, +warning=2, info=3 +.PP +the current punctuation and dict file in use: punctuationProfile=default +Values: Text, see available profiles in +\[aq]\[aq]/etc/fenrir/punctuation\[aq]\[aq] or in +\[aq]\[aq]sourceTree/config/punctuation\[aq]\[aq] +.PP +The current punctuation level in use: punctuationLevel=some Values: +Text, See available levels in the used punctuation file. +.PP +Respect pause for punctuations: respectPunctuationPause=True Values: +on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +Add a pause on Line break: newLinePause=True Values: +on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +Specify the path where the clipboard should be exported to. +See export clipboard to file (#export%20clipboard%20to%20file). +The variable \[aq]\[aq]$user\[aq]\[aq] is replaced by the current logged +username. +clipboardExportPath=/tmp/fenrirClipboard Values: Text, Systemfilepath +.PP +The number of available clipboards: numberOfClipboards=10 Values: +Integer, 1 \- 999 +.PP +Replace emoticons like :) or ;) with text insertions: emoticons=True +Values: on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +Define the current Fenrir keys: fenrirKeys=KEY_KP0,KEY_META,KEY_INSERT +Values, Text list, separated by comma. +.PP +Define the current script keys: scriptKey=KEY_COMPOSE Values, Text list, +separated by comma. +.PP +The time format to be used for (time command) output: +timeFormat=%H:%M:%P Values: see python specification for +datetime.strftime (https///docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior) +.PP +The date format to be used for (date command) output: dateFormat=%A, %B +%d, %Y Values: see python specification for +datetime.strftime (https///docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior) +.PP +Enable or Disable spellcheck whilst typing: autoSpellCheck=True Values: +on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +The use of the dictionary with spellcheck: spellCheckLanguage=en_US +Values: Text, see aspell dictionary\[aq]s. +.PP +Folder Path for your scripts "scriptKey" functionality: +scriptPath=/usr/share/fenrir/scripts Values: Text, Existing path on file +system. +.PP +Override commands or create new ones without changing the Fenrir +defaults: commandPath=/usr/share/fenrir/commands Values: Text, Existing +path on file system. +Subfolders in commandPath are: +.IP \[bu] 2 +\[aq]\[aq]commands\[aq]\[aq] = to create shortcut commands +.IP \[bu] 2 +\[aq]\[aq]onInput\[aq]\[aq] = executed while typing +.IP \[bu] 2 +\[aq]\[aq]onScreenChange\[aq]\[aq] = executed on change the screen +(change from TTY4 to TTY6) +.IP \[bu] 2 +\[aq]\[aq]onScreenUpdate\[aq]\[aq] = executed when the screen is +captured +.SS Focus +.PP +The configuration for basic focus is in the section +\[aq]\[aq]focus (#focus)\[aq]\[aq]. +Follow the text cursor: cursor=True Values: on=\[aq]\[aq]True\[aq]\[aq], +off=\[aq]\[aq]False\[aq]\[aq] +.PP +Follow highlighted text changes (Highlight Tracking): highlight=False +Values: on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] ### +Review +.PP +Configurations for the review mode are in the section +\[aq]\[aq][review]\[aq]\[aq]. +.PP +If "next word/ char" or "prev word/char" create a linebreak, announce +it: lineBreak=True Values: on=\[aq]\[aq]True\[aq]\[aq], +off=\[aq]\[aq]False\[aq]\[aq] +.PP +If "next word/ char" or "prev word/char" cannot be performed because you +reached the end of the screen, announce it: endOfScreen=True Values: +on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +Leave the review mode when pressing a key: leaveReviewOnKeypress=False +Values: on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +Leave the review mode when changing the screen (From TTY3 to TTY4): +leaveReviewOnScreenChange=True Values: on=\[aq]\[aq]True\[aq]\[aq], +off=\[aq]\[aq]False\[aq]\[aq] ### Promote +.PP +"Promoted Lists" are configured in the section +\[aq]\[aq][promote]\[aq]\[aq]. +Turn Promoted Lists" on or off: enabled=True Values: +on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +The minimum time interval of inactivity to activate promoting. +By default it promotes after 120 Seconds inactivity: +inactiveTimeoutSec=120 Values: in Seconds +.PP +Define a list of promoted words comma seperated: list= Values: text +(comma seperated) Example to promote the word "nickname" or a bash +prompt: list=nickname,$:,#: +.SS Time +.PP +The automated time announcement is configured in the section +\[aq]\[aq]time (#time-2)\[aq]\[aq]. +Time announcement is disabled by default. +Turn time announcement on or off: enabled=True Values: +on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +Should the time be announced: presentTime=True Values: +on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +Should the date be announced (just on date change): presentDate=True +Values: on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +Announce after a given period of seconds: delaySec=0 Value: in Seconds, +0 = Deactivated +.PP +Announce after fixed minutes in an hour. +if delaySec is >0 onMinutes is ignored: onMinutes=00,30 Example every 15 +minutes: onMinutes=00,15,30,45 +.PP +Just play a soundicon, (not interrupting): announce=True Values: +on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] +.PP +Interrupt current speech for time announcement: interrupt=False Values: +on=\[aq]\[aq]True\[aq]\[aq], off=\[aq]\[aq]False\[aq]\[aq] # +Customization +.SS Scripting +.PP +Scripts can be in any language, bash, python, sh or others. +Place your scripts in the directory /usr/share/fenrir/scripts/ (the path +is configurable in settings.conf). +The script key is the applications key. +Usually this key can be found on the keyboard located just left of the +right most control key. +When you name a script, the key name appears in the script seperated by +the sequence \f[B]\-\f[]. +So, for example, if you have a python weather script you want assigned +to the script key plus the letter w you would name the script +/usr/share/fenrir/scripts/weather__\-__key_w.py Then, to access the +script, simply press the script key and the letter w. +Scripts must be executable. +So, make sure to chmod 755 your script when you place it in the scripts +directory. +The script gets some parameters from fenrir when it is executed. +So that information is available in your script then. +.SS Parameterlist +.PP +.TS +tab(@); +l l. +T{ +Parameter +T}@T{ +Content +T} +_ +T{ +$1 +T}@T{ +Username of the current logged in user +T} +.TE +.SS Examples +.PP +Script that just speaks the current username when pressing ScriptKey + +H.\\ File: +\[aq]\[aq]/usr/share/fenrir/scripts/helloWorld__\-__key_h.sh\[aq]\[aq]: +#!/bin/bash echo $1 +.SS Commands +.PP +You can place your own commands in "/usr/share/fenrir/commands" (path is +configurable in settings.conf). +Commands are python files with a special scheme. +You can assign them to a shortcut using the filename without an +extension or place them in a hook trigger like OnInput or +OnScreenChange. +For further information see developer guide. +Good Examples: +"date.py" (https///github.com/chrys87/fenrir/blob/master/src/fenrir/commands/commands/date.py) +(announce the Date), +"shut_up.py" (https///github.com/chrys87/fenrir/blob/master/src/fenrir/commands/commands/shut_up.py) +(interrupt output) the basic scheme for a command is as follows: +.IP +.nf +\f[C] +from\ core\ import\ debug + +class\ command(): +\ \ def\ __init__(self): +\ \ \ \ \ \ pass +\ \ def\ initialize(self,\ environment): +\ \ \ \ \ \ self.env\ =\ environment +\ \ def\ shutdown(self): +\ \ \ \ \ \ pass +\ \ def\ getDescription(self): +\ \ \ \ \ \ return\ _(\[aq]No\ description\ found\[aq]) +\ \ def\ run(self): +\ \ \ \ \ \ pass +\ \ def\ setCallback(self,\ callback): +\ \ \ \ \ \ pass +\f[] +.fi +.IP \[bu] 2 +Template lives +here (https///github.com/chrys87/fenrir/blob/master/src/fenrir/commands/command_template.py) +.IP \[bu] 2 +The class needs to have the name "command". +.IP \[bu] 2 +"initialize" is running once whilst loading the command. +.IP \[bu] 2 +"shutdown" is running on unload like the command (quit fenrir) +.IP \[bu] 2 +"getDescriptsion" just returns an string. +That String is used in Tutorial Mode. +.IP \[bu] 2 +"run" is executed when the command is invoked. +(shortcut is pressed, or trigger isn\[aq]t running) +.IP \[bu] 2 +setCAllback is currently not used. +and has no functionality yet. +.SH Troubleshooting +.SS Fenrir does not start +.IP " 1." 4 +Have you installed all the dependencies Support and +Requirements (#Support%20and%20Requirements) +.IP " 2." 4 +Try using master, a lot of changes take place there to make Fenrir +compatible with more systems ## Fenrir does not utilize the shortcuts +.IP " 3." 4 +Make sure you have python3\-evdev installed +.IP " 4." 4 +Use the latest Fenrir version +.IP " 5." 4 +Make sure that Fenrir has permission to /dev/input/* and /dev/uinput (or +run it as root) ## No sound at all +.IP " 6." 4 +Run the script to configure Pulseaudio once as root and once as your +user. +This will setup Pulseaudio but require a restart of Pulseaudio. +The script is located in \[aq]\[aq]tools/configure_pulse.sh\[aq]\[aq] +.IP " 7." 4 +Use ALSA +.IP " 8." 4 +Configure Pulse system +wide (https///www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide/) +(Not recommended) +.IP " 9." 4 +Use gstreamerDriver: change \[aq]\[aq]settings.conf\[aq]\[aq] in the +section \[aq]\[aq]sound\[aq]\[aq] the line +\[aq]\[aq]driver=genericDriver\[aq]\[aq] to +\[aq]\[aq]driver=gstreamerDriver\[aq]\[aq] +.IP "10." 4 +Use wave sound\-icons: change \[aq]\[aq]settings.conf\[aq]\[aq] in the +section \[aq]\[aq]sound\[aq]\[aq] the line +\[aq]\[aq]theme=default\[aq]\[aq] to +\[aq]\[aq]theme=default\-wav\[aq]\[aq] +.IP "11." 4 +Use most current version of sox (http://sox.sourceforge.net/) with opus +support +.IP "12." 4 +Try apulse (https///github.com/i-rinat/apulse) (not tested by myself but +might work). +Please give me feedback if you try it out. +## You get sound\-icons but no speech +.IP "13." 4 +If you are using speech\-dispatcher run "spd\-conf" once as user and as +root. +.IP "14." 4 +You can test if speech\-dispatcher works by invoking it as root\\ +\[aq]\[aq]sudo spd\-say "hello world"\[aq]\[aq] ## Bugreports and +feature requests +.PP +Please report Bugs and feature requests to: +https://github.com/chrys87/fenrir/issues (https///github.com/chrys87/fenrir/issues) +.PP +for bugs please provide a debug (#Howto%20create%20a%20debug%20file) +file that shows the issue. +### How\-to create a debug file +.IP "1." 3 +Delete old debug stuff\\ \[aq]\[aq]sudo rm /var/log/fenrir.log\[aq]\[aq] +.IP "2." 3 +Start fenrir in debug mode\\ \[aq]\[aq]sudo fenrir \-d\[aq]\[aq] +.IP "3." 3 +Do your stuff to reproduce the problem +.IP "4." 3 +Stop fenrir (\[aq]\[aq]fenrirKey + q\[aq]\[aq]) the debug file is +located in \[aq]\[aq]/var/log/fenrir.log\[aq]\[aq] +.PP +Please be as precise as possible to make it easy to solve the problem.