Compare commits

..

171 Commits

Author SHA1 Message Date
Storm Dragon
2cc2fda28c Actually fix the version file this time. 2025-03-02 17:59:20 -05:00
Storm Dragon
c99d0f6ee1 Fixed version.py. 2025-03-02 17:44:32 -05:00
Storm Dragon
1552b962a1 Updated dependencies. 2025-03-02 17:43:01 -05:00
Storm Dragon
09391bfe84 Experimental fix for evdev failures. 2025-03-02 17:24:45 -05:00
Storm Dragon
e76ca9889a Same update for export to x clipboard. Now using pyperclip. 2025-03-02 16:04:38 -05:00
Storm Dragon
73206ce393 Switched from xclip to pyperclip for import from x. 2025-03-02 15:25:06 -05:00
Storm Dragon
5b642cd9e2 Fixed error in settings file. 2025-02-26 17:41:01 -05:00
Storm Dragon
4966b87ba1 pyttsx removed from setup file because it's no longer a speech option. 2025-02-26 17:38:22 -05:00
Storm Dragon
145cab6221 Updated dependencies to include rapidfuzz. 2025-02-26 17:08:50 -05:00
Storm Dragon
e46926f145 Fixed a traceback on shutdown. Hopefully improved responsiveness with the diff. Trying rapidfuzz for smaller screen updates, add a catch to fall back to the original difflib if there are any problems. This is experimental, please watch for bugs. 2025-02-26 17:02:25 -05:00
Storm Dragon
8cd50c5070 Hopefully improve accuracy of blank line reporting. 2025-02-26 16:05:17 -05:00
Storm Dragon
ed918a0334 Forgot to push one of the punctuation files.
?
2025-01-08 20:26:46 -05:00
Storm Dragon
760b873abe Updated emoticon handling to make it more accurate, fewer false positives. 2025-01-04 21:57:12 -05:00
Storm Dragon
46c348634c Post release switch code name back to master. 2024-12-21 18:01:42 -05:00
Storm Dragon
9da925c80d Fixed merge conflict. 2024-12-21 17:52:38 -05:00
Storm Dragon
9c45ca1b5f Fixed bug in Fenrir configuration tool. 2024-12-21 17:46:23 -05:00
Storm Dragon
d1be848ebb Merge branch 'testing' got rid of the scm dependency." 2024-12-20 14:11:51 -05:00
Storm Dragon
bc4319bf5e Forgot to get rid of the scm stuff since moving back to setup.py. 2024-12-20 14:08:25 -05:00
Storm Dragon
6f8139ed8f Change codename to stable for tag. 2024-12-20 13:33:23 -05:00
Storm Dragon
f1a6c75459 Merged setup fixes to master. Went back to setup.py just with some updates to minimize python's grumbling. Also, merged the locale setup. 2024-12-20 12:50:32 -05:00
Storm Dragon
1d746eb709 Minimal pyproject.tmol added. 2024-12-20 12:30:56 -05:00
Storm Dragon
80f549fde9 Hopefully final fix to setup. 2024-12-20 12:24:52 -05:00
Storm Dragon
9f57f7faec Revert back to setup.py because it worked. 2024-12-20 12:19:09 -05:00
Storm Dragon
099d49d670 maybe was over complicating things. 2024-12-20 12:00:23 -05:00
Storm Dragon
67b6c79678 Trying some debugging to figure out what's going wrong. 2024-12-20 11:43:43 -05:00
Storm Dragon
191181a6a5 This modern installation method is turning out to be a pita. 2024-12-20 11:32:26 -05:00
Storm Dragon
c77d2bddd8 Second attempt at placing files into correct directories. 2024-12-20 11:22:09 -05:00
Storm Dragon
90d8e62db0 Fixed a bug in setup.py. 2024-12-20 11:09:32 -05:00
Storm Dragon
d6a9332f80 Modernize installation. 2024-12-20 11:04:13 -05:00
Storm Dragon
55ce73322b File restructuring. 2024-12-20 10:09:07 -05:00
Storm Dragon
78ca59a938 Found non working unused python directory. Can add it back if needed. 2024-12-20 09:42:47 -05:00
Storm Dragon
dd52d08171 Copy translation files into place with setup. 2024-12-20 08:57:27 -05:00
Storm Dragon
29a2db0e0c Fixed a bug that required the -f flag in conjunction with -e to use pty. 2024-12-15 21:27:39 -05:00
Storm Dragon
b6201235e6 Removed the emacs speech driver. Also some cleanup missed from removing the old espeak driver that no longer worked. 2024-12-11 17:31:05 -05:00
Storm Dragon
f7584463e3 Changed default speech driver to speech-dispatcher. Lowered default speech rate a bit. 2024-12-11 08:46:22 -05:00
Storm Dragon
8ef3d2856b Preparing for 2024.12.10 stable release. 2024-12-10 13:17:33 -05:00
Storm Dragon
8f28ee360a Fixed version conflict. 2024-12-10 12:34:13 -05:00
Storm Dragon
8782d53d03 Updated README. 2024-12-10 12:32:09 -05:00
Storm Dragon
7d276c95ea Merge branch 'testing' minor update to fix up the service file examples. 2024-12-09 19:39:52 -05:00
Storm Dragon
d70073274b Updated auto start example service files for systemd and runit. 2024-12-09 19:38:39 -05:00
Storm Dragon
f6d3baebc1 Resolved version conflict. I need to automate this somehow. 2024-12-09 12:59:55 -05:00
Storm Dragon
5a59ef6325 Updated the man page creation script. 2024-12-09 12:58:14 -05:00
Storm Dragon
baa4c9a937 Removed Braille. BrlTTY does a great job already in the console. Also, Fenrir's implementation was only partially done and not working. 2024-12-08 06:43:22 -05:00
Storm Dragon
3757a1ceeb Updated brlapi driver. Hopefully will now actually work. 2024-12-08 05:02:29 -05:00
Storm Dragon
1696d62526 Updated Braille support now that I'm more familiar with how it should work. 2024-12-08 04:37:53 -05:00
Storm Dragon
84514edc96 Removed the pypy version of the old launcher file. 2024-12-08 00:02:45 -05:00
Storm Dragon
0e787c21ab Removed fenrir-daemon from setup.py. 2024-12-07 23:39:22 -05:00
Storm Dragon
9cdf80b313 Moved flag parsing to launcher. Got read of fenrir-daemon and put everything into the fenrir launcher. 2024-12-07 23:36:21 -05:00
Storm Dragon
24e82936a9 Merge branch 'testing' 2024-12-07 23:12:07 -05:00
Storm Dragon
0f932fb93a Fixed conflict in version. Hopefully this won't happen in future. 2024-12-07 23:11:42 -05:00
Storm Dragon
4c9e0bfd36 Merge branch 'testing' of git.stormux.org:storm/fenrir into testing 2024-12-07 19:47:13 -05:00
Storm Dragon
353f9d3676 Refactor the dependency checker. 2024-12-07 19:46:47 -05:00
Storm Dragon
064172648f Merge branch 'testing' of git.stormux.org:storm/fenrir into testing 2024-12-07 03:15:24 -05:00
Storm Dragon
95170e7d39 Merge branch 'testing' of git.stormux.org:storm/fenrir into testing 2024-12-07 03:04:24 -05:00
Storm Dragon
a93df78ffc Merge branch 'testing' of git.stormux.org:storm/fenrir into testing 2024-12-07 03:03:33 -05:00
Storm Dragon
9758c072b5 Merge branch 'testing' of git.stormux.org:storm/fenrir into testing 2024-12-06 14:08:00 -05:00
Storm Dragon
4054cb2732 Merge branch 'testing' of git.stormux.org:storm/fenrir into testing 2024-12-06 14:07:49 -05:00
Storm Dragon
e3a9937778 Updated the version to show codeName which is provided by the current branch. 2024-12-06 14:07:36 -05:00
storm
ee7baf5314 Testing the auto version increment hook for version. 2024-12-06 13:52:33 -05:00
Storm Dragon
8e4cbc2fd5 Added announce_fenrir_version command bound to fenrir+shift+v. 2024-12-06 02:29:25 -05:00
Storm Dragon
5904c9cf6c Added -v or --version option to command line arguments. 2024-12-06 02:04:55 -05:00
Storm Dragon
5249f13be9 Added -v or --version option to command line arguments. 2024-12-06 02:00:59 -05:00
Storm Dragon
1d91c62c67 A couple more shabangs updated. 2024-12-06 01:08:46 -05:00
Storm Dragon
bc72765544 Improvements to braill driver. 2024-12-05 15:06:47 -05:00
Storm Dragon
b54a226833 More shabangs changed to use env python3 2024-12-05 14:53:10 -05:00
Storm Dragon
295167c865 Updated shabang to use env python3 2024-12-05 14:51:05 -05:00
Storm Dragon
af857d7976 combined configure_fenrir and configure_speechd into a single script. This is the go-to for editing Fenrir settings without doing it by hand. 2024-12-05 06:06:03 -05:00
Storm Dragon
6785fde7c9 Moving to a single configuration file because it is easier to maintain. Existing alternative settings.conf files had inconsistancies. 2024-12-05 02:12:11 -05:00
Storm Dragon
0b4b2c6a84 Rename the speech-dispatcher configuration tool to be more consistant with names. 2024-12-04 14:09:08 -05:00
Storm Dragon
0b2536e0e3 Improved configuration tool. 2024-12-04 14:07:32 -05:00
Storm Dragon
8d8f5dc613 Improved configuration tool. 2024-12-04 14:06:34 -05:00
Storm Dragon
7514744cdd Removed the old espeak driver. There is still speech-dispatcher and generic. 2024-12-02 22:15:25 -05:00
Storm Dragon
d84edf520e Renamed 'docu' directory to 'docs' 2024-12-02 21:18:56 -05:00
Storm Dragon
e123c8ebfa Started project cleanup. 2024-12-02 17:03:16 -05:00
Storm Dragon
bd975df912 Script for helping set the speech-dispatcher voice and module. 2024-12-01 05:02:10 -05:00
Storm Dragon
0a2e9533bd Improve marked text over multiple lines, Remove trailing spaces. 2024-11-29 00:15:45 -05:00
Storm Dragon
1649f18a8f Applied same fix for export to X to import as well. 2024-11-20 17:15:50 -05:00
Storm Dragon
619b67ea70 Attempt to fix the problem where when you switch back from an X session control seems to get stuck. 2024-11-20 16:46:47 -05:00
Storm Dragon
dda9d5e4e7 Fixed an off by one error when marking text. 2024-11-20 11:47:17 -05:00
Storm Dragon
56f403b0b9 Attempt to fix the weird bug where marking any but the first column of the line, then marking on another line causes nothing to be copied. 2024-11-20 03:54:14 -05:00
Storm Dragon
10bc181241 Try to fix an issue where xclip is not being found even though it is installed. 2024-11-20 03:34:51 -05:00
Storm Dragon
8ae82cbc4b Fixed invalid escape sequences. 2024-10-20 19:48:05 -04:00
Storm Dragon
f5242f7092 Fixed a typo in settings files. 2024-03-14 23:49:00 -04:00
Storm Dragon
c9924f66da Shortened size of cached events. 2024-03-13 19:26:29 -04:00
Storm Dragon
6644634d98 Attempt to introduce flood control. BROKEN. 2024-03-13 18:27:46 -04:00
Storm Dragon
a8642a6440 Fixed a small problem with reading spaces. 2024-03-13 17:15:14 -04:00
Storm Dragon
a84bee851d Added setting readNumbersAsDigits. 2024-03-13 01:47:43 -04:00
Storm Dragon
c3d1ccd10b Added setting readNumbersAsDigits. 2024-03-13 00:56:53 -04:00
Storm Dragon
a7b28af947 Merge branch 'master' into storm 2024-03-12 23:52:17 -04:00
Storm Dragon
110a2ddb31 Added a settings file for people who want to use dektalk. 2024-03-09 12:09:23 -05:00
stormdragon2976
842e7c70ac
Merge pull request #69 from adamlincoln/laptop-layout-typo
Fix typo in laptop layout file
2024-02-03 00:23:11 -05:00
Adam Lincoln
f4a6c22c39
Fix typo in laptop layout file 2024-02-02 22:18:12 -05:00
Storm Dragon
9fb72d1df4 Change speakup keyboard layout to use insert+f9 to cycle through punctuation. 2024-01-20 19:56:11 -05:00
Storm Dragon
58fb9441b7 Keyboard echo for all keys is now the default by popular demand. 2024-01-02 23:47:15 -05:00
stormdragon2976
f45a77c7e1 Added the ability for the configuration selection to loop, so you can do multiple configurations in without having to rerun the script. 2023-06-05 10:39:45 -04:00
stormdragon2976
bcf17ff021 got a decent start on a Fenrir configuration utility. 2023-06-05 10:23:08 -04:00
stormdragon2976
63124f4f68 Now, date changes should only be announced at midnight. 2023-06-04 19:01:21 -04:00
stormdragon2976
cd34b02835 I think I fixed the problem with exporting to the X clipboard. 2023-06-03 14:53:54 -04:00
stormdragon2976
b219251d6c Removed what I think is an extra try statement that was causing an indent error. 2023-03-23 15:00:39 -04:00
Chrys
41104d4e40 add workaround for newer linux versions 2023-03-16 22:53:28 +01:00
chrys
7d04672fa4
Update vcsaDriver.py 2023-02-18 18:21:32 +01:00
chrys
be6e1be785
Update vcsaDriver.py 2023-02-18 15:08:53 +01:00
chrys
cd421712f5
Fix vcsu breakage 2023-02-16 21:31:22 +01:00
Chrys
73f4c69cf0 Merge branch 'bleed' 2023-01-10 02:08:56 +01:00
Chrys
99889d4c6c paste demo 2023-01-10 02:08:13 +01:00
stormdragon2976
45cd5e0f1d Fix the sound for fenrirscreenreader user. 2023-01-08 08:13:26 -05:00
stormdragon2976
c605b8afbc Updated the make_fenrir_user.sh script. 2023-01-07 15:02:37 -05:00
Storm Dragon
bd0aeefc9f Fixed a typo in the wiki url. 2022-11-20 11:12:39 -05:00
Storm Dragon
3191d335a3 Updated README. 2022-11-20 11:07:04 -05:00
Chrys
20f2182c8a try 2022-10-24 18:44:43 +02:00
Chrys
de0fb55394 sync with master 2022-10-24 18:42:49 +02:00
Chrys
cb6b66b400 add more navigation commands and update speakup layout 2022-07-13 16:33:16 +02:00
Chrys
cc4e0915dd more work on speakup layout 2022-07-13 16:13:10 +02:00
Chrys
85e52bfe21 add initial speakup layout WIP 2022-07-12 19:37:49 +02:00
Chrys
a78a3f56a7 replace %20 with space in man page 2022-07-12 00:02:33 +02:00
Storm Dragon
492b575b64 Another fix for rhvoice. 2022-06-20 21:22:51 -04:00
Storm Dragon
47f7517ef3 Another word fix for rhvoice. 2022-06-09 03:54:47 -04:00
Storm Dragon
def4690040 Make exceptionss case insensative. 2022-05-22 16:33:25 -04:00
Storm Dragon
072a5e6f6f Changed the fixes to rhvoice into a rhvoice specific diectionary. 2022-05-20 01:19:11 -04:00
Storm Dragon
e857d336d9 Added some custom words to custom dict for better pronounciation. 2022-05-20 00:44:15 -04:00
Chrys
21e97919fa Merge branch 'master' of github.com:chrys87/fenrir 2022-04-09 11:15:47 +02:00
Chrys
77ffac9d5d use env in setup.py 2022-04-09 11:14:48 +02:00
Storm Dragon
01bb846590 Pipewire script updated. 2022-03-31 02:51:26 -04:00
Storm Dragon
e24ad9ec11 Pipewire script updated. 2022-03-31 02:51:04 -04:00
c26e3c545c Updated configure_pipewire.sh to disable logind module so bluetooth doesn't die when switching tty 2022-03-24 03:09:52 -06:00
2a41b95c16 Maybe last change to pipewire configurator? 2022-03-23 05:25:32 -06:00
3abf7dcbe2 One last update to configure_pipewire.sh 2022-03-23 05:03:48 -06:00
bb1ef35056 Updated configure_pipewire.sh 2022-03-23 05:01:09 -06:00
959fecedf9 Added configure_pipewire.sh 2022-03-23 02:16:19 +00:00
Storm Dragon
a0de790154 Make sure the user pulse configureation directory exists before creating the updated file. 2022-03-03 14:22:32 -05:00
Chrys
0ed4eef266 dont toggle when fenrir key is pressed 2022-02-22 20:37:23 +01:00
Chrys
4d9e392b84 remove debugging 2022-02-22 20:32:08 +01:00
Chrys
05e8fd6791 add some other debugging 2022-02-22 20:25:39 +01:00
Chrys
7b20c95309 add some other debugging 2022-02-22 20:23:52 +01:00
Chrys
12bfca24f5 add debug 2022-02-22 19:27:29 +01:00
Chrys
523e9f43b1 remove deprecated 2022-02-22 18:47:29 +01:00
Chrys
eaa86cb376 add comment 2022-02-22 17:55:24 +01:00
Chrys
9a3778e25f add key echo for capslock 2022-02-22 17:47:09 +01:00
Storm Dragon
a3bb82e524 Merge branch 'master' into storm so branches are the same. 2022-02-19 16:44:34 -05:00
Storm Dragon
99496e121b Change laptop.conf keyboard layout to more closely match controls for speech as in the desktop mode. Fenrir+arrow keys use the quick menu for setting rate, volume, speech. 2022-02-19 16:44:10 -05:00
Storm Dragon
22f214ae49 Attempt to go into keyboard echo for characters when capslock is on. 2022-02-19 03:57:24 -05:00
Storm Dragon
05e3b0b3f9 Added a suspender script for people who want to use startx. 2022-01-11 14:59:29 -05:00
Chrys
4a1aa1e388 add .doc 2021-12-22 18:17:20 +01:00
Storm Dragon
d503a8a29b Fixed bug in save settings for laptop keyboard layout. 2021-10-07 22:26:17 -04:00
9fae16caf6 Make x stay as before when moving lines. This is so it's easier to read tables. 2021-08-07 00:32:07 -07:00
Storm Dragon
da216c5e77 Updated settings.storm file. 2021-06-16 00:12:57 -04:00
Storm Dragon
e8f5b8b853 Removed the re.sub() statement and used lstrip() instead. This should be much lighter on resources and provide the same functionality. 2021-06-12 16:16:17 -04:00
f7aca66aa4 Add conf file to fenrir runit autostart script 2021-06-08 15:57:32 -07:00
Storm Dragon
399f021475 Fixed a bug that would crash Fenrir if the clipboard was empty on export to file. 2021-06-08 14:23:04 -04:00
Chrys
7cadae70b6 handle exoort clipboard 2021-06-08 19:23:04 +02:00
Chrys
35b8384210 handle exoort clipboard 2021-06-08 19:01:34 +02:00
Chrys
03ef4710fd handle exoort clipboard 2021-06-08 18:59:04 +02:00
Storm Dragon
2f189da4d0 Updated message spoken on hour for autotime. 2021-06-08 02:23:18 -04:00
Storm Dragon
02152bfb36 Fixed a bug where Fenrir wasn't triggering autotime on the hour, 00. 2021-06-05 23:32:18 -04:00
Storm Dragon
23792fc897 Lowered the volume on the time announce beep. 2021-06-02 18:34:33 -04:00
Storm Dragon
08594bfad2 Updates to the pty2.conf keyboard layout. 2021-05-31 13:28:06 -04:00
Chrys
4955a3d846 try fix key repeat of ctrl 2021-05-27 01:10:01 +02:00
Chrys
231b03ff5c revert incomming 2021-05-19 21:57:04 +02:00
Chrys
43b5a9c4bf revert incomming 2021-05-19 21:56:37 +02:00
Chrys
4502f8321a make beep work with empty line 2021-05-19 21:52:06 +02:00
Chrys
37dad53325 remove some debug 2021-05-19 15:51:48 +02:00
Chrys
d1a17dee91 ignore lineshift 2021-05-19 15:23:28 +02:00
Chrys
ed1aec1901 add auto ident for current line 2021-05-19 14:13:05 +02:00
Chrys
c555bef0eb make beep for indentation work and configurable 2021-05-19 12:03:54 +02:00
Chrys
29dbceee5a make adjust Volume work 2021-05-19 11:37:03 +02:00
Chrys
562ab419d7 add debug 2021-05-19 11:21:30 +02:00
Chrys
a47c2529b0 add debug 2021-05-19 11:20:43 +02:00
Chrys
f261583a4b normalize gstreamer, make generic work 2021-05-19 11:19:11 +02:00
Chrys
7a1f93607d add playFrequence to outputManager 2021-05-19 11:06:44 +02:00
Chrys
9ab92174e3 dont filter out key repeat 2021-05-18 23:56:34 +02:00
Chrys
53e6c67339 react on keypress 2021-05-18 23:38:16 +02:00
428 changed files with 8927 additions and 9888 deletions

View File

@ -3,11 +3,16 @@
## Developers ## Developers
* Chrys: Main coder. * Storm Dragon: Project leader
* Storm Dragon Sounds and keyboard layout, tiny bits of code.
* Jeremiah: Coder. * Jeremiah: Coder.
## Previous Developers
* Chrys: coder.
## Special thanks to: ## Special thanks to:
* F123 Consulting for suggestions, some funding, and endless testing. * F123 Consulting for suggestions, some funding, and endless testing.
* Stormux for continuation of the project.

109
README.md
View File

@ -1,20 +1,27 @@
# Fenrir # Fenrir
A modern, modular, flexible and fast console screenreader. A modern, modular, flexible and fast console screenreader.
It should run on any operating system. If you want to help, or write drivers to make it work on other systems, just let me know. It should run on any operating system. If you want to help, or write drivers to make it work on other systems, just let me know.
This software is licensed under the LGPL v3. This software is licensed under the LGPL v3.
# OS Requirements
## OS Requirements
- Linux (ptyDriver, vcsaDriver, evdevDriver) - Linux (ptyDriver, vcsaDriver, evdevDriver)
- macOS (ptyDriver) - macOS (ptyDriver)
- BSD (ptyDriver) - BSD (ptyDriver)
- Windows (ptyDriver) - Windows (ptyDriver)
# Core Requirements
- python3 >= 3.3
- screen, input, speech, sound or braille drivers dependencies see "Features, Drivers, Extras".
# Features, Drivers, Extras, Dependencies ## Core Requirements
# Input Drivers:
- python3 >= 3.3
- screen, input, speech, sound drivers dependencies see "Features, Drivers, Extras".
## Features, Drivers, Extras, Dependencies
### Input Drivers:
1. "evdevDriver" input driver for linux evdev 1. "evdevDriver" input driver for linux evdev
- python-evdev >=0.6.3 (This is commonly referred to as python3-evdev by your distribution) - python-evdev >=0.6.3 (This is commonly referred to as python3-evdev by your distribution)
- python-pyudev - python-pyudev
@ -25,7 +32,9 @@ This software is licensed under the LGPL v3.
2. "ptyDriver" terminal emulation input driver 2. "ptyDriver" terminal emulation input driver
- python-pyte - python-pyte
# Screen Drivers:
### Screen Drivers:
1. "vcsaDriver" screen driver for linux VCSA devices 1. "vcsaDriver" screen driver for linux VCSA devices
- python-dbus - python-dbus
- Read permission to the following files and services: - Read permission to the following files and services:
@ -36,30 +45,29 @@ This software is licensed under the LGPL v3.
2. "ptyDriver" terminal emulation driver 2. "ptyDriver" terminal emulation driver
- python-pyte - python-pyte
# Speech Drivers:
### Speech Drivers:
1. "genericDriver" (default) speech driver for sound as subprocess: 1. "genericDriver" (default) speech driver for sound as subprocess:
- espeak or espeak-ng - espeak or espeak-ng
2. "espeakDriver" speech driver for Espeak or Espeak-NG: 2. "speechdDriver" speech driver for Speech-dispatcher:
- python-espeak
3. "speechdDriver" speech driver for Speech-dispatcher:
- Speech-dispatcher - Speech-dispatcher
- python-speechd - python-speechd
4. "emacspeakDriver" speech driver for emacspeak 3. "emacspeakDriver" speech driver for emacspeak
- emacspeak - emacspeak
# Braille Drivers:
1. "BrlttyDriver" braille driver (WIP):
- brltty (configured and running)
- python-brlapi
# Sound Drivers: ### Sound Drivers:
1. "genericDriver" (default) sound driver for sound as subprocess: 1. "genericDriver" (default) sound driver for sound as subprocess:
- Sox - Sox
2. "gstreamerDriver" sound driver for gstreamer 2. "gstreamerDriver" sound driver for gstreamer
- gstreamer >=1.0 - gstreamer >=1.0
- GLib - GLib
# Extras:
## Extras:
1. spellchecker 1. spellchecker
- python-pyenchant - python-pyenchant
- aspell-YourLanguageCode (example aspell-en for us English) - aspell-YourLanguageCode (example aspell-en for us English)
@ -68,40 +76,63 @@ This software is licensed under the LGPL v3.
3. Modify system volume: 3. Modify system volume:
- pyalsaaudio (needs libasound2's headers). - pyalsaaudio (needs libasound2's headers).
# installation
## installation
If there is a package for your distrobution of choice, please let us know so we can add it here.
- Archlinux: PKGBUILD in AUR - Archlinux: PKGBUILD in AUR
- PIP: sudo pip install fenrir-screenreader - fenrir: stable release
- fenrir-git: Bleeding edge release
- Manual: - Manual:
- install "espeak" and "sox" with your package manager - install "espeak" and "sox" with your package manager
- sudo pip install -r requirements.txt - sudo pip install -r requirements.txt
- run install.sh and uninstall.sh as root - run install.sh or uninstall.sh as root
- you also can just run it from Git without installing: - You can also just run it from Git without installing:
You can just run the following as root: Requires root privileges
if you are in Fenrir Git rootfolder:
cd src/fenrir/ cd src/fenrir/
sudo ./fenrir sudo ./fenrir
Settings "settings.conf" is located in the "config" directory or after installation in /etc/fenrir/settings. Settings "settings.conf" is located in the "config" directory or after installation in /etc/fenrir/settings.
Take care to use drivers from the config matching your installed drivers. Take care to use drivers from the config matching your installed drivers.
By default it uses: By default it uses:
- sound driver: genericDriver (via sox, could configured in settings.conf) - sound driver: genericDriver (via sox, could configured in settings.conf)
- speech driver: genericDriver (via espeak or espeak-ng, could configured in settings.conf) - speech driver: genericDriver (via espeak or espeak-ng, could configured in settings.conf)
- braille driver: brlttyDriver (WIP)
- input driver: evdevDriver - input driver: evdevDriver
# Configure pulseaudio
Pulseaudio by default does only play sound for the user its currently running for. As fenrir is running as root, your local user does not hear the sound and speech produced by fenrir.
for this fenrir provides a script to configure pulseaudio to stream the sound played as root to your local user. Last is playing the sound then. This is not a issue of fenrir but this is how pulseaudio works.
just run the configuration scipt twice (once as user, once as root).
Run: ## Configure pulseaudio
configure_pulse.sh
sudo configure_pulse.sh
The script could also be found at /tools/ in git Pulseaudio by default only plays sound for the user its currently running for. As fenrir is running as root, your local user does not hear the sound and speech produced by fenrir.
for this fenrir provides a script to configure pulseaudio to stream the sound played as root to your local user. This is not a issue of fenrir but this is how pulseaudio works.
# localization just run the configuration script twice (once as user, once as root):
/usr/share/fenrirscreenreader/tools/configure_pulse.sh
sudo /usr/share/fenrirscreenreader/tools/configure_pulse.sh
The script is also located in the tools directory in git
## Configure pipewire
Pipewire by default only plays sound for the user its currently running for. As fenrir is running as root, your local user does not hear the sound and speech produced by fenrir.
for this fenrir provides a script to configure pipewire to stream the sound played as root to your local user. This is not a issue of fenrir but this is how pipewire works.
just run the configuration script twice (once as user, once as root):
/usr/share/fenrirscreenreader/tools/configure_pipewire.sh
sudo /usr/share/fenrirscreenreader/tools/configure_pipewire.sh
The script is also located in the tools directory in git
## localization
copy fenrir.mo translations file from fenrir/locale/your_language/LC_MESSAGES/fenrir.mo to /usr/share/locale/your_language/LC_MESSAGES/fenrir.mo copy fenrir.mo translations file from fenrir/locale/your_language/LC_MESSAGES/fenrir.mo to /usr/share/locale/your_language/LC_MESSAGES/fenrir.mo
# Documentation
You can see all information on the Wiki: ## Documentation and Support
https://wiki.linux-a11y.org/doku.php?id=fenrir_user_manual
- Email list: [stormux+subscribe@groups.io](mailto:stormux+subscribe@groups.io?subject=subscribe) with the subject subscribe.
- [Fenrir Wiki](https://git.stormux.org/storm/fenrir/wiki)
- IRC: irc.stormux.org #stormux

3
TODO Normal file
View File

@ -0,0 +1,3 @@
V2.0
Cleanup folders and config files.

View File

@ -1,87 +0,0 @@
ToDo list for Fenrir Version 2.0
Things needing little knowledge are marked with "(Easy for contribution)". so just start with those :).
[] = ToDo
[W] = WIP
[X] = Done
[S] = Stopped
Cleanups:
[] Migrate *Data.py to classes and use getter/setter (Easy for contribution)
[] commandsData.py
[] eventData.py
[] generalData.py
[] inputData.py
[] outputData.py
[] punctuationData.py
[] runtimeData.py
[w] screenData.py
[] settingsData -> defaultSettings.py
[] Unify Key Forewarding and Sticky mode for keyboard and bytecode inputDrivers.
[] replace lines by a list insteed of and \n seperated string. (currently we need to split to often) (Easy for contribution)
General (Easy for contribution)
[w] make fenrir runnable without root permissions
[] check pythran for performance
https://github.com/serge-sans-paille/pythran
[] make fenrir runable without settingsfile. fallback to defaults
[] Detect progressbars and just present percent
|=============== |100%
[=================> ] 100%
######################## 100%
Imporove attribute handling
[] beep on review by word (once for multiple, capital wins) (Easy for contribution)
[] configurable (by char, by word, none) (Easy for contribution)
https://github.com/jwilk/vcsapeek/blob/master/linuxvt.py
Improved Say all
[] speech callbacks
[] speech process by word
[] all the text of all pages
[] command to stop and place review cursor at this position
[] command to slow down speech on keypress
[] place say all at clipboard buffer
Table review mode
[] toggle table mode/ select headline
[] next line
[] prev line
[] current line
[] next cell
[] prev cell
[] current cell
[] select field separator
Braille Support:
[] brailleFocusMode:
[] manual = no automatic toggle command used
[] last = follow last used cursor
[] print cursor in review
[] print cursor in textmode
[] word wrapping (if word does not fit print it at next page)
https://docs.python.org/2/library/textwrap.html#textwrap.TextWrapper
drop_whitespace = False
replace_whitespace = False
w.fill(i).split('\n')
[] command toggle used cursor (in manual brailleFocusMode)
[] capture input from braile
[] make routing keys assignable by keyboard
[] make brailleTable configurable
[] pkg-config --variable=tablesdir liblouis
returns on Arch:/usr/share/liblouis/tables
http://mielke.cc/brltty/doc/Manual-BrlAPI/English/BrlAPI.html
https://git.gnome.org/browse/orca/tree/src/orca/braille.py
https://wiki.gnome.org/Attic/LSR/ScratchPad/Braille/BrlAPI
https://github.com/google/brailleback/blob/master/third_party/brltty/Bindings/Python/brlapi.pyx
[] ATK input driver (don't grab on graphical interface)
https://git.linux-a11y.org/AIT/pyatspi2/src/master/examples/keypress.py
Driver (speech):
[S] talkey driver ( verry unresponsive for espeak in linux)
https://pypi.python.org/pypi/ptyprocess#downloads
https://github.com/tbsaunde/yasr/blob/master/yasr/tts.c
[] Dectalk SpeechDriver (Easy for contribution, device needed - i dont own one)
https://github.com/tvraman/emacspeak/blob/master/servers/obsolete/python/dectalk.py
https://github.com/tbsaunde/yasr/blob/master/yasr/tts.c
[] MacOS speech Driver
Settings:
[] menue for settings configuration (Easy for contribution)

View File

@ -1,22 +0,0 @@
ToDo list for Fenrir Version 3.0
Things needing little knowledge are marked with "(Easy for contribution)". so just start with those :).
[] = ToDo
[W] = WIP
[X] = Done
[S] = Stopped
__TODO___
Application Profiles (low priority):
- reimplement process detection without subprocessing
- fenrir is not able to detect the current application inside of screen.
ps -e -H -o pid,pgrp,ppid,tty,cmd
http://stackoverflow.com/questions/24861351/how-to-detect-if-python-script-is-being-run-as-a-background-process/24862213
fd = os.open("/dev/tty5", os.O_RDONLY )
os.tcgetpgrp(fd)
- add perApplicationTrigger trigger
per application commands
per application onScreenChange
per application onInput
- per application shortcuts
___DONE___

View File

@ -1,2 +1,3 @@
#!/bin/sh #!/bin/sh
exec fenrir [ -r ./conf ] && . ./conf
exec fenrir -f

View File

@ -1,18 +1,15 @@
[Unit] [Unit]
Description=Fenrir screenreader Description=Fenrir screenreader
Wants=systemd-udev-settle.service Wants=systemd-udev-settle.service
After=systemd-udev-settle.service sound.target After=systemd-udev-settle.service getty.target
[Service] [Service]
Type=forking Type=forking
PIDFile=/var/run/fenrir.pid PIDFile=/var/run/fenrir.pid
ExecStart=/usr/bin/fenrir-daemon ExecStart=/usr/bin/fenrir
ExecReload=/usr/bin/kill -HUP $MAINPID ExecReload=/usr/bin/kill -HUP $MAINPID
Restart=always Restart=always
#Group=fenrirscreenreader #Group=fenrirscreenreader
#User=fenrirscreenreader #User=fenrirscreenreader
[Install] [Install]
# start as early as possible in boot process
#WantedBy=sound.target
# start as soon the login prompt is available
WantedBy=getty.target WantedBy=getty.target

View File

@ -5,7 +5,7 @@ After=systemd-udev-settle.service sound.target
[Service] [Service]
Type=forking Type=forking
PIDFile=/var/run/fenrir.pid PIDFile=/var/run/fenrir.pid
ExecStart=/usr/local/bin/fenrir-daemon ExecStart=/usr/local/bin/fenrir
ExecReload=/usr/bin/kill -HUP $MAINPID ExecReload=/usr/bin/kill -HUP $MAINPID
Restart=always Restart=always
#Group=fenrirscreenreader #Group=fenrirscreenreader

View File

@ -1,232 +1,134 @@
#!/bin/env python3 #!/usr/bin/env python3
import os, sys
# default installation import os
# core import sys
# speech: speech-dispatcher from dataclasses import dataclass
# sound: sox from typing import List, Optional
# braille: brltty:
defaultInstallation = ['FenrirCore','vcsaDriver','dummyDriver (braille)','evdevDriver','genericDriver (speech)', 'genericDriver (sound)']
currentInstallation = []
print('checking dependencys...') @dataclass
# CORE class Dependency:
print('') name: str
print('fenrir core:') depType: str # screen, input, sound, speech, core
available = True moduleName: str
try: checkCommands: Optional[List[str]] = None # Command-line tools to check
from daemonize import Daemonize pythonImports: Optional[List[str]] = None # Python packages to check
print('python3-daemonize: OK') devicePaths: Optional[List[str]] = None # Device files to check
except:
print('python3-daemonize: FAIL')
available = available and False
try: def check_dependency(dep: Dependency) -> bool:
import enchant """Check if a single dependency is satisfied."""
print('pyenchant: OK') isAvailable = True
except:
print('pyenchant: FAIL')
available = available and False
if available: if dep.pythonImports:
currentInstallation.append('FenrirCore') for package in dep.pythonImports:
try:
moduleName = package.split('.')[0]
__import__(moduleName)
print(f'{package}: OK')
except ImportError:
print(f'{package}: FAIL')
isAvailable = False
# SCREEN if dep.checkCommands:
print('--------------------') for cmd in dep.checkCommands:
print('screen driver') if os.path.exists(f'/usr/bin/{cmd}') or os.path.exists(f'/bin/{cmd}'):
# dummy and debug print(f'{cmd}: OK')
print('dummyDriver (screen): OK') else:
currentInstallation.append('dummyDriver (screen)') print(f'{cmd}: FAIL')
isAvailable = False
# VCSA (screen driver) if dep.devicePaths:
print('vcsaDriver') for path in dep.devicePaths:
available = True if os.path.exists(path):
try: print(f'{path}: OK')
import dbus else:
print('python3-dbus: OK') print(f'{path}: FAIL')
except: isAvailable = False
print('python3-dbus: FAIL')
available = available and False
if os.path.exists('/dev/vcsa'):
print('VCSA Device: OK')
else:
print('VCSA Device: FAIL')
available = available and False
if available:
currentInstallation.append('vcsaDriver')
print('')
# pty emulation (screen driver)
print('ptyDriver')
available = True
try:
import pyte
print('pyte: OK')
except:
print('pyte: FAIL')
available = available and False
if available:
currentInstallation.append('ptyDriver (screen)')
# BRAILLE return isAvailable
print('--------------------')
print('braille driver')
# dummy and debug
print('dummyDriver (braille): OK')
currentInstallation.append('dummyDriver (braille)')
print('debugDriver (braille): OK')
currentInstallation.append('debugDriver (braille)')
# brltty (braille driver)
print('brlapiDriver')
available = True
try:
import brlapi
print('python3-brlapi: OK')
except:
print('python3-brlapi: FAIL')
available = available and False
if available: # Define all dependencies
currentInstallation.append('brlapiDriver') dependencyList = [
# INPUT # Core dependencies
print('--------------------') Dependency('FenrirCore', 'core', 'core',
print('input driver') pythonImports=['daemonize', 'enchant']),
# dummy and debug
print('dummyDriver (input): OK')
currentInstallation.append('dummyDriver (input)')
print('debugDriver (input): OK')
currentInstallation.append('debugDriver (input)')
# evdev (input driver)
print('evdevDriver')
available = True
try:
import evdev
from evdev import InputDevice, UInput
print('python3-evdev: OK')
except:
print('python3-evdev: FAIL')
available = available and False
try:
import pyudev
print('python3-pyudev: OK')
except:
print('python3-pyudev: FAIL')
available = available and False
if available:
currentInstallation.append('evdevDriver')
# pty emulation (input driver)
print('')
print('ptyDriver')
available = True
try:
import pyte
print('pyte: OK')
except:
print('pyte: FAIL')
available = available and False
if available:
currentInstallation.append('ptyDriver (Input)')
# SOUND
print('--------------------')
print('sound driver')
# dummy and debug
print('dummyDriver (sound): OK')
currentInstallation.append('dummyDriver (sound)')
print('debugDriver (sound): OK')
currentInstallation.append('debugDriver (sound)')
print('genericDriver (uses sox by default)')
available = True
if os.path.exists('/usr/bin/play') and os.path.exists('/usr/bin/sox'):
print('sox: OK')
else:
print('sox: FAIL')
available = available and False
if available:
currentInstallation.append('genericDriver (sound)')
print('')
# gstreamer (sound driver)
print('gstreamerDriver')
available = True
try:
import gi
print('gi: OK')
except:
print('gi: FAIL')
available = available and False
try:
from gi.repository import GLib
print('gi GLib: OK')
except:
print('gi GLib: FAIL')
available = available and False
try:
gi.require_version('Gst', '1.0')
from gi.repository import Gst
print('gi Gst: OK')
except:
print('gi Gst: FAIL')
available = available and False
if available:
currentInstallation.append('gstreamerDriver')
# SPEECH # Screen drivers
print('--------------------') Dependency('DummyScreen', 'screen', 'dummyDriver'),
print('speech driver') Dependency('VCSA', 'screen', 'vcsaDriver',
# dummy and debug pythonImports=['dbus'],
print('dummyDriver (speech): OK') devicePaths=['/dev/vcsa']),
currentInstallation.append('dummyDriver (speech)') Dependency('PTY', 'screen', 'ptyDriver',
print('debugDriver (speech): OK') pythonImports=['pyte']),
currentInstallation.append('debugDriver (speech)')
# speechd (speech driver)
print('speechdDriver')
available = True
try:
import speechd
print('python3-speechd: OK')
except:
print('python3-speechd: FAIL')
available = available and False
if available:
currentInstallation.append('speechdDriver')
print('')
# espeak (speech driver)
print('espeakDriver')
available = True
try:
from espeak import espeak
print('python3-espeak: OK')
except:
print('python3-espeak: FAIL')
available = available and False
if available:
currentInstallation.append('espeakDriver')
print('genericDriver (uses espeak-ng by default)')
available = True
if os.path.exists('/usr/bin/espeak-ng') or os.path.exists('/bin/espeak-ng'):
print('espeak-ng: OK')
else:
print('espeak-ng: FAIL')
available = available and False
if available:
currentInstallation.append('genericDriver (speech)')
# SUMMERY # Input drivers
print('====================') Dependency('DummyInput', 'input', 'dummyDriver'),
available = True Dependency('DebugInput', 'input', 'debugDriver'),
missing = [] Dependency('Evdev', 'input', 'evdevDriver',
for element in defaultInstallation: pythonImports=['evdev', 'evdev.InputDevice', 'evdev.UInput', 'pyudev']),
if not element in currentInstallation: Dependency('PTYInput', 'input', 'ptyDriver',
available = False pythonImports=['pyte']),
missing.append(element)
if available: # Sound drivers
print('Default Setup: OK') Dependency('DummySound', 'sound', 'dummyDriver'),
else: Dependency('DebugSound', 'sound', 'debugDriver'),
Dependency('GenericSound', 'sound', 'genericDriver',
checkCommands=['play', 'sox']),
Dependency('GStreamer', 'sound', 'gstreamerDriver',
pythonImports=['gi', 'gi.repository.GLib', 'gi.repository.Gst']),
# Speech drivers
Dependency('DummySpeech', 'speech', 'dummyDriver'),
Dependency('DebugSpeech', 'speech', 'debugDriver'),
Dependency('Speechd', 'speech', 'speechdDriver',
pythonImports=['speechd']),
Dependency('GenericSpeech', 'speech', 'genericDriver',
checkCommands=['espeak-ng'])
]
defaultModules = {
'FenrirCore',
'VCSA',
'Evdev',
'GenericSpeech',
'GenericSound'
}
def check_all_dependencies():
print('Checking dependencies...\n')
availableModules = []
# Group dependencies by type for organized output
for depType in ['core', 'screen', 'input', 'sound', 'speech']:
print(f'{depType.upper()} DRIVERS')
print('-' * 20)
depsOfType = [d for d in dependencyList if d.depType == depType]
for dep in depsOfType:
print(f'\nChecking {dep.name}:')
if check_dependency(dep):
availableModules.append(dep.name)
print('')
print_summary(availableModules)
def print_summary(availableModules: List[str]):
print('=' * 20)
print('SUMMARY')
print('=' * 20)
missingModules = defaultModules - set(availableModules)
if missingModules:
print('Default Setup: FAIL') print('Default Setup: FAIL')
print('Unavailable Default Modules:') print('\nUnavailable Default Modules:')
for e in missing: for module in missingModules:
print(e) print(f'- {module}')
print('you may need to install the missing dependencys for the modules above or reconfigure fenrir to not use them') print('\nYou may need to install the missing dependencies for the modules above or reconfigure fenrir to not use them.')
print('') else:
print('Available Modules:') print('Default Setup: OK')
for element in currentInstallation:
print(element)
print('\nAvailable Modules:')
for module in availableModules:
print(f'- {module}')
if __name__ == '__main__':
check_all_dependencies()

View File

@ -32,12 +32,15 @@ KEY_FENRIR,KEY_KP5=curr_screen
KEY_FENRIR,KEY_KP8=curr_screen_before_cursor KEY_FENRIR,KEY_KP8=curr_screen_before_cursor
KEY_FENRIR,KEY_KP2=curr_screen_after_cursor KEY_FENRIR,KEY_KP2=curr_screen_after_cursor
#=cursor_read_to_end_of_line #=cursor_read_to_end_of_line
#=review_screen_last_char
#=review_screen_first_char
#=cursor_column #=cursor_column
#=cursor_lineno #=cursor_lineno
#=braille_flush #=braille_flush
#=braille_return_to_cursor #=braille_return_to_cursor
#=braille_pan_left #=braille_pan_left
#=braille_pan_right #=braille_pan_right
#=cursor_read_line_to_cursor
KEY_FENRIR,KEY_CTRL,KEY_1=clear_bookmark_1 KEY_FENRIR,KEY_CTRL,KEY_1=clear_bookmark_1
KEY_FENRIR,KEY_SHIFT,KEY_1=set_bookmark_1 KEY_FENRIR,KEY_SHIFT,KEY_1=set_bookmark_1
KEY_FENRIR,KEY_1=bookmark_1 KEY_FENRIR,KEY_1=bookmark_1
@ -122,3 +125,4 @@ KEY_FENRIR,KEY_F7=import_clipboard_from_x
KEY_FENRIR,KEY_F8=export_clipboard_to_x KEY_FENRIR,KEY_F8=export_clipboard_to_x
KEY_FENRIR,KEY_CTRL,KEY_UP=inc_alsa_volume KEY_FENRIR,KEY_CTRL,KEY_UP=inc_alsa_volume
KEY_FENRIR,KEY_CTRL,KEY_DOWN=dec_alsa_volume KEY_FENRIR,KEY_CTRL,KEY_DOWN=dec_alsa_volume
KEY_FENRIR,KEY_SHIFT,KEY_V=announce_fenrir_version

View File

@ -6,7 +6,7 @@ KEY_FENRIR,KEY_I=review_curr_line
KEY_FENRIR,KEY_U=review_prev_line KEY_FENRIR,KEY_U=review_prev_line
KEY_FENRIR,KEY_O=review_next_line KEY_FENRIR,KEY_O=review_next_line
KEY_FENRIR,KEY_SHIFT,KEY_J=review_line_begin KEY_FENRIR,KEY_SHIFT,KEY_J=review_line_begin
KEY_FENRIR,KEY_SHFIT,KEY_L=review_line_end KEY_FENRIR,KEY_SHIFT,KEY_L=review_line_end
KEY_FENRIR,KEY_CTRL,KEY_J=review_line_first_char KEY_FENRIR,KEY_CTRL,KEY_J=review_line_first_char
KEY_FENRIR,KEY_CTRL,KEY_L=review_line_last_char KEY_FENRIR,KEY_CTRL,KEY_L=review_line_last_char
KEY_FENRIR,KEY_ALT,KEY_1=present_first_line KEY_FENRIR,KEY_ALT,KEY_1=present_first_line
@ -83,6 +83,7 @@ KEY_FENRIR,KEY_ENTER=toggle_auto_read
KEY_FENRIR,KEY_CTRL,KEY_T=toggle_auto_time KEY_FENRIR,KEY_CTRL,KEY_T=toggle_auto_time
KEY_FENRIR,KEY_Y=toggle_highlight_tracking KEY_FENRIR,KEY_Y=toggle_highlight_tracking
#=toggle_barrier #=toggle_barrier
#=cursor_read_line_to_cursor
KEY_FENRIR,KEY_Q=quit_fenrir KEY_FENRIR,KEY_Q=quit_fenrir
KEY_FENRIR,KEY_T=time KEY_FENRIR,KEY_T=time
2,KEY_FENRIR,KEY_T=date 2,KEY_FENRIR,KEY_T=date
@ -110,10 +111,12 @@ KEY_FENRIR,KEY_CTRL,KEY_SHIFT,KEY_X=remove_marks
KEY_FENRIR,KEY_X=set_mark KEY_FENRIR,KEY_X=set_mark
KEY_FENRIR,KEY_SHIFT,KEY_X=marked_text KEY_FENRIR,KEY_SHIFT,KEY_X=marked_text
KEY_FENRIR,KEY_F10=toggle_vmenu_mode KEY_FENRIR,KEY_F10=toggle_vmenu_mode
KEY_FENRIR,KEY_UP=inc_speech_volume KEY_FENRIR,KEY_SPACE=current_quick_menu_entry
KEY_FENRIR,KEY_DOWN=dec_speech_volume KEY_FENRIR,KEY_CTRL,KEY_SPACE=current_quick_menu_value
KEY_FENRIR,KEY_RIGHT=inc_speech_rate KEY_FENRIR,KEY_RIGHT=next_quick_menu_entry
KEY_FENRIR,KEY_LEFT=dec_speech_rate KEY_FENRIR,KEY_UP=next_quick_menu_value
KEY_FENRIR,KEY_LEFT=prev_quick_menu_entry
KEY_FENRIR,KEY_DOWN=prev_quick_menu_value
KEY_FENRIR,KEY_ALT,KEY_RIGHT=inc_speech_pitch KEY_FENRIR,KEY_ALT,KEY_RIGHT=inc_speech_pitch
KEY_FENRIR,KEY_ALT,KEY_LEFT=dec_speech_pitch KEY_FENRIR,KEY_ALT,KEY_LEFT=dec_speech_pitch
KEY_FENRIR,KEY_CTRL,KEY_S=save_settings KEY_FENRIR,KEY_CTRL,KEY_S=save_settings
@ -122,3 +125,4 @@ KEY_FENRIR,KEY_F7=import_clipboard_from_x
KEY_FENRIR,KEY_F8=export_clipboard_to_x KEY_FENRIR,KEY_F8=export_clipboard_to_x
KEY_FENRIR,KEY_CTRL,KEY_UP=inc_alsa_volume KEY_FENRIR,KEY_CTRL,KEY_UP=inc_alsa_volume
KEY_FENRIR,KEY_CTRL,KEY_DOWN=dec_alsa_volume KEY_FENRIR,KEY_CTRL,KEY_DOWN=dec_alsa_volume
KEY_FENRIR,KEY_SHIFT,KEY_V=announce_fenrir_version

View File

@ -7,8 +7,8 @@
^[[D=shut_up ^[[D=shut_up
^[O=review_bottom ^[O=review_bottom
^[U=review_top ^[U=review_top
^[[1;3B=review_curr_line #^[[1;3B=review_curr_line
#^[i=review_curr_line ^[i=review_curr_line
^[u=review_prev_line ^[u=review_prev_line
^[o=review_next_line ^[o=review_next_line
^[J=review_line_begin ^[J=review_line_begin
@ -40,3 +40,7 @@
^[x=set_mark ^[x=set_mark
^[\=toggle_auto_indent ^[\=toggle_auto_indent
^[B=copy_last_echo_to_clipboard ^[B=copy_last_echo_to_clipboard
# alt+f8 - export clipboard to X
# ^[[19;3~=export_clipboard_to_x
# # control+f8 - import clipboard from X
# ^[[19;5~=import_clipboard_from_x

View File

@ -0,0 +1,218 @@
# Fenrir comment: copy of speakup DefaultKeyAssignments converted to fenrir syntax
# Fenrir comment: https://android.googlesource.com/kernel/msm/+/android-7.1.0_r0.2/drivers/staging/speakup/DefaultKeyAssignments
# Fenrir comment: The insert or shift key named below is the fenrir key
# This file is intended to give you an overview of the default keys used
# by speakup for it's review functions. You may change them to be
# anything you want but that will take some familiarity with key
# mapping.
# We have remapped the insert or zero key on the keypad to act as a
# shift key. Well, actually as an altgr key. So in the following list
# InsKeyPad-period means hold down the insert key like a shift key and
# hit the keypad period.
# KeyPad-8 Say current Line
KEY_KP8=review_curr_line
# InsKeyPad-8 say from top of screen to reading cursor.
KEY_FENRIR,KEY_KP8=curr_screen_before_cursor
# KeyPad-7 Say Previous Line (UP one line)
KEY_KP7=review_prev_line
# KeyPad-9 Say Next Line (down one line)
KEY_KP9=review_next_line
# KeyPad-5 Say Current Word
KEY_KP5=review_curr_word
# InsKeyPad-5 Spell Current Word
KEY_FENRIR,KEY_KP5=review_curr_word_phonetic
# KeyPad-4 Say Previous Word (left one word)
KEY_KP4=review_prev_word
# InsKeyPad-4 say from left edge of line to reading cursor.
KEY_FENRIR,KEY_KP4=cursor_read_line_to_cursor
# KeyPad-6 Say Next Word (right one word)
KEY_KP6=review_next_word
# InsKeyPad-6 Say from reading cursor to right edge of line.
KEY_FENRIR,KEY_KP6=cursor_read_to_end_of_line
# KeyPad-2 Say Current Letter
KEY_KP2=review_curr_char
# InsKeyPad-2 say current letter phonetically
KEY_FENRIR,KEY_KP2=review_curr_char_phonetic
# KeyPad-1 Say Previous Character (left one letter)
KEY_KP1=review_prev_char
# KeyPad-3 Say Next Character (right one letter)
KEY_KP3=review_next_char
# KeyPad-plus Say Entire Screen
KEY_KPPLUS=curr_screen
# InsKeyPad-plus Say from reading cursor line to bottom of screen.
KEY_FENRIR,KEY_KPPLUS=curr_screen_after_cursor
# KeyPad-Minus Park reading cursor (toggle)
# TODO
# InsKeyPad-minus Say character hex and decimal value.
# TODO
# KeyPad-period Say Position (current line, position and console)
KEY_KPDOT=cursor_position
# InsKeyPad-period say colour attributes of current position.
KEY_FENRIR,KEY_KPDOT=attribute_cursor
# InsKeyPad-9 Move reading cursor to top of screen (insert pgup)
KEY_FENRIR,KEY_KP9=review_bottom
# InsKeyPad-3 Move reading cursor to bottom of screen (insert pgdn)
KEY_FENRIR,KEY_KP3=review_top
# InsKeyPad-7 Move reading cursor to left edge of screen (insert home)
KEY_FENRIR,KEY_KP7=review_screen_first_char
# InsKeyPad-1 Move reading cursor to right edge of screen (insert end)
KEY_FENRIR,KEY_KP1=review_screen_last_char
# ControlKeyPad-1 Move reading cursor to last character on current line.
KEY_CTRL,KEY_KP1=review_line_end
# KeyPad-Enter Shut Up (until another key is hit) and sync reading cursor
KEY_KPENTER=temp_disable_speech
# InsKeyPad-Enter Shut Up (until toggled back on).
KEY_FENRIR,KEY_KPENTER=toggle_speech
# InsKeyPad-star n<x|y> go to line (y) or column (x). Where 'n' is any
# allowed value for the row or column for your current screen.
# TODO
# KeyPad-/ Mark and Cut screen region.
KEY_KPSLASH=copy_marked_to_clipboard
# InsKeyPad-/ Paste screen region into any console.
KEY_FENRIR,KEY_KPSLASH=paste_clipboard
# Hitting any key while speakup is outputting speech will quiet the
# synth until it has caught up with what is being printed on the
# console.
# following by other fenrir commands
KEY_FENRIR,KEY_H=toggle_tutorial_mode
KEY_CTRL=shut_up
KEY_FENRIR,KEY_KP4=review_line_begin
#=review_line_end
#=review_line_first_char
#=review_line_last_char
KEY_FENRIR,KEY_ALT,KEY_1=present_first_line
KEY_FENRIR,KEY_ALT,KEY_2=present_last_line
KEY_FENRIR,KEY_SHIFT,KEY_KP4=review_prev_word_phonetic
KEY_FENRIR,KEY_SHIFT,KEY_KP6=review_next_word_phonetic
KEY_FENRIR,KEY_SHIFT,KEY_KP1=review_prev_char_phonetic
KEY_FENRIR,KEY_SHIFT,KEY_KP3=review_next_char_phonetic
KEY_FENRIR,KEY_CTRL,KEY_KP8=review_up
KEY_FENRIR,KEY_CTRL,KEY_KP2=review_down
#=exit_review
KEY_FENRIR,KEY_I=indent_curr_line
KEY_KPPLUS=curr_screen
#=cursor_column
#=cursor_lineno
#=braille_flush
#=braille_return_to_cursor
#=braille_pan_left
#=braille_pan_right
KEY_FENRIR,KEY_CTRL,KEY_1=clear_bookmark_1
KEY_FENRIR,KEY_SHIFT,KEY_1=set_bookmark_1
KEY_FENRIR,KEY_1=bookmark_1
KEY_FENRIR,KEY_CTRL,KEY_2=clear_bookmark_2
KEY_FENRIR,KEY_SHIFT,KEY_2=set_bookmark_2
KEY_FENRIR,KEY_2=bookmark_2
KEY_FENRIR,KEY_CTRL,KEY_3=clear_bookmark_3
KEY_FENRIR,KEY_SHIFT,KEY_3=set_bookmark_3
KEY_FENRIR,KEY_3=bookmark_3
KEY_FENRIR,KEY_CTRL,KEY_4=clear_bookmark_4
KEY_FENRIR,KEY_SHIFT,KEY_4=set_bookmark_4
KEY_FENRIR,KEY_4=bookmark_4
KEY_FENRIR,KEY_CTRL,KEY_5=clear_bookmark_5
KEY_FENRIR,KEY_SHIFT,KEY_5=set_bookmark_5
KEY_FENRIR,KEY_5=bookmark_5
KEY_FENRIR,KEY_CTRL,KEY_6=clear_bookmark_6
KEY_FENRIR,KEY_SHIFT,KEY_6=set_bookmark_6
KEY_FENRIR,KEY_6=bookmark_6
KEY_FENRIR,KEY_CTRL,KEY_7=clear_bookmark_7
KEY_FENRIR,KEY_SHIFT,KEY_7=set_bookmark_7
KEY_FENRIR,KEY_7=bookmark_7
KEY_FENRIR,KEY_CTRL,KEY_8=clear_bookmark_8
KEY_FENRIR,KEY_SHIFT,KEY_8=set_bookmark_8
KEY_FENRIR,KEY_8=bookmark_8
KEY_FENRIR,KEY_CTRL,KEY_9=clear_bookmark_9
KEY_FENRIR,KEY_SHIFT,KEY_9=set_bookmark_9
KEY_FENRIR,KEY_9=bookmark_9
KEY_FENRIR,KEY_CTRL,KEY_0=clear_bookmark_10
KEY_FENRIR,KEY_SHIFT,KEY_0=set_bookmark_10
KEY_FENRIR,KEY_0=bookmark_10
KEY_FENRIR,KEY_KPSLASH=set_window_application
2,KEY_FENRIR,KEY_KPSLASH=clear_window_application
#=last_incoming
KEY_FENRIR,KEY_F2=toggle_braille
KEY_FENRIR,KEY_F3=toggle_sound
KEY_FENRIR,KEY_F9=toggle_punctuation_level
KEY_FENRIR,KEY_RIGHTBRACE=toggle_auto_spell_check
KEY_FENRIR,KEY_BACKSLASH=toggle_output
KEY_FENRIR,KEY_CTRL,KEY_E=toggle_emoticons
key_FENRIR,KEY_KPENTER=toggle_auto_read
KEY_FENRIR,KEY_CTRL,KEY_T=toggle_auto_time
KEY_FENRIR,KEY_KPASTERISK=toggle_highlight_tracking
KEY_FENRIR,KEY_KPMINUS=toggle_barrier
KEY_FENRIR,KEY_Q=quit_fenrir
KEY_FENRIR,KEY_T=time
2,KEY_FENRIR,KEY_T=date
KEY_KPSLASH=toggle_auto_indent
#=toggle_has_attribute
KEY_FENRIR,KEY_S=spell_check
2,KEY_FENRIR,KEY_S=add_word_to_spell_check
KEY_FENRIR,KEY_SHIFT,KEY_S=remove_word_from_spell_check
KEY_FENRIR,KEY_BACKSPACE=forward_keypress
KEY_FENRIR,KEY_ALT,KEY_UP=inc_sound_volume
KEY_FENRIR,KEY_ALT,KEY_DOWN=dec_sound_volume
KEY_FENRIR,KEY_CTRL,KEY_SHIFT,KEY_C=clear_clipboard
KEY_FENRIR,KEY_HOME=first_clipboard
KEY_FENRIR,KEY_END=last_clipboard
KEY_FENRIR,KEY_PAGEUP=prev_clipboard
KEY_FENRIR,KEY_PAGEDOWN=next_clipboard
KEY_FENRIR,KEY_SHIFT,KEY_C=curr_clipboard
KEY_FENRIR,KEY_CTRL,KEY_C=copy_last_echo_to_clipboard
KEY_FENRIR,KEY_F5=import_clipboard_from_file
KEY_FENRIR,KEY_F6=export_clipboard_to_file
KEY_FENRIR,KEY_CTRL,KEY_SHIFT,KEY_X=remove_marks
KEY_FENRIR,KEY_X=set_mark
KEY_FENRIR,KEY_SHIFT,KEY_X=marked_text
KEY_FENRIR,KEY_F10=toggle_vmenu_mode
KEY_FENRIR,KEY_SPACE=current_quick_menu_entry
KEY_FENRIR,KEY_CTRL,KEY_SPACE=current_quick_menu_value
KEY_FENRIR,KEY_RIGHT=next_quick_menu_entry
KEY_FENRIR,KEY_UP=next_quick_menu_value
KEY_FENRIR,KEY_LEFT=prev_quick_menu_entry
KEY_FENRIR,KEY_DOWN=prev_quick_menu_value
KEY_FENRIR,KEY_CTRL,KEY_S=save_settings
# linux specific
KEY_FENRIR,KEY_F7=import_clipboard_from_x
KEY_FENRIR,KEY_F8=export_clipboard_to_x
KEY_FENRIR,KEY_CTRL,KEY_UP=inc_alsa_volume
KEY_FENRIR,KEY_CTRL,KEY_DOWN=dec_alsa_volume

View File

@ -46,28 +46,33 @@ _:===:Lienie unten
[customDict] [customDict]
[emoticonDict] [emoticonDict]
# This dictionary uses regexp when prefixed with "regex;", so be sure to escape anything that would be parsed by regexp, e.g. *, ., ^, $, etc. regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
regex;[\s*|'|"][\s*|'|"]<{-.-}>:===:Raves regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
regex;[\s*|'|"][\s*|'|"]:-/:===:confused regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
regex;[\s*|'|"][\s*|'|"]8-X:===:skull regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
regex;[\s*|'|"][\s*|'|"]:/:===:confused regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
regex;[\s*|'|"][\s*|'|"]8\):===:smile with sunglasses regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
regex;[\s*|'|"];\)[\s*|'|"]:===:wink regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL regex;(?:^|\s)XD(?:\s|$):===:laughing hard
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile regex;(?:^|\s)\^_\^(?:\s|$):===:happy
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile regex;(?:^|\s)-_-(?:\s|$):===:annoyed
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right regex;(?:^|\s)o_O(?:\s|$):===:confused
# example for arrow left regex;(?:^|\s)>_<(?:\s|$):===:frustrated
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left regex;(?:^|\s)\\o/(?:\s|$):===:hurray
# or regex;(?:^|\s)<3(?:\s|$):===:heart
#([ |^])<-([ ,.!?$]):===:arrow left\2 regex;(?:^|\s)</3(?:\s|$):===:broken heart
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
regex;[\s*|'|"][O|o][O|o][\s*|'|"]:===:WTF? regex;(?:^|\s)<{-.-}>(?:\s|$):===:Raves
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile regex;(?:^|\s)-\.-(?:\s|$):===:bugged
regex;(?:^|\s)>\.<(?:\s|$):===:laughing
regex;(?:^|\s)(?:>:\)|>:-\))(?:\s|$):===:evil smile
regex;(?:^|\s)\^\^(?:\s|$):===:enjoy smile
regex;(?:^|\s)->(?:\s|$):===:arrow right
regex;(?:^|\s)<-(?:\s|$):===:arrow left

View File

@ -46,27 +46,33 @@ _:===:line
[customDict] [customDict]
[emoticonDict] [emoticonDict]
# This dictionary uses regexp when prefixed with "regex;", so be sure to escape anything that would be parsed by regexp, e.g. *, ., ^, $, etc. regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
regex;[\s*|'|"][\s*|'|"]<{-.-}>:===:Raves regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
regex;[\s*|'|"][\s*|'|"]:-/:===:confused regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
regex;[\s*|'|"][\s*|'|"]8-X:===:skull regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
regex;[\s*|'|"][\s*|'|"]:/:===:confused regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
regex;[\s*|'|"];\)[\s*|'|"]:===:wink regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile regex;(?:^|\s)XD(?:\s|$):===:laughing hard
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile regex;(?:^|\s)\^_\^(?:\s|$):===:happy
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right regex;(?:^|\s)-_-(?:\s|$):===:annoyed
# example for arrow left regex;(?:^|\s)o_O(?:\s|$):===:confused
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left regex;(?:^|\s)>_<(?:\s|$):===:frustrated
# or regex;(?:^|\s)\\o/(?:\s|$):===:hurray
#([ |^])<-([ ,.!?$]):===:arrow left\2 regex;(?:^|\s)<3(?:\s|$):===:heart
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left regex;(?:^|\s)</3(?:\s|$):===:broken heart
regex;[\s+|'|"](Oo)|(oO)[\s+|'|"]:===:WTF? regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile regex;(?:^|\s)<{-.-}>(?:\s|$):===:Raves
regex;(?:^|\s)-\.-(?:\s|$):===:bugged
regex;(?:^|\s)>\.<(?:\s|$):===:laughing
regex;(?:^|\s)(?:>:\)|>:-\))(?:\s|$):===:evil smile
regex;(?:^|\s)\^\^(?:\s|$):===:enjoy smile
regex;(?:^|\s)->(?:\s|$):===:arrow right
regex;(?:^|\s)<-(?:\s|$):===:arrow left

View File

@ -46,27 +46,33 @@ _:===:line
[customDict] [customDict]
[emoticonDict] [emoticonDict]
# This dictionary uses regexp when prefixed with "regex;", so be sure to escape anything that would be parsed by regexp, e.g. *, ., ^, $, etc. regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
regex;[\s*|'|"][\s*|'|"]<{-.-}>:===:Raves regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
regex;[\s*|'|"][\s*|'|"]:-/:===:confused regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
regex;[\s*|'|"][\s*|'|"]8-X:===:skull regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
regex;[\s*|'|"][\s*|'|"]:/:===:confused regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
regex;[\s*|'|"];\)[\s*|'|"]:===:wink regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile regex;(?:^|\s)XD(?:\s|$):===:laughing hard
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile regex;(?:^|\s)\^_\^(?:\s|$):===:happy
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right regex;(?:^|\s)-_-(?:\s|$):===:annoyed
# example for arrow left regex;(?:^|\s)o_O(?:\s|$):===:confused
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left regex;(?:^|\s)>_<(?:\s|$):===:frustrated
# or regex;(?:^|\s)\\o/(?:\s|$):===:hurray
#([ |^])<-([ ,.!?$]):===:arrow left\2 regex;(?:^|\s)<3(?:\s|$):===:heart
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left regex;(?:^|\s)</3(?:\s|$):===:broken heart
regex;[\s+|'|"][O|o][O|o][\s+|'|"]:===:WTF? regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile regex;(?:^|\s)<{-.-}>(?:\s|$):===:Raves
regex;(?:^|\s)-\.-(?:\s|$):===:bugged
regex;(?:^|\s)>\.<(?:\s|$):===:laughing
regex;(?:^|\s)(?:>:\)|>:-\))(?:\s|$):===:evil smile
regex;(?:^|\s)\^\^(?:\s|$):===:enjoy smile
regex;(?:^|\s)->(?:\s|$):===:arrow right
regex;(?:^|\s)<-(?:\s|$):===:arrow left

View File

@ -46,28 +46,33 @@ _:===:subrayado
[customDict] [customDict]
[emoticonDict] [emoticonDict]
# This dictionary uses regexp when prefixed with "regex;", so be sure to escape anything that would be parsed by regexp, e.g. *, ., ^, $, etc. regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
regex;[\s*|'|"][\s*|'|"]<{-.-}>:===:Raves regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
regex;[\s*|'|"][\s*|'|"]:-/:===:confused regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
regex;[\s*|'|"][\s*|'|"]8-X:===:skull regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
regex;[\s*|'|"][\s*|'|"]:/:===:confused regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
regex;[\s*|'|"][\s*|'|"]8\):===:smile with sunglasses regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
regex;[\s*|'|"];\)[\s*|'|"]:===:wink regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL regex;(?:^|\s)XD(?:\s|$):===:laughing hard
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile regex;(?:^|\s)\^_\^(?:\s|$):===:happy
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile regex;(?:^|\s)-_-(?:\s|$):===:annoyed
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right regex;(?:^|\s)o_O(?:\s|$):===:confused
# example for arrow left regex;(?:^|\s)>_<(?:\s|$):===:frustrated
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left regex;(?:^|\s)\\o/(?:\s|$):===:hurray
# or regex;(?:^|\s)<3(?:\s|$):===:heart
#([ |^])<-([ ,.!?$]):===:arrow left\2 regex;(?:^|\s)</3(?:\s|$):===:broken heart
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
regex;[\s*|'|"][O|o][O|o][\s*|'|"]:===:WTF? regex;(?:^|\s)<{-.-}>(?:\s|$):===:Raves
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile regex;(?:^|\s)-\.-(?:\s|$):===:bugged
regex;(?:^|\s)>\.<(?:\s|$):===:laughing
regex;(?:^|\s)(?:>:\)|>:-\))(?:\s|$):===:evil smile
regex;(?:^|\s)\^\^(?:\s|$):===:enjoy smile
regex;(?:^|\s)->(?:\s|$):===:arrow right
regex;(?:^|\s)<-(?:\s|$):===:arrow left

View File

@ -46,28 +46,33 @@ _:===:souligné
[customDict] [customDict]
[emoticonDict] [emoticonDict]
# This dictionary uses regexp when prefixed with "regex;", so be sure to escape anything that would be parsed by regexp, e.g. *, ., ^, $, etc. regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
regex;[\s*|'|"][\s*|'|"]<{-.-}>:===:Raves regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
regex;[\s*|'|"][\s*|'|"]:-/:===:confused regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
regex;[\s*|'|"][\s*|'|"]8-X:===:skull regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
regex;[\s*|'|"][\s*|'|"]:/:===:confused regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
regex;[\s*|'|"][\s*|'|"]8\):===:smile with sunglasses regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
regex;[\s*|'|"];\)[\s*|'|"]:===:wink regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL regex;(?:^|\s)XD(?:\s|$):===:laughing hard
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile regex;(?:^|\s)\^_\^(?:\s|$):===:happy
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile regex;(?:^|\s)-_-(?:\s|$):===:annoyed
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right regex;(?:^|\s)o_O(?:\s|$):===:confused
# example for arrow left regex;(?:^|\s)>_<(?:\s|$):===:frustrated
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left regex;(?:^|\s)\\o/(?:\s|$):===:hurray
# or regex;(?:^|\s)<3(?:\s|$):===:heart
#([ |^])<-([ ,.!?$]):===:arrow left\2 regex;(?:^|\s)</3(?:\s|$):===:broken heart
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
regex;[\s*|'|"][O|o][O|o][\s*|'|"]:===:WTF? regex;(?:^|\s)<{-.-}>(?:\s|$):===:Raves
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile regex;(?:^|\s)-\.-(?:\s|$):===:bugged
regex;(?:^|\s)>\.<(?:\s|$):===:laughing
regex;(?:^|\s)(?:>:\)|>:-\))(?:\s|$):===:evil smile
regex;(?:^|\s)\^\^(?:\s|$):===:enjoy smile
regex;(?:^|\s)->(?:\s|$):===:arrow right
regex;(?:^|\s)<-(?:\s|$):===:arrow left

View File

@ -46,28 +46,33 @@ _:===:podkreślnik
[customDict] [customDict]
[emoticonDict] [emoticonDict]
# This dictionary uses regexp when prefixed with "regex;", so be sure to escape anything that would be parsed by regexp, e.g. *, ., ^, $, etc. regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
regex;[\s*|'|"][\s*|'|"]<{-.-}>:===:Raves regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
regex;[\s*|'|"][\s*|'|"]:-/:===:confused regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
regex;[\s*|'|"][\s*|'|"]8-X:===:skull regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
regex;[\s*|'|"][\s*|'|"]:/:===:confused regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
regex;[\s*|'|"][\s*|'|"]8\):===:smile with sunglasses regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
regex;[\s*|'|"];\)[\s*|'|"]:===:wink regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL regex;(?:^|\s)XD(?:\s|$):===:laughing hard
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile regex;(?:^|\s)\^_\^(?:\s|$):===:happy
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile regex;(?:^|\s)-_-(?:\s|$):===:annoyed
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right regex;(?:^|\s)o_O(?:\s|$):===:confused
# example for arrow left regex;(?:^|\s)>_<(?:\s|$):===:frustrated
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left regex;(?:^|\s)\\o/(?:\s|$):===:hurray
# or regex;(?:^|\s)<3(?:\s|$):===:heart
#([ |^])<-([ ,.!?$]):===:arrow left\2 regex;(?:^|\s)</3(?:\s|$):===:broken heart
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
regex;[\s*|'|"][O|o][O|o][\s*|'|"]:===:WTF? regex;(?:^|\s)<{-.-}>(?:\s|$):===:Raves
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile regex;(?:^|\s)-\.-(?:\s|$):===:bugged
regex;(?:^|\s)>\.<(?:\s|$):===:laughing
regex;(?:^|\s)(?:>:\)|>:-\))(?:\s|$):===:evil smile
regex;(?:^|\s)\^\^(?:\s|$):===:enjoy smile
regex;(?:^|\s)->(?:\s|$):===:arrow right
regex;(?:^|\s)<-(?:\s|$):===:arrow left

View File

@ -0,0 +1,84 @@
# how to use this file?
# the # on the beginning of the line is a comment
# the different sections are seperated by [<name>Dict] <name> is the section name. Dict is a keyword
# the entrys are seperated with :===: in words colon tripple equal colon ( to not collide with substitutions)
[levelDict]
none:===:
some:===:-$~+*-/\@
most:===:.,:-$~+*-/\@!#%^&*()[]}{<>;
all:===:!"#$%& \'()*+,-./:;<=>?@[\\]^_`{|}~
[punctDict]
:===:space
&:===:and
':===:apostrophe
@:===:at
\:===:backslash
|:===:bar
!:===:bang
^:===:carrot
::===:colon
,:===:comma
-:===:dash
$:===:dollar
.:===:dot
>:===:greater
`:===:grave
#:===:hash
{:===:left brace
[:===:left bracket
(:===:left paren
<:===:less
%:===:percent
+:===:plus
?:===:question?
":===:quote
):===:right paren
}:===:right brace
]:===:right bracket
;:===:semicolon
/:===:slash
*:===:star
~:===:tilde
_:===:line
=:===:equals
[customDict]
regex;(?i)certificates:===:certiffikets
regex;(?i)certificate:===:certifficate
regex;(?i)lowblow:===:LowBlow
regex;(?i)nginx:===:EngineX
regex;(?i)shit:===:shitt
regex;(?i)slither:===:slitther
[emoticonDict]
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
regex;(?:^|\s)o_O(?:\s|$):===:confused
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
regex;(?:^|\s)<3(?:\s|$):===:heart
regex;(?:^|\s)</3(?:\s|$):===:broken heart
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
regex;(?:^|\s)<{-.-}>(?:\s|$):===:Raves
regex;(?:^|\s)-\.-(?:\s|$):===:bugged
regex;(?:^|\s)>\.<(?:\s|$):===:laughing
regex;(?:^|\s)(?:>:\)|>:-\))(?:\s|$):===:evil smile
regex;(?:^|\s)\^\^(?:\s|$):===:enjoy smile
regex;(?:^|\s)->(?:\s|$):===:arrow right
regex;(?:^|\s)<-(?:\s|$):===:arrow left

View File

@ -1,241 +0,0 @@
[sound]
# Turn sound on or off:
enabled=True
# Select the driver used to play sounds, choices are generic and gstreamer.
# Sox is the default.
driver=genericDriver
# Sound themes. These are the pack of sounds used for sound alerts.
# Sound packs may be located at /usr/share/sounds
# For system wide availability, or ~/.local/share/fenrirscreenreader/sounds
# For the current user.
theme=default
# Sound volume controls how loud the sounds for your chosen soundpack are.
# 0 is quietest, 1.0 is loudest.
volume=1.0
# shell commands for generic sound driver
# the folowing variable are substituded
# fenrirVolume = the current volume setting
# fenrirSoundFile = the soundfile for an soundicon
# fenrirFrequence = the frequence to play
# fenrirDuration = the duration of the frequence
# the following command is used for play a soundfile
genericPlayFileCommand=play -q -v fenrirVolume fenrirSoundFile 2>/dev/null
#the following command is used for generating a frequency beep
genericFrequencyCommand=play -q -v fenrirVolume -n -c1 synth fenrirDuration sine fenrirFrequence 2>/dev/null
[speech]
# Turn speech on or off:
enabled=True
# Select speech driver, options are speechdDriver (default), genericDriver or espeakDriver:
#driver=speechdDriver
#driver=genericDriver
driver=espeakDriver
# server path for emacspeak
serverPath=
# The rate selects how fast Fenrir will speak. Options range from 0, slowest, to 1.0, fastest.
rate=0.35
# Pitch controls the pitch of the voice, select from 0, lowest, to 1.0, highest.
pitch=0.5
# Pitch for capital letters
capitalPitch=0.9
# Volume controls the loudness of the voice, select from 0, quietest, to 1.0, loudest.
volume=1.0
# Module is used for Speech-dispatcher, to select the speech module you want to use.
# Consult Speech-dispatcher's configuration and help ti find out which modules are available.
# The default is Espeak.
module=espeak
# 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=f3
# Select the language you want Fenrir to use.
language=en_US
# Read new text as it happens?
autoReadIncoming=True
# genericSpeechCommand is the command that is executed for talking
# the following variables are replaced with values
# fenrirText = is the text that should be spoken
# fenrirModule = may be the speech module used in Speech-dispatcher, not every TTY needs this
# fenrirLanguage = the language
# fenrirVoice = is the current voice that should be used
# the current volume, pitch and rate is calculated like this
# value = min + settingValue * (min - max )
# fenrirVolume = is replaced with the current volume
# fenrirPitch = is replaced with the current pitch
# fenrirRate = is replaced with the current speed (speech rate)
genericSpeechCommand=espeak -a fenrirVolume -s fenrirRate -p fenrirPitch -v fenrirVoice -- "fenrirText"
# these are the minimum and maximum values of the TTS system used in genericSpeechCommand
fenrirMinVolume=0
fenrirMaxVolume=200
fenrirMinPitch=0
fenrirMaxPitch=99
fenrirMinRate=80
fenrirMaxRate=450
[braille]
enabled=False
driver=dummyDriver
layout=en
# to what should the flush timeout relate to
# word = flush after (number of words to display) * seconds
# char = flush after (number of chars to display) * seconds
# fix = flush after X seconds
# none = no automatic flush (manual via shortcut)
flushMode=word
# seconds to flush or
# -1 = no automatic flush (manual via shortcut)
flushTimeout=3
# how should the cursor be focused?
# page = if cursor cross the border move to next page and start at beginn
# fixCell = ajust the cursor on an special cell where it is always placed. the display scroll here more smooth.
cursorFocusMode=page
# define the cell on the Braille device where fenrir should scroll and keep the cursor
# 0 = first cell on device
# -1 = last cell on device
# >0 = fix cell number
fixCursorOnCell=-1
#How should the braille follow the focus
# none = no automatic toggle command used
# review = priority to review
# last = follow last used cursor
cursorFollowMode=review
# number of cells in panning (horizontal)
# 0 = display size, >0 number of cells
panSizeHorizontal=0
[screen]
driver=vcsaDriver
encoding=auto
screenUpdateDelay=0.05
suspendingScreen=
autodetectSuspendingScreen=True
[keyboard]
driver=evdevDriver
# filter input devices NOMICE, ALL or a DEVICE NAME
device=ALL
# gives Fenrir exclusive access to the keyboard and let consume keystrokes.
grabDevices=True
ignoreShortcuts=False
# the current shortcut layout located in /etc/fenrirscreenreader/keyboard
keyboardLayout=desktop
# echo chars while typing.
charEcho=True
## echo deleted chars
charDeleteEcho=True
# echo word after pressing space
wordEcho=True
# interrupt speech on any keypress
interruptOnKeyPress=True
# you can filter the keys on that the speech should interrupt (empty = all keys, otherwhise the given keys)
interruptOnKeyPressFilter=
# timeout for double tap in sec
doubleTapTimeout=0.2
[general]
debugLevel=0
# debugMode sets where the debug output should send to:
# debugMode=File writes to debugFile (Default:/tmp/fenrir-PID.log)
# debugMode=Print just prints on the screen
debugMode=File
debugFile=
punctuationProfile=default
punctuationLevel=some
respectPunctuationPause=True
newLinePause=True
numberOfClipboards=10
# used path for "export_clipboard_to_file"
# $user is replaced by username
clipboardExportPath=/tmp/fenrirClipboard
emoticons=True
# define the current Fenrir key
fenrirKeys=KEY_KP0,KEY_META
scriptKeys=KEY_COMPOSE
timeFormat=%H:%M:%P
dateFormat=%A, %B %d, %Y
autoSpellCheck=True
spellCheckLanguage=en_US
scriptPath=/usr/share/fenrirscreenreader/scripts
commandPath=
#fenrirBGColor = the backgroundcolor
#fenrirFGColor = the foregroundcolor
#fenrirUnderline = speak the underline attribute
#fenrirBold = speak the bold attribute
#fenrirBlink = speak the blink attribute
#fenrirFont = the font
#fenrirFontSize = the fontsize
attributeFormatString=Background fenrirBGColor,Foreground fenrirFGColor,fenrirUnderline,fenrirBold,fenrirBlink, Font fenrirFont,Fontsize fenrirFontSize
autoPresentIndent=False
# play a sound when attributes are changeing
hasAttributes=True
# shell for PTY emulatiun (empty = default shell)
shell=
[focus]
cursor=True
highlight=False
[remote]
enable=True
# driver
# unixDriver = unix sockets
# tcpDriver = tcp (localhost only)
driver=unixDriver
# tcp port
port=22447
# socket filepath
socketFile=
# allow settings to overwrite
enableSettingsRemote=True
# allow commands to be executed
enableCommandRemote=True
[barrier]
enabled=True
leftBarriers=│└┌─
rightBarriers=│┘┐─
[review]
lineBreak=True
endOfScreen=True
# leave the review when pressing a key
leaveReviewOnCursorChange=True
# leave the review when changing the screen
leaveReviewOnScreenChange=True
[promote]
enabled=True
inactiveTimeoutSec=120
list=
[menu]
vmenuPath=
quickMenu=speech#rate;speech#pitch;speech#volume
[time]
enabled=False
presentTime=True
presentDate=True
delaySec=0
# present time after to given minutes example every 15 minutes: 00,15,30,45
# if delaySec is >0 onMinutes is ignored
onMinutes=00,30
# announce via soundicon
announce=True
# interrupt current speech for time announcement
interrupt=False

View File

@ -1,251 +0,0 @@
[sound]
# Turn sound on or off:
enabled=True
# Select the driver used to play sounds, choices are genericDriver and gstreamerDriver.
# Sox is the default.
#driver=gstreamerDriver
driver=genericDriver
# Sound themes. These are the pack of sounds used for sound alerts.
# Sound packs may be located at /usr/share/sounds
# For system wide availability, or ~/.local/share/fenrirscreenreader/sounds
# For the current user.
theme=default
# Sound volume controls how loud the sounds for your selected soundpack are.
# 0 is quietest, 1.0 is loudest.
volume=1.0
# shell commands for generic sound driver
# the folowing variable are substituted
# fenrirVolume = the current volume setting
# fenrirSoundFile = the soundfile for an soundicon
# fenrirFrequence = the frequency to play
# fenrirDuration = the duration of the frequency
# the following command is used to play a soundfile
genericPlayFileCommand=play -q -v fenrirVolume fenrirSoundFile
#the following command is used to generate a frequency beep
genericFrequencyCommand=play -q -v fenrirVolume -n -c1 synth fenrirDuration sine fenrirFrequence
[speech]
# Turn speech on or off:
enabled=True
# Select speech driver, options are speechdDriver (default), genericDriver or espeakDriver:
#driver=speechdDriver
#driver=espeakDriver
driver=genericDriver
# server path for emacspeak
serverPath=/home/chrys/Projekte/emacspeak/servers/espeak
# The rate selects how fast Fenrir will speak. Options range from 0, slowest, to 1.0, fastest.
rate=0.65
# Pitch controls the pitch of the voice, select from 0, lowest, to 1.0, highest.
pitch=0.5
# Pitch for capital letters
capitalPitch=0.9
# Volume controls the loudness of the voice, select from 0, quietest, to 1.0, loudest.
volume=1.0
# Module is used for Speech-dispatcher, to select the speech module you want to use.
# Consult Speech-dispatcher's configuration and help Fenrir find out which modules are available.
# The default is espeak.
#module=espeak
# 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.
# This also sets the voice used in the generic driver.
voice=en-us
# Select the language you want Fenrir to use.
#language=english-us
# Read new text as it happens?
autoReadIncoming=True
# genericSpeechCommand is the command that is executed for talking
# the following variables are replaced with values
# fenrirText = is the text that should be spoken
# fenrirModule = may be the speech module like used in speech-dispatcher, not every TTY need this
# fenrirLanguage = the language
# fenrirVoice = is the current voice that should be used. Set the voice variable above.
# the current volume, pitch and rate is calculated like this
# value = min + settingValue * (min - max )
# fenrirVolume = is replaced with the current volume
# fenrirPitch = is replaced with the current pitch
# fenrirRate = is replaced with the current speed (speech rate)
genericSpeechCommand=espeak -a fenrirVolume -s fenrirRate -p fenrirPitch -v fenrirVoice -- "fenrirText"
# those are the min and max values of the TTS system that is used in genericSpeechCommand
fenrirMinVolume=0
fenrirMaxVolume=200
fenrirMinPitch=0
fenrirMaxPitch=99
fenrirMinRate=80
fenrirMaxRate=450
[braille]
enabled=False
driver=dummyDriver
layout=en
# to what should the flush timeout relate to
# word = flush after (number of words to display) * seconds
# char = flush after (number of chars to display) * seconds
# fix = flush after X seconds
# none = no automatic flush (manual via shortcut)
flushMode=word
# seconds to flush or
# -1 = no automatic flush (manual via shortcut)
flushTimeout=3
# how should the cursor be focused?
# page = if cursor cross the border move to next page and start at beginn
# fixCell = ajust the cursor on an special cell where it is always placed. the display scroll here more smooth.
cursorFocusMode=page
# define the cell on the Braille device where fenrir should scroll and keep the cursor
# 0 = first cell on device
# -1 = last cell on device
# >0 = fix cell number
fixCursorOnCell=-1
#How should the braille follow the focus
# none = no automatic toggle command used
# review = priority to review
# last = follow last used cursor
cursorFollowMode=review
# number of cells in panning (horizontal)
# 0 = display size, >0 number of cells
panSizeHorizontal=0
[screen]
driver=vcsaDriver
encoding=auto
screenUpdateDelay=0.05
suspendingScreen=
autodetectSuspendingScreen=True
[keyboard]
driver=evdevDriver
# filter input devices NOMICE, ALL or a DEVICE NAME
device=ALL
# gives Fenrir exclusive access to the keyboard and lets it control keystrokes.
grabDevices=True
ignoreShortcuts=False
# the current shortcut layout located in /etc/fenrirscreenreader/keyboard
keyboardLayout=desktop
# echo chars while typing.
charEcho=False
# echo deleted chars
charDeleteEcho=True
# echo word after pressing space
wordEcho=False
# interrupt speech on any keypress
interruptOnKeyPress=False
# you can filter the keys on that the speech should interrupt (empty = all keys, otherwhise the given keys)
interruptOnKeyPressFilter=
# timeout for double tap in sec
doubleTapTimeout=0.2
[general]
debugLevel=0
# debugMode sets where the debug output should send to:
# debugMode=File writes to debugFile (Default:/tmp/fenrir-PID.log)
# debugMode=Print just prints on the screen
debugMode=File
debugFile=
punctuationProfile=default
punctuationLevel=some
respectPunctuationPause=True
newLinePause=True
numberOfClipboards=10
# used path for "export_clipboard_to_file"
# $user is replaced by username
#clipboardExportPath=/home/$user/fenrirClipboard
clipboardExportPath=/tmp/fenrirClipboard
emoticons=True
# define the current Fenrir key
fenrirKeys=KEY_KP0,KEY_META,KEY_INSERT
scriptKeys=KEY_COMPOSE
timeFormat=%H:%M:%P
dateFormat=%A, %B %d, %Y
autoSpellCheck=True
spellCheckLanguage=en_US
# path for your scripts "scriptKeys" functionality
scriptPath=/usr/share/fenrirscreenreader/scripts
# overload commands, and create new one without changing Fenrir default
commandPath=
#fenrirBGColor = the backgroundcolor
#fenrirFGColor = the foregroundcolor
#fenrirUnderline = speak the underline attribute
#fenrirBold = speak the bold attribute
#fenrirBlink = speak the blink attribute
#fenrirFont = the font
#fenrirFontSize = the fontsize
attributeFormatString=Background fenrirBGColor,Foreground fenrirFGColor,fenrirUnderline,fenrirBold,fenrirBlink, Font fenrirFont,Fontsize fenrirFontSize
autoPresentIndent=False
# play a sound when attributes are changeing
hasAttributes=True
# shell for PTY emulatiun (empty = default shell)
shell=
[focus]
#follow the text cursor
cursor=True
#follow highlighted text changes
highlight=False
[remote]
enable=True
# driver
# unixDriver = unix sockets
# tcpDriver = tcp (localhost only)
driver=unixDriver
# tcp port
port=22447
# socket filepath
socketFile=
# allow settings to overwrite
enableSettingsRemote=True
# allow commands to be executed
enableCommandRemote=True
[barrier]
enabled=True
leftBarriers=│└┌─
rightBarriers=│┘┐─
[review]
lineBreak=True
endOfScreen=True
# leave the review when pressing a key
leaveReviewOnCursorChange=True
# leave the review when changing the screen
leaveReviewOnScreenChange=True
[promote]
enabled=True
inactiveTimeoutSec=120
list=
[menu]
vmenuPath=
quickMenu=speech#rate;speech#pitch;speech#volume
[time]
# automatic time anouncement
enabled=False
# present time
presentTime=True
# present date (on change)
presentDate=True
# present time after a given period of seconds
delaySec=0
# present time after to given minutes example every 15 minutes: 00,15,30,45
# if delaySec is >0 onMinutes is ignored
onMinutes=00,30
# announce via soundicon (not interrupting)
announce=True
# interrupt current speech for time announcement
interrupt=False

View File

@ -1,251 +0,0 @@
[sound]
# Turn sound on or off:
enabled=True
# Select the driver used to play sounds, choices are genericDriver and gstreamerDriver.
# Sox is the default.
#driver=gstreamerDriver
driver=genericDriver
# Sound themes. These are the pack of sounds used for sound alerts.
# Sound packs may be located at /usr/share/sounds
# For system wide availability, or ~/.local/share/fenrirscreenreader/sounds
# For the current user.
theme=default
# Sound volume controls how loud the sounds for your selected soundpack are.
# 0 is quietest, 1.0 is loudest.
volume=1.0
# shell commands for generic sound driver
# the folowing variable are substituted
# fenrirVolume = the current volume setting
# fenrirSoundFile = the soundfile for an soundicon
# fenrirFrequence = the frequency to play
# fenrirDuration = the duration of the frequency
# the following command is used to play a soundfile
genericPlayFileCommand=play -q -v fenrirVolume fenrirSoundFile
#the following command is used to generate a frequency beep
genericFrequencyCommand=play -q -v fenrirVolume -n -c1 synth fenrirDuration sine fenrirFrequence
[speech]
# Turn speech on or off:
enabled=True
# Select speech driver, options are speechdDriver (default), genericDriver or espeakDriver:
#driver=speechdDriver
#driver=espeakDriver
driver=genericDriver
# server path for emacspeak
serverPath=/home/chrys/Projekte/emacspeak/servers/espeak
# The rate selects how fast Fenrir will speak. Options range from 0, slowest, to 1.0, fastest.
rate=0.65
# Pitch controls the pitch of the voice, select from 0, lowest, to 1.0, highest.
pitch=0.5
# Pitch for capital letters
capitalPitch=0.9
# Volume controls the loudness of the voice, select from 0, quietest, to 1.0, loudest.
volume=1.0
# Module is used for Speech-dispatcher, to select the speech module you want to use.
# Consult Speech-dispatcher's configuration and help Fenrir find out which modules are available.
# The default is espeak.
#module=espeak
# 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.
# This also sets the voice used in the generic driver.
voice=en-us
# Select the language you want Fenrir to use.
#language=english-us
# Read new text as it happens?
autoReadIncoming=True
# genericSpeechCommand is the command that is executed for talking
# the following variables are replaced with values
# fenrirText = is the text that should be spoken
# fenrirModule = may be the speech module like used in speech-dispatcher, not every TTY need this
# fenrirLanguage = the language
# fenrirVoice = is the current voice that should be used. Set the voice variable above.
# the current volume, pitch and rate is calculated like this
# value = min + settingValue * (min - max )
# fenrirVolume = is replaced with the current volume
# fenrirPitch = is replaced with the current pitch
# fenrirRate = is replaced with the current speed (speech rate)
genericSpeechCommand=espeak -a fenrirVolume -s fenrirRate -p fenrirPitch -v fenrirVoice -- "fenrirText"
# those are the min and max values of the TTS system that is used in genericSpeechCommand
fenrirMinVolume=0
fenrirMaxVolume=200
fenrirMinPitch=0
fenrirMaxPitch=99
fenrirMinRate=80
fenrirMaxRate=450
[braille]
enabled=False
driver=dummyDriver
layout=en
# to what should the flush timeout relate to
# word = flush after (number of words to display) * seconds
# char = flush after (number of chars to display) * seconds
# fix = flush after X seconds
# none = no automatic flush (manual via shortcut)
flushMode=word
# seconds to flush or
# -1 = no automatic flush (manual via shortcut)
flushTimeout=3
# how should the cursor be focused?
# page = if cursor cross the border move to next page and start at beginn
# fixCell = ajust the cursor on an special cell where it is always placed. the display scroll here more smooth.
cursorFocusMode=page
# define the cell on the Braille device where fenrir should scroll and keep the cursor
# 0 = first cell on device
# -1 = last cell on device
# >0 = fix cell number
fixCursorOnCell=-1
#How should the braille follow the focus
# none = no automatic toggle command used
# review = priority to review
# last = follow last used cursor
cursorFollowMode=review
# number of cells in panning (horizontal)
# 0 = display size, >0 number of cells
panSizeHorizontal=0
[screen]
driver=vcsaDriver
encoding=auto
screenUpdateDelay=0.05
suspendingScreen=
autodetectSuspendingScreen=True
[keyboard]
driver=evdevDriver
# filter input devices NOMICE, ALL or a DEVICE NAME
device=ALL
# gives Fenrir exclusive access to the keyboard and lets it control keystrokes.
grabDevices=True
ignoreShortcuts=False
# the current shortcut layout located in /etc/fenrirscreenreader/keyboard
keyboardLayout=desktop
# echo chars while typing.
charEcho=False
# echo deleted chars
charDeleteEcho=True
# echo word after pressing space
wordEcho=False
# interrupt speech on any keypress
interruptOnKeyPress=False
# you can filter the keys on that the speech should interrupt (empty = all keys, otherwhise the given keys)
interruptOnKeyPressFilter=
# timeout for double tap in sec
doubleTapTimeout=0.2
[general]
debugLevel=0
# debugMode sets where the debug output should send to:
# debugMode=File writes to debugFile (Default:/tmp/fenrir-PID.log)
# debugMode=Print just prints on the screen
debugMode=File
debugFile=
punctuationProfile=default
punctuationLevel=some
respectPunctuationPause=True
newLinePause=True
numberOfClipboards=10
# used path for "export_clipboard_to_file"
# $user is replaced by username
#clipboardExportPath=/home/$user/fenrirClipboard
clipboardExportPath=/tmp/fenrirClipboard
emoticons=True
# define the current Fenrir key
fenrirKeys=KEY_KP0,KEY_META,KEY_INSERT
scriptKeys=KEY_COMPOSE
timeFormat=%H:%M:%P
dateFormat=%A, %B %d, %Y
autoSpellCheck=True
spellCheckLanguage=en_US
# path for your scripts "scriptKeys" functionality
scriptPath=/usr/share/fenrirscreenreader/scripts
# overload commands, and create new one without changing Fenrir default
commandPath=
#fenrirBGColor = the backgroundcolor
#fenrirFGColor = the foregroundcolor
#fenrirUnderline = speak the underline attribute
#fenrirBold = speak the bold attribute
#fenrirBlink = speak the blink attribute
#fenrirFont = the font
#fenrirFontSize = the fontsize
attributeFormatString=Background fenrirBGColor,Foreground fenrirFGColor,fenrirUnderline,fenrirBold,fenrirBlink, Font fenrirFont,Fontsize fenrirFontSize
autoPresentIndent=False
# play a sound when attributes are changeing
hasAttributes=True
# shell for PTY emulatiun (empty = default shell)
shell=
[focus]
#follow the text cursor
cursor=True
#follow highlighted text changes
highlight=False
[remote]
enable=True
# driver
# unixDriver = unix sockets
# tcpDriver = tcp (localhost only)
driver=unixDriver
# tcp port
port=22447
# socket filepath
socketFile=
# allow settings to overwrite
enableSettingsRemote=True
# allow commands to be executed
enableCommandRemote=True
[barrier]
enabled=True
leftBarriers=│└┌─
rightBarriers=│┘┐─
[review]
lineBreak=True
endOfScreen=True
# leave the review when pressing a key
leaveReviewOnCursorChange=True
# leave the review when changing the screen
leaveReviewOnScreenChange=True
[promote]
enabled=True
inactiveTimeoutSec=120
list=
[menu]
vmenuPath=
quickMenu=speech#rate;speech#pitch;speech#volume
[time]
# automatic time anouncement
enabled=False
# present time
presentTime=True
# present date (on change)
presentDate=True
# present time after a given period of seconds
delaySec=0
# present time after to given minutes example every 15 minutes: 00,15,30,45
# if delaySec is >0 onMinutes is ignored
onMinutes=00,30
# announce via soundicon (not interrupting)
announce=True
# interrupt current speech for time announcement
interrupt=False

View File

@ -32,16 +32,12 @@ genericFrequencyCommand=play -q -v fenrirVolume -n -c1 synth fenrirDuration sine
# Turn speech on or off: # Turn speech on or off:
enabled=True enabled=True
# Select speech driver, options are speechdDriver (default), genericDriver or espeakDriver: # Select speech driver, options are speechdDriver or genericDriver:
#driver=speechdDriver driver=speechdDriver
#driver=espeakDriver #driver=genericDriver
driver=genericDriver
# server path for emacspeak
serverPath=/home/chrys/Projekte/emacspeak/servers/espeak
# The rate selects how fast Fenrir will speak. Options range from 0, slowest, to 1.0, fastest. # The rate selects how fast Fenrir will speak. Options range from 0, slowest, to 1.0, fastest.
rate=0.65 rate=0.5
# Pitch controls the pitch of the voice, select from 0, lowest, to 1.0, highest. # Pitch controls the pitch of the voice, select from 0, lowest, to 1.0, highest.
pitch=0.5 pitch=0.5
@ -68,6 +64,9 @@ volume=1.0
# Read new text as it happens? # Read new text as it happens?
autoReadIncoming=True autoReadIncoming=True
# Speak individual numbers instead of whole string.
readNumbersAsDigits = False
# genericSpeechCommand is the command that is executed for talking # genericSpeechCommand is the command that is executed for talking
# the following variables are replaced with values # the following variables are replaced with values
# fenrirText = is the text that should be spoken # fenrirText = is the text that should be spoken
@ -81,7 +80,7 @@ autoReadIncoming=True
# fenrirRate = is replaced with the current speed (speech rate) # fenrirRate = is replaced with the current speed (speech rate)
genericSpeechCommand=espeak-ng -a fenrirVolume -s fenrirRate -p fenrirPitch -v fenrirVoice -- "fenrirText" genericSpeechCommand=espeak-ng -a fenrirVolume -s fenrirRate -p fenrirPitch -v fenrirVoice -- "fenrirText"
# those are the min and max values of the TTS system that is used in genericSpeechCommand # min and max values of the TTS system that is used in genericSpeechCommand
fenrirMinVolume=0 fenrirMinVolume=0
fenrirMaxVolume=200 fenrirMaxVolume=200
fenrirMinPitch=0 fenrirMinPitch=0
@ -89,37 +88,6 @@ fenrirMaxPitch=99
fenrirMinRate=80 fenrirMinRate=80
fenrirMaxRate=450 fenrirMaxRate=450
[braille]
enabled=False
driver=dummyDriver
layout=en
# to what should the flush timeout relate to
# word = flush after (number of words to display) * seconds
# char = flush after (number of chars to display) * seconds
# fix = flush after X seconds
# none = no automatic flush (manual via shortcut)
flushMode=word
# seconds to flush or
# -1 = no automatic flush (manual via shortcut)
flushTimeout=3
# how should the cursor be focused?
# page = if cursor cross the border move to next page and start at beginn
# fixCell = ajust the cursor on an special cell where it is always placed. the display scroll here more smooth.
cursorFocusMode=page
# define the cell on the Braille device where fenrir should scroll and keep the cursor
# 0 = first cell on device
# -1 = last cell on device
# >0 = fix cell number
fixCursorOnCell=-1
#How should the braille follow the focus
# none = no automatic toggle command used
# review = priority to review
# last = follow last used cursor
cursorFollowMode=review
# number of cells in panning (horizontal)
# 0 = display size, >0 number of cells
panSizeHorizontal=0
[screen] [screen]
driver=vcsaDriver driver=vcsaDriver
encoding=auto encoding=auto
@ -137,7 +105,10 @@ ignoreShortcuts=False
# the current shortcut layout located in /etc/fenrirscreenreader/keyboard # the current shortcut layout located in /etc/fenrirscreenreader/keyboard
keyboardLayout=desktop keyboardLayout=desktop
# echo chars while typing. # echo chars while typing.
charEcho=False # 0 = None
# 1 = always
# 2 = only while capslock
charEchoMode=1
# echo deleted chars # echo deleted chars
charDeleteEcho=True charDeleteEcho=True
# echo word after pressing space # echo word after pressing space
@ -185,7 +156,13 @@ commandPath=
#fenrirFont = the font #fenrirFont = the font
#fenrirFontSize = the fontsize #fenrirFontSize = the fontsize
attributeFormatString=Background fenrirBGColor,Foreground fenrirFGColor,fenrirUnderline,fenrirBold,fenrirBlink, Font fenrirFont,Fontsize fenrirFontSize attributeFormatString=Background fenrirBGColor,Foreground fenrirFGColor,fenrirUnderline,fenrirBold,fenrirBlink, Font fenrirFont,Fontsize fenrirFontSize
# present indentation
autoPresentIndent=False autoPresentIndent=False
# speak is only invoked on changeing ident level, sound always
# 0 = sound and speak
# 1 = sound only
# 2 = speak only
autoPresentIndentMode=1
# play a sound when attributes are changeing # play a sound when attributes are changeing
hasAttributes=True hasAttributes=True
# shell for PTY emulatiun (empty = default shell) # shell for PTY emulatiun (empty = default shell)

View File

@ -1,252 +0,0 @@
[sound]
# Turn sound on or off:
enabled=True
# Select the driver used to play sounds, choices are genericDriver and gstreamerDriver.
# Sox is the default.
#driver=gstreamerDriver
driver=genericDriver
# Sound themes. These are the pack of sounds used for sound alerts.
# Sound packs may be located at /usr/share/sounds
# For system wide availability, or ~/.local/share/fenrirscreenreader/sounds
# For the current user.
theme=default
# Sound volume controls how loud the sounds for your selected soundpack are.
# 0 is quietest, 1.0 is loudest.
volume=1.0
# shell commands for generic sound driver
# the folowing variable are substituted
# fenrirVolume = the current volume setting
# fenrirSoundFile = the soundfile for an soundicon
# fenrirFrequence = the frequency to play
# fenrirDuration = the duration of the frequency
# the following command is used to play a soundfile
genericPlayFileCommand=play -q -v fenrirVolume fenrirSoundFile
#the following command is used to generate a frequency beep
genericFrequencyCommand=play -q -v fenrirVolume -n -c1 synth fenrirDuration sine fenrirFrequence
[speech]
# Turn speech on or off:
enabled=True
# Select speech driver, options are speechdDriver (default), genericDriver, emacspeak or espeakDriver:
#driver=speechdDriver
#driver=espeakDriver
driver=genericDriver
#driver=emacspeakDriver
# server path for emacspeak
serverPath=/home/chrys/Projekte/emacspeak/servers/espeak
# The rate selects how fast Fenrir will speak. Options range from 0, slowest, to 1.0, fastest.
rate=0.65
# Pitch controls the pitch of the voice, select from 0, lowest, to 1.0, highest.
pitch=0.5
# Pitch for capital letters
capitalPitch=0.9
# Volume controls the loudness of the voice, select from 0, quietest, to 1.0, loudest.
volume=1.0
# Module is used for Speech-dispatcher, to select the speech module you want to use.
# Consult Speech-dispatcher's configuration and help Fenrir find out which modules are available.
# The default is espeak.
#module=espeak
# 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.
# This also sets the voice used in the generic driver.
voice=en-us
# Select the language you want Fenrir to use.
#language=english-us
# Read new text as it happens?
autoReadIncoming=True
# genericSpeechCommand is the command that is executed for talking
# the following variables are replaced with values
# fenrirText = is the text that should be spoken
# fenrirModule = may be the speech module like used in speech-dispatcher, not every TTY need this
# fenrirLanguage = the language
# fenrirVoice = is the current voice that should be used. Set the voice variable above.
# the current volume, pitch and rate is calculated like this
# value = min + settingValue * (min - max )
# fenrirVolume = is replaced with the current volume
# fenrirPitch = is replaced with the current pitch
# fenrirRate = is replaced with the current speed (speech rate)
genericSpeechCommand=espeak -a fenrirVolume -s fenrirRate -p fenrirPitch -v fenrirVoice -- "fenrirText"
# those are the min and max values of the TTS system that is used in genericSpeechCommand
fenrirMinVolume=0
fenrirMaxVolume=200
fenrirMinPitch=0
fenrirMaxPitch=99
fenrirMinRate=80
fenrirMaxRate=450
[braille]
enabled=False
driver=dummyDriver
layout=en
# to what should the flush timeout relate to
# word = flush after (number of words to display) * seconds
# char = flush after (number of chars to display) * seconds
# fix = flush after X seconds
# none = no automatic flush (manual via shortcut)
flushMode=word
# seconds to flush or
# -1 = no automatic flush (manual via shortcut)
flushTimeout=3
# how should the cursor be focused?
# page = if cursor cross the border move to next page and start at beginn
# fixCell = ajust the cursor on an special cell where it is always placed. the display scroll here more smooth.
cursorFocusMode=page
# define the cell on the Braille device where fenrir should scroll and keep the cursor
# 0 = first cell on device
# -1 = last cell on device
# >0 = fix cell number
fixCursorOnCell=-1
#How should the braille follow the focus
# none = no automatic toggle command used
# review = priority to review
# last = follow last used cursor
cursorFollowMode=review
# number of cells in panning (horizontal)
# 0 = display size, >0 number of cells
panSizeHorizontal=0
[screen]
driver=vcsaDriver
encoding=auto
screenUpdateDelay=0.05
suspendingScreen=
autodetectSuspendingScreen=True
[keyboard]
driver=evdevDriver
# filter input devices NOMICE, ALL or a DEVICE NAME
device=ALL
# gives Fenrir exclusive access to the keyboard and lets it control keystrokes.
grabDevices=True
ignoreShortcuts=False
# the current shortcut layout located in /etc/fenrirscreenreader/keyboard
keyboardLayout=desktop
# echo chars while typing.
charEcho=False
# echo deleted chars
charDeleteEcho=True
# echo word after pressing space
wordEcho=False
# interrupt speech on any keypress
interruptOnKeyPress=False
# you can filter the keys on that the speech should interrupt (empty = all keys, otherwhise the given keys)
interruptOnKeyPressFilter=
# timeout for double tap in sec
doubleTapTimeout=0.2
[general]
debugLevel=0
# debugMode sets where the debug output should send to:
# debugMode=File writes to debugFile (Default:/tmp/fenrir-PID.log)
# debugMode=Print just prints on the screen
debugMode=File
debugFile=
punctuationProfile=default
punctuationLevel=some
respectPunctuationPause=True
newLinePause=True
numberOfClipboards=10
# used path for "export_clipboard_to_file"
# $user is replaced by username
#clipboardExportPath=/home/$user/fenrirClipboard
clipboardExportPath=/tmp/fenrirClipboard
emoticons=True
# define the current Fenrir key
fenrirKeys=KEY_KP0,KEY_META,KEY_INSERT
scriptKey=KEY_COMPOSE
timeFormat=%H:%M:%P
dateFormat=%A, %B %d, %Y
autoSpellCheck=True
spellCheckLanguage=en_US
# path for your scripts "scriptKey" functionality
scriptPath=/usr/share/fenrirscreenreader/scripts
# overload commands, and create new one without changing Fenrir default
commandPath=
#fenrirBGColor = the backgroundcolor
#fenrirFGColor = the foregroundcolor
#fenrirUnderline = speak the underline attribute
#fenrirBold = speak the bold attribute
#fenrirBlink = speak the blink attribute
#fenrirFont = the font
#fenrirFontSize = the fontsize
attributeFormatString=Background fenrirBGColor,Foreground fenrirFGColor,fenrirUnderline,fenrirBold,fenrirBlink, Font fenrirFont,Fontsize fenrirFontSize
autoPresentIndent=False
# play a sound when attributes are changeing
hasAttributes=True
# shell for PTY emulatiun (empty = default shell)
shell=
[focus]
#follow the text cursor
cursor=True
#follow highlighted text changes
highlight=False
[remote]
enable=True
# driver
# unixDriver = unix sockets
# tcpDriver = tcp (localhost only)
driver=unixDriver
# tcp port
port=22447
# socket filepath
socketFile=
# allow settings to overwrite
enableSettingsRemote=True
# allow commands to be executed
enableCommandRemote=True
[barrier]
enabled=True
leftBarriers=│└┌─
rightBarriers=│┘┐─
[review]
lineBreak=True
endOfScreen=True
# leave the review when pressing a key
leaveReviewOnCursorChange=True
# leave the review when changing the screen
leaveReviewOnScreenChange=True
[promote]
enabled=True
inactiveTimeoutSec=120
list=
[menu]
vmenuPath=
quickMenu=speech#rate;speech#pitch;speech#volume
[time]
# automatic time anouncement
enabled=False
# present time
presentTime=True
# present date (on change)
presentDate=True
# present time after a given period of seconds
delaySec=0
# present time after to given minutes example every 15 minutes: 00,15,30,45
# if delaySec is >0 onMinutes is ignored
onMinutes=00,30
# announce via soundicon (not interrupting)
announce=True
# interrupt current speech for time announcement
interrupt=False

View File

@ -1,197 +0,0 @@
[sound]
enabled=True
driver=genericDriver
theme=default
volume=1.0
# shell commands for generic sound driver
genericPlayFileCommand=play -q -v fenrirVolume fenrirSoundFile
genericFrequencyCommand=play -q -v fenrirVolume -n -c1 synth fenrirDuration sine fenrirFrequence
[speech]
enabled=True
#driver=speechdDriver
driver=genericDriver
serverPath=
rate=0.80
pitch=0.5
# Pitch for capital letters
capitalPitch=0.9
module=espeak
voice=en-us
language=english-us
volume=1.0
autoReadIncoming=True
# genericSpeechCommand is the command that is executed for talking
# the following variables are replaced with values
# fenrirText = is the text that should be spoken
# fenrirModule = may be the speech module like used in speech-dispatcher, not every TTY need this
# fenrirLanguage = the language
# fenrirVoice = is the current voice that should be used
# the current volume, pitch and rate is calculated like this
# value = min + settingValue * (min - max )
# fenrirVolume = is replaced with the current volume
# fenrirPitch = is replaced with the current pitch
# fenrirRate = is replaced with the current speed (speech rate)
genericSpeechCommand=espeak -a fenrirVolume -s fenrirRate -p fenrirPitch -v fenrirVoice -- "fenrirText"
# these are the min and max values of the TTS system that is used in genericSpeechCommand
fenrirMinVolume=0
fenrirMaxVolume=200
fenrirMinPitch=0
fenrirMaxPitch=99
fenrirMinRate=80
fenrirMaxRate=890
[braille]
enabled=False
driver=dummyDriver
layout=en
# to what should the flush timeout relate to
# word = flush after (number of words to display) * seconds
# char = flush after (number of chars to display) * seconds
# fix = flush after X seconds
# none = no automatic flush (manual via shortcut)
flushMode=word
# seconds to flush or
# -1 = no automatic flush (manual via shortcut)
flushTimeout=3
# how should the cursor be focused?
# page = if cursor cross the border move to next page and start at beginn
# fixCell = ajust the cursor on an special cell where it is always placed. the display scroll here more smooth.
cursorFocusMode=page
# define the cell on the Braille device where fenrir should scroll and keep the cursor
# 0 = first cell on device
# -1 = last cell on device
# >0 = fix cell number
fixCursorOnCell=-1
#How should the braille follow the focus
# none = no automatic toggle command used
# review = priority to review
# last = follow last used cursor
cursorFollowMode=review
# number of cells in panning (horizontal)
# 0 = display size, >0 number of cells
panSizeHorizontal=0
[screen]
driver=vcsaDriver
encoding=auto
screenUpdateDelay=0.05
suspendingScreen=
autodetectSuspendingScreen=True
[keyboard]
driver=evdevDriver
# filter input devices NOMICE, ALL or a DEVICE NAME
device=ALL
grabDevices=True
ignoreShortcuts=False
keyboardLayout=desktop
charEcho=False
charDeleteEcho=True
wordEcho=False
interruptOnKeyPress=True
# you can filter the keys on that the speech should interrupt (empty = all keys, otherwhise the given keys)
interruptOnKeyPressFilter=
# timeout for double tap in sec
doubleTapTimeout=0.2
[general]
debugLevel=0
# debugMode sets where the debug output should send to:
# debugMode=File writes to debugFile (Default:/tmp/fenrir-PID.log)
# debugMode=Print just prints on the screen
debugMode=File
debugFile=
punctuationProfile=default
punctuationLevel=some
respectPunctuationPause=True
newLinePause=True
numberOfClipboards=10
# used path for "export_clipboard_to_file"
# $user is replaced by username
clipboardExportPath=/tmp/fenrirClipboard
emoticons=True
fenrirKeys=KEY_KP0,KEY_META
scriptKey=KEY_COMPOSE
timeFormat=%H:%M:%P
dateFormat="%A, %B %d, %Y"
autoSpellCheck=True
spellCheckLanguage=en_US
scriptPath=/usr/share/fenrirscreenreader/scripts
# overload commands, and create new one without changing Fenrir default
commandPath=
#fenrirBGColor = the backgroundcolor
#fenrirFGColor = the foregroundcolor
#fenrirUnderline = speak the underline attribute
#fenrirBold = speak the bold attribute
#fenrirBlink = speak the blink attribute
#fenrirFont = the font
#fenrirFontSize = the fontsize
attributeFormatString=Background fenrirBGColor,Foreground fenrirFGColor,fenrirUnderline,fenrirBold,fenrirBlink, Font fenrirFont,Fontsize fenrirFontSize
autoPresentIndent=False
# play a sound when attributes are changeing
hasAttributes=False
# shell for PTY emulatiun (empty = default shell)
shell=
[focus]
#follow the text cursor
cursor=True
#follow highlighted text changes
highlight=False
[remote]
enable=True
# driver
# unixDriver = unix sockets
# tcpDriver = tcp (localhost only)
driver=unixDriver
# tcp port
port=22447
# socket filepath
socketFile=
# allow settings to overwrite
enableSettingsRemote=True
# allow commands to be executed
enableCommandRemote=True
[barrier]
enabled=True
leftBarriers=│└┌─
rightBarriers=│┘┐─
[review]
lineBreak=True
endOfScreen=True
# leave the review when pressing a key
leaveReviewOnCursorChange=True
# leave the review when changing the screen
leaveReviewOnScreenChange=True
[promote]
enabled=True
inactiveTimeoutSec=120
list=
[menu]
vmenuPath=
quickMenu=speech#rate;speech#pitch;speech#volume
[time]
# automatic time anouncement
enabled=False
# present time
presentTime=True
# present date (on change)
presentDate=True
# present time after x seconds
delaySec=0
# present time after to given minutes example every 15 minutes: 00,15,30,45
# if delaySec is >0 onMinutes is ignored
onMinutes=00,30
# announce via soundicon
announce=True
# interrupt current speech for time announcement
interrupt=False

View File

@ -1,251 +0,0 @@
[sound]
# Turn sound on or off:
enabled=True
# Select the driver used to play sounds, choices are genericDriver and gstreamerDriver.
# Sox is the default.
#driver=gstreamerDriver
driver=genericDriver
# Sound themes. These are the pack of sounds used for sound alerts.
# Sound packs may be located at /usr/share/sounds
# For system wide availability, or ~/.local/share/fenrirscreenreader/sounds
# For the current user.
theme=default
# Sound volume controls how loud the sounds for your selected soundpack are.
# 0 is quietest, 1.0 is loudest.
volume=1.0
# shell commands for generic sound driver
# the folowing variable are substituted
# fenrirVolume = the current volume setting
# fenrirSoundFile = the soundfile for an soundicon
# fenrirFrequence = the frequency to play
# fenrirDuration = the duration of the frequency
# the following command is used to play a soundfile
genericPlayFileCommand=play -q -v fenrirVolume fenrirSoundFile
#the following command is used to generate a frequency beep
genericFrequencyCommand=play -q -v fenrirVolume -n -c1 synth fenrirDuration sine fenrirFrequence
[speech]
# Turn speech on or off:
enabled=True
# Select speech driver, options are speechdDriver (default), genericDriver or espeakDriver:
driver=speechdDriver
#driver=espeakDriver
#driver=genericDriver
# server path for emacspeak
serverPath=/home/chrys/Projekte/emacspeak/servers/espeak
# The rate selects how fast Fenrir will speak. Options range from 0, slowest, to 1.0, fastest.
rate=0.65
# Pitch controls the pitch of the voice, select from 0, lowest, to 1.0, highest.
pitch=0.5
# Pitch for capital letters
capitalPitch=0.9
# Volume controls the loudness of the voice, select from 0, quietest, to 1.0, loudest.
volume=1.0
# Module is used for Speech-dispatcher, to select the speech module you want to use.
# Consult Speech-dispatcher's configuration and help Fenrir find out which modules are available.
# The default is espeak.
module=espeak
# 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.
# This also sets the voice used in the generic driver.
voice=
# Select the language you want Fenrir to use.
language=english-us
# Read new text as it happens?
autoReadIncoming=True
# genericSpeechCommand is the command that is executed for talking
# the following variables are replaced with values
# fenrirText = is the text that should be spoken
# fenrirModule = may be the speech module like used in speech-dispatcher, not every TTY need this
# fenrirLanguage = the language
# fenrirVoice = is the current voice that should be used. Set the voice variable above.
# the current volume, pitch and rate is calculated like this
# value = min + settingValue * (min - max )
# fenrirVolume = is replaced with the current volume
# fenrirPitch = is replaced with the current pitch
# fenrirRate = is replaced with the current speed (speech rate)
genericSpeechCommand=espeak -a fenrirVolume -s fenrirRate -p fenrirPitch -v fenrirVoice -- "fenrirText"
# those are the min and max values of the TTS system that is used in genericSpeechCommand
fenrirMinVolume=0
fenrirMaxVolume=200
fenrirMinPitch=0
fenrirMaxPitch=99
fenrirMinRate=80
fenrirMaxRate=450
[braille]
enabled=False
driver=dummyDriver
layout=en
# to what should the flush timeout relate to
# word = flush after (number of words to display) * seconds
# char = flush after (number of chars to display) * seconds
# fix = flush after X seconds
# none = no automatic flush (manual via shortcut)
flushMode=word
# seconds to flush or
# -1 = no automatic flush (manual via shortcut)
flushTimeout=3
# how should the cursor be focused?
# page = if cursor cross the border move to next page and start at beginn
# fixCell = ajust the cursor on an special cell where it is always placed. the display scroll here more smooth.
cursorFocusMode=page
# define the cell on the Braille device where fenrir should scroll and keep the cursor
# 0 = first cell on device
# -1 = last cell on device
# >0 = fix cell number
fixCursorOnCell=-1
#How should the braille follow the focus
# none = no automatic toggle command used
# review = priority to review
# last = follow last used cursor
cursorFollowMode=review
# number of cells in panning (horizontal)
# 0 = display size, >0 number of cells
panSizeHorizontal=0
[screen]
driver=vcsaDriver
encoding=auto
screenUpdateDelay=0.05
suspendingScreen=
autodetectSuspendingScreen=True
[keyboard]
driver=evdevDriver
# filter input devices NOMICE, ALL or a DEVICE NAME
device=ALL
# gives Fenrir exclusive access to the keyboard and lets it control keystrokes.
grabDevices=True
ignoreShortcuts=False
# the current shortcut layout located in /etc/fenrirscreenreader/keyboard
keyboardLayout=desktop
# echo chars while typing.
charEcho=False
# echo deleted chars
charDeleteEcho=True
# echo word after pressing space
wordEcho=False
# interrupt speech on any keypress
interruptOnKeyPress=False
# you can filter the keys on that the speech should interrupt (empty = all keys, otherwhise the given keys)
interruptOnKeyPressFilter=
# timeout for double tap in sec
doubleTapTimeout=0.2
[general]
debugLevel=0
# debugMode sets where the debug output should send to:
# debugMode=File writes to debugFile (Default:/tmp/fenrir-PID.log)
# debugMode=Print just prints on the screen
debugMode=File
debugFile=
punctuationProfile=default
punctuationLevel=some
respectPunctuationPause=True
newLinePause=True
numberOfClipboards=10
# used path for "export_clipboard_to_file"
# $user is replaced by username
#clipboardExportPath=/home/$user/fenrirClipboard
clipboardExportPath=/tmp/fenrirClipboard
emoticons=True
# define the current Fenrir key
fenrirKeys=KEY_KP0,KEY_META,KEY_INSERT
scriptKeys=KEY_COMPOSE
timeFormat=%H:%M:%P
dateFormat=%A, %B %d, %Y
autoSpellCheck=True
spellCheckLanguage=en_US
# path for your scripts "scriptKeys" functionality
scriptPath=/usr/share/fenrirscreenreader/scripts
# overload commands, and create new one without changing Fenrir default
commandPath=
#fenrirBGColor = the backgroundcolor
#fenrirFGColor = the foregroundcolor
#fenrirUnderline = speak the underline attribute
#fenrirBold = speak the bold attribute
#fenrirBlink = speak the blink attribute
#fenrirFont = the font
#fenrirFontSize = the fontsize
attributeFormatString=Background fenrirBGColor,Foreground fenrirFGColor,fenrirUnderline,fenrirBold,fenrirBlink, Font fenrirFont,Fontsize fenrirFontSize
autoPresentIndent=False
# play a sound when attributes are changeing
hasAttributes=True
# shell for PTY emulatiun (empty = default shell)
shell=
[focus]
#follow the text cursor
cursor=True
#follow highlighted text changes
highlight=False
[remote]
enable=True
# driver
# unixDriver = unix sockets
# tcpDriver = tcp (localhost only)
driver=unixDriver
# tcp port
port=22447
# socket filepath
socketFile=
# allow settings to overwrite
enableSettingsRemote=True
# allow commands to be executed
enableCommandRemote=True
[barrier]
enabled=True
leftBarriers=│└┌─
rightBarriers=│┘┐─
[review]
lineBreak=True
endOfScreen=True
# leave the review when pressing a key
leaveReviewOnCursorChange=True
# leave the review when changing the screen
leaveReviewOnScreenChange=True
[promote]
enabled=True
inactiveTimeoutSec=120
list=
[menu]
vmenuPath=
quickMenu=speech#rate;speech#pitch;speech#volume
[time]
# automatic time anouncement
enabled=False
# present time
presentTime=True
# present date (on change)
presentDate=True
# present time after a given period of seconds
delaySec=0
# present time after to given minutes example every 15 minutes: 00,15,30,45
# if delaySec is >0 onMinutes is ignored
onMinutes=00,30
# announce via soundicon (not interrupting)
announce=True
# interrupt current speech for time announcement
interrupt=False

Binary file not shown.

@ -1 +0,0 @@
Subproject commit fcefe65ecd6812b7a39d8f6a4bf44805c2a9717a

@ -1 +0,0 @@
Subproject commit 0537ad1a8b9f73e6d58775ffc08f7625bc601fa3

View File

@ -1 +0,0 @@
https://stackoverflow.com/questions/880227/what-is-the-minimum-i-have-to-do-to-create-an-rpm-file

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# needs pandoc and php installed # needs pandoc and php installed
# remove old files # remove old files

File diff suppressed because it is too large Load Diff

2109
docs/fenrir.adoc Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +0,0 @@
install it.
1. build it
make -f /usr/share/selinux/strict/include/Makefile fenrir.pp
2. install it
semodule -i /path/to/fenrir.pp
# created with that
# systemctl start fenrir
# ausearch -c '(r-daemon)' --raw | audit2allow -M fenrir
# semodule -X 300 -i fenrir.pp

View File

@ -1,10 +0,0 @@
module fenrir 1.0;
require {
type user_home_t;
type init_t;
class file { execute execute_no_trans open read };
}
#============= init_t ==============
allow init_t user_home_t:file { execute execute_no_trans open read };

View File

@ -1,12 +0,0 @@
#!/bin/python3
import argparse
parser = argparse.ArgumentParser(description="Fenrir Help")
parser.add_argument('-s', '--setting', metavar='SETTING-FILE', default='/etc/fenrir/settings/settings.conf', help='Use a specified settingsfile')
parser.add_argument('-o', '--options', metavar='SECTION:SETTING=VALUE,..', default='', help='Overwrite options in given settings file')
args = parser.parse_args()
parser.print_help()
print(args.setting)

View File

@ -1,88 +0,0 @@
import time
from fcntl import ioctl
from array import array
from struct import unpack_from
from struct import unpack
from struct import pack
import errno
import sys
charmap = {}
hichar = None
def updateCharMap(screen):
global hichar
ttyno = '4'
tty = open('/dev/tty' + screen, 'rb')
GIO_UNIMAP = 0x4B66
VT_GETHIFONTMASK = 0x560D
himask = array("H", (0,))
ioctl(tty, VT_GETHIFONTMASK, himask)
hichar, = unpack_from("@H", himask)
sz = 512
line = ''
while True:
try:
unipairs = array("H", [0]*(2*sz))
unimapdesc = array("B", pack("@HP", sz, unipairs.buffer_info()[0]))
ioctl(tty.fileno(), GIO_UNIMAP, unimapdesc)
break
except IOError as e:
if e.errno != errno.ENOMEM:
raise
sz *= 2
tty.close()
ncodes, = unpack_from("@H", unimapdesc)
utable = unpack_from("@%dH" % (2*ncodes), unipairs)
for u, b in zip(utable[::2], utable[1::2]):
if charmap.get(b) is None:
charmap[b] = chr(u)
def autoDecodeVCSA(allData, rows, cols):
allText = []
allAttrib = []
for y in range(rows):
lineText = ''
lineAttrib = []
i = 0
for x in range(cols):
data = allData[i: i + 2]
i += 2
if data == b' \x07':
#attr = 7
#ink = 7
#paper = 0
#ch = ' '
lineAttrib.append(7)
lineText += ' '
continue
(sh,) = unpack("=H", data)
attr = (sh >> 8) & 0xFF
ch = sh & 0xFF
if hichar == 0x100:
attr >>= 1
lineAttrib.append(attr)
ink = attr & 0x0F
paper = (attr>>4) & 0x0F
#if (ink != 7) or (paper != 0):
# print(ink,paper)
if sh & hichar:
ch |= 0x100
try:
lineText += charmap[ch]
except:
lineText += chr('?')
allText.append(lineText)
allAttrib.append(lineAttrib)
return allText, allAttrib
def m(screen):
s = time.time()
updateCharMap(str(screen))
print(time.time() -s )
vcsa = open('/dev/vcsa' + str(screen), 'rb')
head = vcsa.read(4)
rows = int(head[0])
cols = int(head[1])
text, attrib = autoDecodeVCSA(vcsa.read(), rows, cols)
print(time.time() -s )

View File

@ -1,41 +0,0 @@
#!/bin/bash
# clilauncher.sh
# Description: Launches xterm with give application and fenrir.
#
# Copyright 2019, F123 Consulting, <information@f123.org>
# Copyright 2019, Storm Dragon, <storm_dragon@linux-a11y.org>
#
# This is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free
# Software Foundation; either version 3, or (at your option) any later
# version.
#
# This software is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this package; see the file COPYING. If not, write to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
#
#--code--
if [[ $# -lt 1 ]]; then
echo "Usage: $0 program to launch args."
exit 1
fi
# Make sure the program being launched exists
command -v "${1%% *}" &> /dev/null || exit 1
for i in /tmp/fenrirscreenreader-*.sock ; do
if [[ "$i" != "/tmp/fenrirscreenreader-deamon.sock" ]]; then
echo -n "setting set screen#suspendingScreen=pty" | socat - UNIX-CLIENT:$i
fi
done
#/usr/bin/urxvt -name "${1%% *}" -e fenrir -d -s /etc/fenrirscreenreader/settings/xterm.conf -o "general.shell=/usr/bin/${1%% *};remote#socketFile=/tmp/fenrirscreenreader-${1%% *}.sock"
/usr/bin/urxvt -name "${1%% *}" -e ../src/fenrir -d -s ./xterm.conf -o "general.shell=/usr/bin/${1%% *};remote#socketFile=/tmp/fenrirscreenreader-${1%% *}.sock"

View File

@ -1,39 +0,0 @@
#!/bin/bash
echo "foreground colors"
echo -e "\e[39mDefault"
echo -e "\e[30mBlack"
echo -e "\e[31mRed"
echo -e "\e[32mGreen"
echo -e "\e[33mYellow"
echo -e "\e[34mBlue"
echo -e "\e[35mMagenta"
echo -e "\e[36mCyan"
echo -e "\e[37mLight gray"
echo -e "\e[90mDark gray"
echo -e "\e[91mLight red"
echo -e "\e[92mLight green"
echo -e "\e[93mLight yellow"
echo -e "\e[94mLight blue"
echo -e "\e[95mLight magenta"
echo -e "\e[96mLight cyan"
echo -e "\e[97mWhite"
echo "background colors"
echo -e "\e[49mDefault"
echo -e "\e[40mBlack"
echo -e "\e[41mRed"
echo -e "\e[42mGreen"
echo -e "\e[43mYellow"
echo -e "\e[44mBlue"
echo -e "\e[45mMagenta"
echo -e "\e[46mCyan"
echo -e "\e[47mLight gray"
echo -e "\e[100mDark gray"
echo -e "\e[101mLight red"
echo -e "\e[102mLight green"
echo -e "\e[103mLight yellow"
echo -e "\e[104mLight blue"
echo -e "\e[105mLight magenta"
echo -e "\e[106mLight cyan"
echo -e "\e[107mWhite"

View File

@ -1,52 +0,0 @@
#!/bin/python
import evdev
from evdev import InputDevice, UInput
from select import select
import time
iDevices = map(evdev.InputDevice, (evdev.list_devices()))
iDevices = {dev.fd: dev for dev in iDevices if evdev.events.EV_KEY in dev.capabilities()}
uDevices = {}
for fd in iDevices:
dev = iDevices[fd]
cap = dev.capabilities()
del cap[0]
uDevices[fd] = UInput(
cap,
dev.name,
dev.info.vendor,
# dev.info.product,
# dev.version,
# dev.info.bustype,
# '/dev/uinput'
)
dev.grab()
i = 0
while i < 100:
r, w, x = select(iDevices, [], [])
if r != []:
i += 1
for fd in r:
for event in iDevices[fd].read():
if event.code != 30: # a
print(event)
uDevices[fd].write_event(event)
uDevices[fd].syn()
#print('Devicename:'+ devices[fd].name + ' Devicepath:' + devices[fd].fn + ' Events:' + str(devices[fd].active_keys(verbose=True)) + ' Value:' + str(event.value))
else:
print('this key is consumed')
for fd in iDevices:
iDevices[fd].ungrab()
iDevices[fd].close()
uDevices[fd].close()
iDevices.clear()
uDevices.clear()

View File

@ -1,12 +0,0 @@
from time import sleep
from daemonize import Daemonize
pid = "/tmp/test.pid"
def main():
while True:
sleep(5)
daemon = Daemonize(app="test_app", pid=pid, action=main)
daemon.start()

View File

@ -1,50 +0,0 @@
#!/bin/python
import evdev
iDevices = {}
iDeviceNo = 0
def updateInputDevices(force = False, init = False):
global iDeviceNo
if init:
iDevices = {}
iDeviceNo = 0
deviceFileList = evdev.list_devices()
if not force:
if len(deviceFileList) == iDeviceNo:
return
iDeviceNo = len(deviceFileList)
mode = 'ALL'
iDevicesFiles = []
for device in iDevices:
iDevicesFiles.append(iDevices[device].fn)
print(len(iDevicesFiles),len(deviceFileList))
if len(iDevicesFiles) == len(deviceFileList):
return
for deviceFile in deviceFileList:
try:
if deviceFile in iDevicesFiles:
print('skip')
continue
open(deviceFile)
# 3 pos absolute
# 2 pos relative
# 1 Keys
currDevice = evdev.InputDevice(deviceFile)
cap = currDevice.capabilities()
if mode in ['ALL','NOMICE']:
if 1 in cap:
if 116 in cap[1] and len(cap[1]) < 5:
print('power')
continue
if mode == 'ALL':
iDevices[currDevice.fd] = currDevice
print('Device added:' + iDevices[currDevice.fd].name)
elif mode == 'NOMICE':
if not ((2 in cap) or (3 in cap)):
iDevices[currDevice.fd] = currDevice
print('Device added:' + iDevices[currDevice.fd].name)
elif currDevice.name.upper() in mode.split(','):
iDevices[currDevice.fd] = currDevice
print('Device added:' + iDevices[currDevice.fd].name)
except Exception as e:
print("Skip Inputdevice : " + deviceFile +' ' + str(e))
updateInputDevices()

View File

@ -1,37 +0,0 @@
#!/bin/python
import select
import time
currScreen = '2'
vcsa = {}
for i in range(1,7):
vcsa[str(i)] = open('/dev/vcs'+str(i),'rb')
tty = open('/sys/devices/virtual/tty/tty0/active','r')
currScreen = str(tty.read()[3:-1])
oldScreen = currScreen
watchdog = select.epoll()
watchdog.register(vcsa[currScreen], select.EPOLLPRI)
watchdog.register(tty, select.EPOLLPRI)
while True:
changes = watchdog.poll()
print('-----------------------------')
print(changes)
for change in changes:
fileno = change[0]
event = change[1]
print(change,fileno, tty.fileno())
if fileno == tty.fileno():
tty.seek(0)
currScreen = str(tty.read()[3:-1])
if currScreen != oldScreen:
watchdog.unregister(vcsa[ oldScreen ])
watchdog.register(vcsa[ currScreen ], select.EPOLLPRI)
oldScreen = currScreen
print('new screen '+ currScreen)
else:
vcsa[currScreen].seek(0)
content = vcsa[currScreen].read()
print('update '+ str(time.time()))

View File

@ -1,5 +0,0 @@
#!/bin/python
# in case that event13 is still the broken device
f = open('/dev/input/event13')
print('OK /dev/input/event13')

View File

@ -1,48 +0,0 @@
#!/bin/bash
echo "foreground colors"
echo -e "\e[39mDefault"
echo -e "\e[30mBlack"
echo -e "\e[31mRed"
echo -e "\e[32mGreen"
echo -e "\e[33mYellow"
echo -e "\e[34mBlue"
echo -e "\e[35mMagenta"
echo -e "\e[36mCyan"
echo -e "\e[37mLight gray"
echo -e "\e[90mDark gray"
echo -e "\e[91mLight red"
echo -e "\e[92mLight green"
echo -e "\e[93mLight yellow"
echo -e "\e[94mLight blue"
echo -e "\e[95mLight magenta"
echo -e "\e[96mLight cyan"
echo -e "\e[97mWhite"
#7: _('Default'), 0: _('Black'), 4: _('Red'), 2: _('Green'), 6: _('Yellow'), 1: _('Blue'), 5: _('Magenta'), 3: _('Cyan'), 7: _('Light gray'), 8: _('Dark gray'), 12: _('Light red'), 10: , ('Light green'), 14: _('Light yellow'), 9: _('Light blue'), 13: _('Light magenta'), 11: _('Light cyan'), 15: _('White')
echo "background colors"
echo -e "\e[49mDefault"
echo -e "\e[40mBlack"
echo -e "\e[41mRed"
echo -e "\e[42mGreen"
echo -e "\e[43mYellow"
echo -e "\e[44mBlue"
echo -e "\e[45mMagenta"
echo -e "\e[46mCyan"
echo -e "\e[47mLight gray"
echo -e "\e[100mDark gray"
echo -e "\e[101mLight red"
echo -e "\e[102mLight green"
echo -e "\e[103mLight yellow"
echo -e "\e[104mLight blue"
echo -e "\e[105mLight magenta"
echo -e "\e[106mLight cyan"
echo -e "\e[107mWhite"
echo "format"
echo -e "\e[1mBold"
echo -e "\e[2mDim"
echo -e "\e[4mUnderlined"
echo -e "\e[5mBlink"
echo -e "\e[7minverted"
echo -e "\e[8mHidden"

View File

@ -1,19 +0,0 @@
#!/usr/bin/python
import gi
from gi.repository import GLib
gi.require_version('Gst', '1.0')
from gi.repository import Gst
import time, threading
gi.require_version('Atspi', '2.0')
import pyatspi
# Callback to print the active window on key press amd filter out the key release
def on_key_input(event):
print(event)
mainloop = GLib.MainLoop()
thread = threading.Thread(target=mainloop.run)
thread.start()
#pyatspi.Registry.registerKeystrokeListener(on_key_input, kind=(pyatspi.KEY_PRESSED_EVENT, pyatspi.KEY_RELEASED_EVENT))
pyatspi.Registry.registerKeystrokeListener(on_key_input,mask=pyatspi.allModifiers(), kind=(pyatspi.KEY_PRESS,pyatspi.KEY_RELEASE,pyatspi.KEY_PRESSRELEASE), synchronous=True, preemptive=True)
pyatspi.Registry.start()

View File

@ -1,23 +0,0 @@
#!/bin/python
import evdev
from evdev import InputDevice, UInput
from select import select
import time
iDevices = map(evdev.InputDevice, (evdev.list_devices()))
iDevices = {dev.fd: dev for dev in iDevices}
print('----------------------')
for fd in iDevices:
dev = iDevices[fd]
cap = dev.capabilities()
print('Name: ' + str(dev.name))
print('LEDs: ' + str(dev.leds()))
print('Has Keys: '+ str(evdev.events.EV_KEY in cap))
if evdev.events.EV_KEY in cap:
print('No. of keys: ' + str(len(cap[evdev.events.EV_KEY])))
print('has Key 116: ' + str(116 in cap[evdev.events.EV_KEY]))
print('Is Mouse: ' + str(((evdev.events.EV_REL in cap) or (evdev.events.EV_ABS in cap))))
print('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
print(dev.capabilities(verbose=True))
print('----------------------')

View File

@ -1,20 +0,0 @@
#!/bin/python
import dbus
try:
bus = dbus.SystemBus()
obj = bus.get_object('org.freedesktop.login1', '/org/freedesktop/login1')
inf = dbus.Interface(obj, 'org.freedesktop.login1.Manager')
ListSessions = inf.get_dbus_method('ListSessions')
sessions = ListSessions()
for session in sessions:
obj = bus.get_object('org.freedesktop.login1', session[4])
inf = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
sessionType = inf.Get('org.freedesktop.login1.Session', 'Type')
screen = str(inf.Get('org.freedesktop.login1.Session', 'VTNr'))
if screen == '':
screen = str(inf.Get('org.freedesktop.login1.Session', 'TTY'))
print('Session:', screen, 'Type:', sessionType.upper(), 'Details:', session)
else:
print('Session:', screen, 'Type:', sessionType.upper(), 'Details:', session)
except:
print('no access')

View File

@ -1,52 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# HTTP + URL packages
import httplib2
from urllib.parse import urlencode, quote # For URL creation
import time
# To play wave files
import pygame
import math # For ceiling
# Mary server informations
mary_host = "127.0.0.1"
mary_port = "59125"
# Input text
input_text = "das ist ein test das ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testd"
# Build the query
query_hash = {"INPUT_TEXT":input_text,
"INPUT_TYPE":"TEXT", # Input text
"LOCALE":"de",
"VOICE":"bits3", # Voice informations (need to be compatible)
"OUTPUT_TYPE":"AUDIO",
"AUDIO":"WAVE", # Audio informations (need both)
}
starttime = time.time()
query = urlencode(query_hash)
#print("query = \"http://%s:%s/process?%s\"" % (mary_host, mary_port, query))
# Run the query to mary http server
h_mary = httplib2.Http()
#print("http://%s:%s/process?" % (mary_host, mary_port), "POST", query)
resp, content = h_mary.request("http://%s:%s/process?" % (mary_host, mary_port), "POST", query)
# Decode the wav file or raise an exception if no wav files
if (resp["content-type"] == "audio/x-wav"):
# Write the wav file
f = open("/tmp/output_wav.wav", "wb")
f.write(content)
f.close()
# Play the wav file
pygame.mixer.init(frequency=16000) # Initialise the mixer
#s = pygame.mixer.Sound(content)
s = pygame.mixer.Sound("/tmp/output_wav.wav")
print(str(time.time() -starttime))
s.play()
print(str(time.time() -starttime))
pygame.time.wait(int(math.ceil(s.get_length() * 1000)))
else:
raise Exception(content)

View File

@ -1,53 +0,0 @@
#!/bin/python
import os
import time
start = time.time()
pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]
#pids = ['5960']
tty = os.open('/dev/tty2', os.O_RDWR)
fg = str(os.tcgetpgrp(tty))
tty.close()
print(fg)
for pid in pids:
try:
currStat = str(open('/proc/' + pid + '/stat', 'rb').read())
currStat = currStat.split(' ')
if int(currStat[4]) == 0:
continue
#print(currStat)
#print(fg,int(currStat[4]))
if fg == currStat[4]:
print(currStat[1])
#print( currStat )
#print(currStat[0])
major = os.major(int(currStat[6]))
minor = os.minor(int(currStat[6]))
ueventContent = open('/sys/dev/char/' + str(major) + ':' + str(minor) + '/uevent','r').read().split()
#print(ueventContent)
#print(int(currStat[4]),currStat[1])
except IOError: # proc has already terminated
continue
print(time.time()-start)
'''
Table 1-4: Contents of the stat files (as of 2.6.30-rc7)
..............................................................................
Field Content
pid process id
tcomm filename of the executable
state state (R is running, S is sleeping, D is sleeping in an
uninterruptible wait, Z is zombie, T is traced or stopped)
ppid process id of the parent process
pgrp pgrp of the process
sid session id
tty_nr tty the process uses
tty_pgrp pgrp of the tty
flags task flags
min_flt number of minor faults
cmin_flt number of minor faults with child's
maj_flt number of major faults
cmaj_flt number of major faults with child's
'''

View File

@ -1,28 +0,0 @@
#!/bin/python
import evdev
from evdev import InputDevice
from select import select
import time
deviceList = evdev.list_devices()
readableDevices = []
for dev in deviceList:
try:
open(dev)
readableDevices.append(dev)
print('OK '+dev)
except Exception as e:
print('skip ' + dev + ' Error ' + str(e))
devices = map(evdev.InputDevice, (readableDevices))
devices = {dev.fd: dev for dev in devices}
while True:
r, w, x = select(devices, [], [])
if r != []:
for fd in r:
for event in devices[fd].read():
print('Devicename:'+ devices[fd].name + ' Devicepath:' + devices[fd].fn + ' Events:' + str(devices[fd].active_keys(verbose=True)) + ' Value:' + str(event.value))

View File

@ -1,154 +0,0 @@
#!/usr/bin/pdmenu
#
# Note that the above bang-path isn't required, but it lets you run this
# file directly as a sort of pdmenu script.
# F123 menu
title:Welcome to F123
# Define the main menu.
menu:main:F123 Main Menu:Please make a selection
show:_Games Menu..::games
show:_Internet menu..::internet
show:_Media menu..::media
show:_Office menu..::office
show:_System Configuration Menu..::configuration
show:_Tools Menu..::tools
nop
show:_Power Options..::power
nop
exit:_Exit
# Submenu for games.
menu:games:Games:Command line games
exec:_Adventure::clear;adventure
exec:_Arithmetic::clear;arithmetic
exec:_Air Traffic Controler (Not screen reader friendly)::clear;atc
exec:_Backgammon (Not screen reader friendly)::clear;backgammon
exec:_Battlestar::clear;battlestar
exec:_Boggle (Not screen reader friendly)::clear;boggle
exec:_Canfield (Not screen reader friendly)::clear;canfield
exec:_Cribbage (Not screen reader friendly)::clear;cribbage
exec:_Go Fish:pause:clear;go-fish
exec:_Gomoku::clear;gomoku
exec:_Hangman::clear;hangman
exec:_Hunt (Not screen reader friendly)::clear;hunt
exec:_Mille Bornes::clear;mille
exec:_Number::clear;number
exec:_Phantasia::clear;phantasia
exec:_Phase of the Moon:pause:clear;pom
exec:_Primes::clear;primes
exec:_Robots (Not screen reader friendly)::clear;robots
exec:_Sail::clear;sail
exec:_Snake (Not screen reader friendly)::clear;snake
exec:_Tetris (Not screen reader friendly)::clear;tetris-bsd
exec:_Trek::clear;trek
exec:_Worm (Not screen reader friendly)::clear;worm
exec:_Wumpus::clear;wump
nop
exit:_Main menu..
# submenu for internet applications.
menu:internet:Internet:Internet programs
exec:_E-Mail::clear;mutt
exec:_Basic Web Browser (W3M)::clear;w3m -v
group:Full _Web browser (Firefox)
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher firefox
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
group:_Mumble Voice Chat
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher mumble
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
nop
exit:_Main menu..
menu:media:Media:Multi-media applications
exec:_CD Audio Ripper (ripit)::ripit
exec:_Music Player (cmus)::cmus
exec:_Youtube (audio only)::youtube-viewer -novideo
group:Youtube (full _video)
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher lxterminal -e youtube-viewer
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
nop
exit:_Main menu..
menu:office:Office:Word processing, calendar, etc
exec:_Month Calendar:pause:clear;ncal
exec:_Year Calendar:pause:clear;ncal -y
exec:Text Editor::clear;${EDITOR:-nano}
nop:Office Suite
group:Database
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher lobase
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
group:Diagrams
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher lodraw
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
group:Formula Editor
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher lomath
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
group:Presentation
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher loimpress
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
group:Spreadsheet
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher localc
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
group:Word Processor
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher lowriter
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
nop
exit:_Main menu..
# submenu for configuring the computer.
menu:configuration:Configuration:System Configuration
exec:_Change Passwords::clear;/usr/lib/F123-wrappers/configure-passwords
exec:_Email Configuration::clear;fleacollar
exec:_Security Configuration::clear;/usr/lib/F123-wrappers/configure-security
exec:_Wireless Internet Connection::clear;sudo configure-wifi
nop
exit:_Main menu..
menu:tools:Tools:System Tools
group:Bluetooth manager
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher blueman-assistant
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
exec:_Search:edit,pause:recoll -t ~Search for what? :~
nop
exit:_Main menu..
menu:power:Shutdown or Restart Your Computer:Shutdown or restart your computer
exec:_Power Off::poweroff
exec:_Restart::reboot
nop
exit:_Main menu..

View File

@ -1,41 +0,0 @@
#!/bin/python3
import sys, os
import pty
import pyte
class FenrirTermStream(pyte.Stream):
def __init__(self):
super().__init__()
def attach(self, screen):
super().attach(screen)
def feed(self, text):
super().feed(text)
class FenrirTermEmu():
def __init__(self):
self.shell = '/bin/bash'
if 'SHELL' in os.environ:
self.shell = os.environ['SHELL']
self.screen = pyte.Screen(80,24)
self.stream = FenrirTermStream()
self.stream.attach(self.screen)
def outputCallback(self, fd):
data = os.read(fd, 1024)
self.stream.feed(data.decode('UTF8'))
# alles
#print(self.screen.display)
# input
#print(data.decode('UTF8'))
return data
def inputCallback(self, fd):
data = os.read(fd, 1024)
print('|'+str(data)+'|')
if data == b'q':
print('quit')
return b'exit\r'
return data
def startEmulator(self):
pty.spawn(self.shell, self.outputCallback, self.inputCallback)
t = FenrirTermEmu()
t.startEmulator()

View File

@ -1,34 +0,0 @@
#!/bin/python3
import sys, os
import pty
import pyte
class FenrirTermStream(pyte.Stream):
def __init__(self):
super().__init__()
def attach(self, screen):
super().attach(screen)
def feed(self, text):
super().feed(text)
class FenrirTermEmu():
def __init__(self):
self.shell = '/bin/bash'
if 'SHELL' in os.environ:
self.shell = os.environ['SHELL']
self.screen = pyte.Screen(80,24)
self.stream = FenrirTermStream()
self.stream.attach(self.screen)
def outputCallback(self, fd):
data = os.read(fd, 1024)
self.stream.feed(data.decode('UTF8'))
# alles
print(self.screen.display)
# input
print(data.decode('UTF8'))
return data
def inputCallback(self, fd):
data = os.read(fd, 1024)
return data
def startEmulator(self):
pty.spawn(self.shell, self.outputCallback, self.inputCallback)

View File

@ -1,34 +0,0 @@
./play zone/wrapWord.py:21: wrappedLines = currText.split('\n')
./play zone/wrapWord.py:50: wrappedLines = currText.split('\n')
./play zone/wrapWord.py:93: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/screenDriver/vcsaDriver.py:281: apps = subprocess.Popen('ps -t tty' + currScreen + ' -o comm,tty,stat', shell=True, stdout=subprocess.PIPE).stdout.read().decode()[:-1].split('\n')
./src/fenrirscreenreader/utils/line_utils.py:14: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/line_utils.py:30: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/line_utils.py:41: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:14: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:35: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:43: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:58: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:73: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:85: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/mark_utils.py:13: inText = inText.split('\n')
./src/fenrirscreenreader/utils/mark_utils.py:59: inText = inText.split('\n')
./src/fenrirscreenreader/utils/word_utils.py:20: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/word_utils.py:62: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/word_utils.py:91: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/core/outputManager.py:173: currline = text.split('\n')[offset['y']]
./src/fenrirscreenreader/core/attributeManager.py:250: textLines = text.split('\n')
./src/fenrirscreenreader/core/screenManager.py:166: diffList = ['+ ' + self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']] +'\n']
./src/fenrirscreenreader/core/screenManager.py:169: diff = self.differ.compare(oldScreenText.split('\n'),\
./src/fenrirscreenreader/core/screenManager.py:170: newScreenText.split('\n'))
./src/fenrirscreenreader/core/screenManager.py:225: windowList = text.split('\n')
./src/fenrirscreenreader/commands/onCursorChange/62000-spell_check.py:66: newContent = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/onCursorChange/60000-word_echo_type.py:39: newContent = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/onCursorChange/50000-present_char_if_cursor_change_horizontal.py:41: newContent = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/onCursorChange/61000-word_echo_navigation.py:37: newContent = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/commands/spell_check.py:47: newContent = self.env['screen']['newContentText'].split('\n')[cursorPos['y']]
./src/fenrirscreenreader/commands/commands/remove_word_from_spell_check.py:45: newContent = self.env['screen']['newContentText'].split('\n')[cursorPos['y']]
./src/fenrirscreenreader/commands/commands/add_word_to_spell_check.py:43: newContent = self.env['screen']['newContentText'].split('\n')[cursorPos['y']]
./src/fenrirscreenreader/commands/onScreenUpdate/60000-history.py:38: prevLine = self.env['screen']['oldContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/onScreenUpdate/60000-history.py:39: currLine = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./TODO v2.0:72: w.fill(i).split('\n')

View File

@ -1,34 +0,0 @@
./play zone/wrapWord.py:21: wrappedLines = currText.split('\n')
./play zone/wrapWord.py:50: wrappedLines = currText.split('\n')
./play zone/wrapWord.py:93: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/screenDriver/vcsaDriver.py:281: apps = subprocess.Popen('ps -t tty' + currScreen + ' -o comm,tty,stat', shell=True, stdout=subprocess.PIPE).stdout.read().decode()[:-1].split('\n')
./src/fenrirscreenreader/utils/line_utils.py:14: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/line_utils.py:30: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/line_utils.py:41: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:14: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:35: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:43: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:58: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:73: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:85: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/mark_utils.py:13: inText = inText.split('\n')
./src/fenrirscreenreader/utils/mark_utils.py:59: inText = inText.split('\n')
./src/fenrirscreenreader/utils/word_utils.py:20: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/word_utils.py:62: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/word_utils.py:91: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/core/outputManager.py:173: currline = text.split('\n')[offset['y']]
./src/fenrirscreenreader/core/attributeManager.py:250: textLines = text.split('\n')
./src/fenrirscreenreader/core/screenManager.py:166: diffList = ['+ ' + self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']] +'\n']
./src/fenrirscreenreader/core/screenManager.py:169: diff = self.differ.compare(oldScreenText.split('\n'),\
./src/fenrirscreenreader/core/screenManager.py:170: newScreenText.split('\n'))
./src/fenrirscreenreader/core/screenManager.py:225: windowList = text.split('\n')
./src/fenrirscreenreader/commands/onCursorChange/62000-spell_check.py:66: newContent = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/onCursorChange/60000-word_echo_type.py:39: newContent = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/onCursorChange/50000-present_char_if_cursor_change_horizontal.py:41: newContent = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/onCursorChange/61000-word_echo_navigation.py:37: newContent = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/commands/spell_check.py:47: newContent = self.env['screen']['newContentText'].split('\n')[cursorPos['y']]
./src/fenrirscreenreader/commands/commands/remove_word_from_spell_check.py:45: newContent = self.env['screen']['newContentText'].split('\n')[cursorPos['y']]
./src/fenrirscreenreader/commands/commands/add_word_to_spell_check.py:43: newContent = self.env['screen']['newContentText'].split('\n')[cursorPos['y']]
./src/fenrirscreenreader/commands/onScreenUpdate/60000-history.py:38: prevLine = self.env['screen']['oldContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/onScreenUpdate/60000-history.py:39: currLine = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./TODO v2.0:72: w.fill(i).split('\n')

View File

@ -1,35 +0,0 @@
#!/bin/bash
# clilauncher.sh
# Description: Launches xterm with give application and fenrir.
#
# Copyright 2019, F123 Consulting, <information@f123.org>
# Copyright 2019, Storm Dragon, <storm_dragon@linux-a11y.org>
#
# This is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free
# Software Foundation; either version 3, or (at your option) any later
# version.
#
# This software is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this package; see the file COPYING. If not, write to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
#
#--code--
rm -rf /tmp/fenrir*
for i in /tmp/fenrirscreenreader-*.sock ; do
if [[ "$i" != "/tmp/fenrirscreenreader-deamon.sock" ]]; then
echo -n "setting set screen#suspendingScreen=pty" | socat - UNIX-CLIENT:$i
fi
done
/usr/bin/urxvt -e ../src/fenrir -s ./xterm.conf -o "general.shell=./waitForKey1;remote#socketFile=/tmp/fenrirscreenreader-waitForKey1.sock"

View File

@ -1,33 +0,0 @@
#!/bin/bash
# clilauncher.sh
# Description: Launches xterm with give application and fenrir.
#
# Copyright 2019, F123 Consulting, <information@f123.org>
# Copyright 2019, Storm Dragon, <storm_dragon@linux-a11y.org>
#
# This is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free
# Software Foundation; either version 3, or (at your option) any later
# version.
#
# This software is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this package; see the file COPYING. If not, write to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
#
#--code--
for i in /tmp/fenrirscreenreader-*.sock ; do
if [[ "$i" != "/tmp/fenrirscreenreader-deamon.sock" ]]; then
echo -n "setting set screen#suspendingScreen=pty" | socat - UNIX-CLIENT:$i
fi
done
/usr/bin/urxvt -e ../src/fenrir -d -s ./xterm.conf -o "general.shell=./waitForKey2;remote#socketFile=/tmp/fenrirscreenreader-waitForKey2.sock"

View File

@ -1,119 +0,0 @@
import os
import struct
import sys
import pty
import tty
import termios
import shlex
import signal
import select
import pyte
import time
class Terminal:
def __init__(self, columns, lines, p_in):
self.screen = pyte.HistoryScreen(columns, lines)
self.screen.set_mode(pyte.modes.LNM)
self.screen.write_process_input = \
lambda data: p_in.write(data.encode())
self.stream = pyte.ByteStream()
self.stream.attach(self.screen)
def feed(self, data):
self.stream.feed(data)
def dump(self):
cursor = self.screen.cursor
lines = []
for y in self.screen.dirty:
line = self.screen.buffer[y]
data = [(char.data, char.reverse, char.fg, char.bg)
for char in (line[x] for x in range(self.screen.columns))]
lines.append((y, data))
self.screen.dirty.clear()
return {"c": (cursor.x, cursor.y), "lines": lines}
def open_terminal(command="bash", columns=80, lines=24):
p_pid, master_fd = pty.fork()
if p_pid == 0: # Child.
argv = shlex.split(command)
env = os.environ.copy()
env["TERM"] = 'vt100'
os.execvpe(argv[0], argv, env)
# File-like object for I/O with the child process aka command.
p_out = os.fdopen(master_fd, "w+b", 0)
return Terminal(columns, lines, p_out), p_pid, p_out
def HandleTerminal():
debug = False
running = True
try:
old_attr = termios.tcgetattr(sys.stdin)
tty.setraw(0)
terminal, p_pid, p_out = open_terminal()
std_out = os.fdopen(sys.stdout.fileno(), "w+b", 0)
while running:
r, w, x = select.select([sys.stdin, p_out],[],[])
if r == []:
continue
if p_out in r:
if debug:
print('pre p_out')
try:
msgBytes = read_all(p_out.fileno())
except (EOFError, OSError):
running = False
break
terminal.feed(msgBytes)
os.write(sys.stdout.fileno(), msgBytes)
if debug:
print('after p_out')
if sys.stdin in r:
if debug:
print('pre stdin')
try:
msgBytes = read_all(sys.stdin.fileno())
except (EOFError, OSError):
running = False
break
terminal.feed(msgBytes)
os.write(p_out.fileno(), msgBytes)
if debug:
print('after stdin')
except Exception as e: # Process died?
print(e)
running = False
finally:
os.kill(p_pid, signal.SIGTERM)
p_out.close()
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_attr)
sys.exit(0)
def get_terminal_size(fd):
s = struct.pack('HHHH', 0, 0, 0, 0)
rows, cols, _, _ = struct.unpack('HHHH', fcntl.ioctl(fd, termios.TIOCGWINSZ, s))
return rows, cols
def resize_terminal(fd):
s = struct.pack('HHHH', 0, 0, 0, 0)
s = fcntl.ioctl(0, termios.TIOCGWINSZ, s)
fcntl.ioctl(fd, termios.TIOCSWINSZ, s)
rows, cols, _, _ = struct.unpack('hhhh', s)
return rows, cols
def read_all(fd):
bytes = os.read(fd, 65536)
if bytes == b'':
raise EOFError
while has_more(fd):
data = os.read(fd, 65536)
if data == b'':
raise EOFError
bytes += data
return bytes
def has_more(fd):
r, w, e = select.select([fd], [], [], 0)
return (fd in r)
if __name__ == "__main__":
HandleTerminal()

View File

@ -1,92 +0,0 @@
#!/usr/bin/python
from cairo import *
from fcntl import ioctl
from array import array
import struct
import errno
import sys
GIO_UNIMAP = 0x4B66
VT_GETHIFONTMASK = 0x560D
if len(sys.argv) != 3:
print "Usage: %s <tty-number> <output-png>" % sys.argv[0]
exit()
ttyno = int(sys.argv[1])
png = sys.argv[2]
tty = open('/dev/tty%d' % ttyno, 'rb')
himask = array("H", (0,))
ioctl(tty, VT_GETHIFONTMASK, himask)
hichar, = struct.unpack_from("@H", himask)
sz = 512
while True:
try:
unipairs = array("H", [0]*(2*sz))
unimapdesc = array("B", struct.pack("@HP", sz, unipairs.buffer_info()[0]))
ioctl(tty.fileno(), GIO_UNIMAP, unimapdesc)
break
except IOError as e:
if e.errno != errno.ENOMEM:
raise
sz *= 2
tty.close()
ncodes, = struct.unpack_from("@H", unimapdesc)
utable = struct.unpack_from("@%dH" % (2*ncodes), unipairs)
charmap = {}
for u, b in zip(utable[::2], utable[1::2]):
if charmap.get(b) is None:
charmap[b] = unichr(u)
vcs = open('/dev/vcsa%d' % ttyno, 'rb')
head = vcs.read(4)
rows = ord(head[0])
cols = ord(head[1])
caretX = ord(head[2])
caretY = ord(head[3])
surf = ImageSurface(FORMAT_RGB24, cols * 8, rows * 16)
cr = Context(surf)
cr.set_source_rgb(1,1,1)
cr.set_font_face(ToyFontFace("Mono", FONT_SLANT_NORMAL, FONT_WEIGHT_NORMAL));
m = Matrix()
m.scale(10.0, 12.0)
cr.set_font_matrix(m)
def CairoColor(b, a):
return (b if a & 4 else 0, b if a & 2 else 0, b if a & 1 else 0)
for y in range(rows):
for x in range(cols):
data = vcs.read(2)
(sh,) = struct.unpack("=H", data)
attr = (sh >> 8) & 0xFF
ch = sh & 0xFF
if hichar == 0x100:
attr >>= 1
ink = attr & 0x0F
paper = (attr>>4) & 0x0F
b = 1.0 if attr & 0x80 else 0.75
if sh & hichar:
ch |= 0x100
cr.set_source_rgb(*CairoColor(b, paper))
cr.rectangle(x*8, y*16, 8, 16)
cr.fill()
cr.set_source_rgb(*CairoColor(b, ink))
cr.move_to(x*8, 12 + y*16)
cr.show_text(charmap.get(ch, u'?'))
cr.stroke()
vcs.close()
surf.write_to_png(png)

View File

@ -1,14 +0,0 @@
#!/bin/bash
echo "1"
echo "Press 'q' to exit"
count=0
while : ; do
read -n 1 k <&1
if [[ $k = q ]] ; then
printf "\nQuitting from the program\n"
break
else
((count=$count+1))
echo "Press 'q' to exit"
fi
done

View File

@ -1,14 +0,0 @@
#!/bin/bash
echo "2"
echo "Press 'q' to exit"
count=0
while : ; do
read -n 1 k <&1
if [[ $k = q ]] ; then
printf "\nQuitting from the program\n"
break
else
((count=$count+1))
echo "Press 'q' to exit"
fi
done

View File

@ -1,142 +0,0 @@
#!/bin/python
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
#from fenrirscreenreader.core import debug
import string
# X Y Word END BREAK
# -1, -1, '', True False
def getPrevWord(currX,currY, currText):
lineBreak = False
endOfScreen = False
if currText == '':
return -1, -1, '', endOfScreen, lineBreak
if currText.strip( string.whitespace) == '':
return currX, currY, '', endOfScreen, lineBreak
x, y, currWord, endOfScreen, lineBreakCurrWord = getCurrentWord(currX,currY,currText)
if endOfScreen:
return x, y, currWord, endOfScreen, lineBreak
wrappedLines = currText.split('\n')
currLine = wrappedLines[y]
if x - 1 < 0:
if y - 1 < 0:
lineBreak = False
endOfScreen = True
return currX, currY, '', endOfScreen, lineBreak
else:
y -= 1
currLine = wrappedLines[y]
x = len( wrappedLines[y]) - 1
lineBreak = True
else:
x -= 1
lineBreakCurrWord = lineBreak or lineBreakCurrWord
x, y, currWord, endOfScreen, lineBreak = getCurrentWord(x,y,currText)
lineBreak = lineBreak or lineBreakCurrWord
return x, y, currWord, endOfScreen, lineBreak
def getCurrentWord(currX,currY, currText):
lineBreak = False
endOfScreen = False
if currText == '':
return -1, -1, '', endOfScreen, lineBreak
if currText.strip( string.whitespace) == '':
return currX, currY, '', endOfScreen, lineBreak
x = currX
y = currY
currWord = ''
wrappedLines = currText.split('\n')
currLine = wrappedLines[y]
Found = False
while(not Found):
if not currLine[x] in string.whitespace:
if x == 0:
Found = True
else:
if currLine[x - 1] in string.whitespace:
Found = True
if not Found:
if x - 1 < 0:
if y - 1 < 0:
lineBreak = False
endOfScreen = True
return currX, currY, '', endOfScreen, lineBreak
else:
y -= 1
currLine = wrappedLines[y]
x = len( wrappedLines[y]) - 1
lineBreak = True
else:
x -= 1
if Found:
currWord = currLine[x:]
for d in string.whitespace:
delimiterPos = currWord.find(d)
if delimiterPos != -1:
currWord = currWord[:delimiterPos]
return x, y, currWord, endOfScreen, lineBreak
return currX, currY, '', False, False
def getNextWord(currX,currY, currText):
lineBreak = False
endOfScreen = False
if currText == '':
return -1, -1, '', endOfScreen, lineBreak
if currText.strip( string.whitespace) == '':
return currX, currY, '', endOfScreen, lineBreak
x = currX
y = currY
currWord = ''
wrappedLines = currText.split('\n')
currLine = wrappedLines[y]
Found = False
while(not Found):
if not Found:
if x + 1 > len( currLine ) - 1:
if y + 1 > len( wrappedLines ) - 1:
lineBreak = False
endOfScreen = True
return currX, currY, '', endOfScreen, lineBreak
else:
y += 1
currLine = wrappedLines[y]
x = 0
lineBreak = True
else:
x += 1
if not currLine[x] in string.whitespace:
if x == 0:
Found = True
else:
if currLine[x - 1] in string.whitespace:
Found = True
if Found:
currWord = currLine[x:]
for d in string.whitespace:
delimiterPos = currWord.find(d)
if delimiterPos != -1:
currWord = currWord[:delimiterPos]
return x, y, currWord, endOfScreen, lineBreak
return currX, currY, '', False, False
data = """das ist ein test lol
das ist ein test l
das ist ein test
asdf asdf a
test test
te test"""
print('__DATA START__')
print(data)
print('__DATA END__\n\n')
x = 3
y = 0
x, y, currWord, endOfScreen, lineBreak = getCurrentWord(x,y,data)
print(x,y,currWord)

View File

@ -1,19 +0,0 @@
#!/bin/python
import brlapi
import time
brl = brlapi.Connection()
brl.enterTtyModeWithPath()
print('display size' + str(brl.displaySize))
print('driver name'+str(brl.driverName))
t = time.time()
#while(time.time() - t <= 5):
try:
brl.writeText( 'this is a 5 second test')
except Exception as e:
print(e)
time.sleep(5)
brl.leaveTtyMode()

View File

@ -1,193 +0,0 @@
[sound]
enabled=True
driver=genericDriver
theme=default
volume=1.0
# shell commands for generic sound driver
genericPlayFileCommand=play -q -v fenrirVolume fenrirSoundFile
genericFrequencyCommand=play -q -v fenrirVolume -n -c1 synth fenrirDuration sine fenrirFrequence
[speech]
enabled=True
driver=speechdDriver
#driver=genericDriver
serverPath=
rate=0.85
pitch=0.5
# Pitch for capital letters
capitalPitch=0.9
#module=espeak
voice=bdl
#language=en
volume=1.0
autoReadIncoming=True
# genericSpeechCommand is the command that is executed for talking
# the following variables are replaced with values
# fenrirText = is the text that should be spoken
# fenrirModule = may be the speech module like used in speech-dispatcher, not every TTY need this
# fenrirLanguage = the language
# fenrirVoice = is the current voice that should be used
# the current volume, pitch and rate is calculated like this
# value = min + settingValue * (min - max )
# fenrirVolume = is replaced with the current volume
# fenrirPitch = is replaced with the current pitch
# fenrirRate = is replaced with the current speed (speech rate)
genericSpeechCommand=espeak -a fenrirVolume -s fenrirRate -p fenrirPitch -v fenrirVoice -- "fenrirText"
# these are the min and max values of the TTS system that is used in genericSpeechCommand
fenrirMinVolume=0
fenrirMaxVolume=200
fenrirMinPitch=0
fenrirMaxPitch=99
fenrirMinRate=80
fenrirMaxRate=890
[braille]
enabled=True
driver=dummyDriver
#layout=en
# to what should the flush timeout relate to
# word = flush after (number of words to display) * seconds
# char = flush after (number of chars to display) * seconds
# fix = flush after X seconds
# none = no automatic flush (manual via shortcut)
flushMode=word
# seconds to flush or
# -1 = no automatic flush (manual via shortcut)
flushTimeout=3
# how should the cursor be focused?
# page = if cursor cross the border move to next page and start at beginn
# fixCell = ajust the cursor on an special cell where it is always placed. the display scroll here more smooth.
cursorFocusMode=page
# define the cell on the Braille device where fenrir should scroll and keep the cursor
# 0 = first cell on device
# -1 = last cell on device
# >0 = fix cell number
fixCursorOnCell=-1
#How should the braille follow the focus
# none = no automatic toggle command used
# review = priority to review
# last = follow last used cursor
cursorFollowMode=last
# number of cells in panning (horizontal)
# 0 = display size, >0 number of cells
panSizeHorizontal=0
[screen]
driver=ptyDriver
encoding=auto
screenUpdateDelay=0.05
suspendingScreen=1
autodetectSuspendingScreen=False
[keyboard]
driver=evdevDriver
# filter input devices NOMICE, ALL or a DEVICE NAME
device=ALL
grabDevices=True
ignoreShortcuts=False
keyboardLayout=desktop
charEcho=False
charDeleteEcho=True
wordEcho=False
interruptOnKeyPress=True
# you can filter the keys on that the speech should interrupt (empty = all keys, otherwhise the given keys)
interruptOnKeyPressFilter=
# timeout for double tap in sec
doubleTapTimeout=0.2
[general]
debugLevel=1
# debugMode sets where the debug output should send to:
# debugMode=File writes to debugFile (Default: /var/log/fenrirscreenreader/fenrir.log)
# debugMode=Print just prints on the screen
debugMode=File
debugFile=
punctuationProfile=default
punctuationLevel=some
respectPunctuationPause=True
newLinePause=True
numberOfClipboards=10
# used path for "export_clipboard_to_file"
# $user is replaced by username
clipboardExportPath=/tmp/fenrirClipboard
emoticons=True
fenrirKeys=KEY_KP0,KEY_CAPSLOCK
scriptKeys=KEY_META,KEY_COMPOSE
timeFormat=%H:%M:%P
dateFormat="%A, %B %d, %Y"
autoSpellCheck=True
spellCheckLanguage=en_US
scriptPath=/usr/share/fenrirscreenreader/scripts
# overload commands, and create new one without changing Fenrir default
commandPath=
#fenrirBGColor = the backgroundcolor
#fenrirFGColor = the foregroundcolor
#fenrirUnderline = speak the underline attribute
#fenrirBold = speak the bold attribute
#fenrirBlink = speak the blink attribute
#fenrirFont = the font
#fenrirFontSize = the fontsize
attributeFormatString=Background fenrirBGColor,Foreground fenrirFGColor,fenrirUnderline,fenrirBold,fenrirBlink, Font fenrirFont,Fontsize fenrirFontSize
autoPresentIndent=False
# play a sound when attributes are changeing
hasAttributes=False
# shell for PTY emulatiun (empty = default shell)
shell=
[focus]
#follow the text cursor
cursor=True
#follow highlighted text changes
highlight=False
[remote]
enable=True
# connection type
# unix = unix sockets
# tcp = tcp (localhost only)
method=unix
# tcp port
port=22447
# socket filepath
socketpath=/tmp/
# allow settings to overwrite
enableSettingsRemote=True
# allow commands to be executed
enableCommandRemote=True
[barrier]
enabled=True
leftBarriers=│└┌─
rightBarriers=│┘┐─
[review]
lineBreak=True
endOfScreen=True
# leave the review when pressing a key
leaveReviewOnCursorChange=True
# leave the review when changing the screen
leaveReviewOnScreenChange=True
[promote]
enabled=True
inactiveTimeoutSec=120
list=
[time]
# automatic time anouncement
enabled=False
# present time
presentTime=True
# present date (on change)
presentDate=True
# present time after x seconds
delaySec=0
# present time after to given minutes example every 15 minutes: 00,15,30,45
# if delaySec is >0 onMinutes is ignored
onMinutes=00,30
# announce via soundicon
announce=True
# interrupt current speech for time announcement
interrupt=False

View File

@ -1,265 +0,0 @@
# Version 1.5
- Doku: Write a user wiki
https://wiki.linux-a11y.org/doku.php?id=fenrir_user_manual&s[]=fenrir
- initial working setup.py
- available via pip (python packet manager)
sudo pip3 install fenrir-screenreader
https://pypi.python.org/pypi/fenrir-screenreader/1.5.post5
- leave review on typing
- add dependency check (check-dependencys.py)
- Add nice dummy drivers as template or for debugging
- reimplement detection code for X11
- initial translate structure (manuelcortez Thanks!)
- add a configurable place where you can place own commands or overwrite existing commands without need to change default code
- implement autodetection of plugged and unplugged input devices
- implement speechdriver generic
- try to autodetect encoding (Easy for contribution) (Prototype "charmapTTY" in play zone)
Braille Support (WIP):
- initial BrlTTY driver
- detect device size via driver
- output to braille device
- make flushMode configurable
- make flushTimeout configurable
- flush message after X seconds and show current line (review over text)
- tweak current commands and output
- command flush_braille
- command for scroll left
- command for scroll right
- create offset for scrolling
- respect scrolling
make cursor following configurable (brailleCursorTrackingMode)
- cell
- page
follow cursor while typing
brailleFocusMode:
- review = priority to review
- move to an event based system
- add initial multithreading/ multiprocessing support
- support cli parameters
- add cli parameter for debugging "-d"
- add cli parameter to overwrite options "-o"
- add cli parameter to specify an settings.conf "-s"
- list of bound commands in Tutorial Mode. speak name, binding and description.
# Version: 1.00
- move from VCS to VCSA and parese the Attributes
http://linux.die.net/man/4/vcsa
http://man.cx/vcsa(4)/de
http://manpages.org/display-vcsa/7
https://en.wikipedia.org/wiki/Virtual_console
every second byte is a attribute others are text. fast way: c[::2],c[1::2]
http://manpages.ubuntu.com/manpages/precise/de/man4/vcs.4.html
https://docs.python.org/3/library/fcntl.html
http://rodrigorivas.serveblog.net/en/imagenes-desde-vt-con-vcsa/
good doku:
http://angband.oook.cz/d/eyangband-052/src/main-vcs.c
http://manpages.ubuntu.com/manpages/trusty/man1/screader.1.html
- implement speechdriver espeak
https://github.com/relsi/python-espeak
- detect collumns in TTYs automaticaly.
it seems we have this info in vcsa
- get current cursor
- shortcut handling
https://docs.python.org/2/library/termios.html
http://stackoverflow.com/questions/287757/pythons-configparser-unique-keys-per-section
0=down, 1=press, 2=hold
2KEY_SHIFT, 1KEY_A = say_current_line_cursor
- implement command structure
- implement speechdriver speechd
https://git.gnome.org/browse/orca/tree/src/orca/speech.py
https://git.gnome.org/browse/orca/tree/src/orca/speechdispatcherfactory.py
http://devel.freebsoft.org/doc/speechd/speech-dispatcher.html#Client-Programming
- autodetect current TTY maybe with (PAM or a sys folder)
cat /sys/devices/virtual/tty/tty0/active
http://serverfault.com/questions/306854/how-to-find-out-the-currently-active-linux-virtual-terminal-while-connected-via
- Input
http://python-evdev.readthedocs.io/en/latest/tutorial.html
http://stackoverflow.com/questions/12384772/how-can-i-capture-mouseevents-and-keyevents-using-python-in-background-on-linux
maybe TTY in RAW MODE
- Settings (make it configureable)
- improve differ speed
- lock mechanism for threads
- restructure loops to listen for events
inputloop -> does block with an select
commands -> a new thread should spawned from inputloop
updatescreen -> maybe we could watch it with inotify vsca should support polling COMMENT: sadly not possible, poll events not fired as expected
https://github.com/seb-m/pyinotify/wiki/Tutorial
<Example Code>
import pyinotify
import glob
class Identity(pyinotify.ProcessEvent):
def process_default(self, event):
p = event.pathname
print(p)
wm = pyinotify.WatchManager()
notifier = pyinotify.Notifier(wm, default_proc_fun=Identity(), timeout=5)
wm.add_watch('/sys/devices/virtual/tty/tty0/active', pyinotify.IN_CLOSE_WRITE)
for file in list(glob.glob('/dev/vcsa[0-64]')):
wm.add_watch(file, pyinotify.IN_CLOSE_WRITE)
print(file)
try:
while 1:
notifier.process_events()
if notifier.check_events( timeout=1000):
notifier.read_events()
print('events')
else:
print('timeout')
except KeyboardInterrupt:
notifier.stop()
print('fin')
</Example Code>
https://www.infoq.com/articles/inotify-linux-file-system-event-monitoring
https://github.com/seb-m/pyinotify/wiki/Tutorial
http://www.saltycrane.com/blog/2010/04/monitoring-filesystem-python-and-pyinotify/
- add setting for ignore screens ( dont grab shortcuts from X or orca)
- soundIcons
- performance tuning
- add sound volume
- convert volume to percent in config
- convert pitch to percent in config
- convert rate to percent in config
- make screenUpdate rate configurable
- default soundIcon theme (soundfiles)
- debugging
- threading ReadContent, ReadShortcuts, executeCommands, listenNewTTYsForListen, controllThread (main)
- autoload plugins while starting
- implement sounddriver generic (use current sox and make it configurable)
- add setting for autodetect X
ps a -o tty,comm | grep -e Xorg | grep -v "grep -e Xorg"
- respect window mode in differ (getwindow code is already in place)
- parse punctuation setting file in conf/substitution
- implement commands
curr_word
curr_char
next_word
next_char
prev_word
prev_char
enable_disable_speech #enable, disable speech
enable_disable_braile #enable, disable braile
enable_disable_sound #enable, disable sound
enable_disable_output #enable, disable speech, braile and sound
next_clipboard
prev_clipboard
first_clipboard
last_clipboard
curr_clipboard
paste_clipboard
define_window
remove_window
reset_review_on_screen_change
remove_clipboard_marks
copy_marked
set_mark (this could also used for area?)
read_clipboard_mark_text
curr_screen
curr_screen_before_cursor
curr_screen_after_cursor
cursor_position
indention
add_bookmark (per application)
remove_bookmark
present_bookmark
say_char_phonetic
spell_word_phonetic
"alpha", "bravo", "charlie", "delta", "echo",
"foxtrot", "golf", "hotel", "india", "juliet",
"kilo", "lima", "mike", "november", "oscar",
"papa", "quebec", "romeo", "sierra", "tango",
"uniform", "victor", "whisky", "x ray",
"yankee", "zulu"
next_char_phonetic
prev_char_phonetic
next_word_phonetic
prev_word_phonetic
toggle_highlighted_mode
- implement onInput commands
read_line_if_cursor_change_vertical (needed if you arrow up and down, we want to announce the line)
read_char_if_cursur_change_horizontal (needed if you arrow left and right, we want to announce the char under the cursor)
echo_char (echos the last char on pressing space or return)
echo_word (echos the last word)
echo_deleted_char (echos deleted char on screen
read highlighted
- implement onScreenChange commands
promoted text
clear_marks_on_screen_change
leve_review_mode_on_screen_change
window mode (define a area and just read that changes)
- add screenManager
abstract screen driver
- pass environment instance in init and remove it from function calls
- New Triggers
onAppChange
onAppProfileChange
onScreenChange
rename current onScreenChange to onScreenUpdate
- rework inputManager
try to consume shortcuts
grab keyboard exclusive
release keyboard on error or quit
grab shortcuts with fenrir key
grab "singel key shortcuts" like numpad navigation for review
forwart nonshortcuts to system
make grabbing configuarble
possiblity to forewart shortcut [proxyshortcut]
possiblity to forewart shortcut (or use them as shortcut) [pressing twice while timeout]
cleanup inputManager
split input driver out of the handler
- dictonary for special chars and string replacements
- punctuation
- beep on cursor to capital letters in cursor and review
- add pause handling
create pause
make it configurable when the pause the pause happens
- external scripting
load scripts from a folder as subprocess
create thread
load key definition of keybindings like SOPS did
- add an daemonize mode
https://github.com/thesharp/daemonize
https://web.archive.org/web/20131017130434/http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/
- announce capslock
- anounce numlock
- anounce scroll
- add the debugging to core
- autostart systemd
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Unit_Files.html

View File

@ -1,71 +0,0 @@
Cleanups:
[X] re.sub(' +,' ',text) -> text.lstrip()? check this?
- inheritation for drivers
[X] Speech (All)
[X] Braille (All)
[X] Sound (All)
[X] Input (All)
[X] Screen (All)
- generic list or see Tutorial mode list (convert clipboard management) (Easy for contribution) - core.memoryManager
[X] next item
[X] prev item
[X] curr item
[X] first item
[X] last item
General:
[X] make it runable using pypy3
[X] play sound on plugging device
[X] interrupt speech while entering an ignored screen
[X] read ignorescreens from an file to be able to halt fenrir from outside
- commands
[X] place last spoken to clipboard (Easy for contribution)
- Improvend Headline Seperator and Multible Char Support
[X]read "13 #" insteed of ###################
- autospeak indentation changes (useful for python programming)
Braille Support:
Driver:
[X] evdev InputDriver
[X] grab/ ungrab devices on ignored screens
Driver (screen, input):
[X] PTY Screen driver (to use gnome-terminal and other terminal emulators)
[X] emulation
[X] basic reading
[X] detect colum/ lines
[X] resize on colum / line change
[X] make shell command configurable (or detect it)
[X] stop emulation properly
[X] attributes
[X] unify hilgight tracking
[X] make pasteing text work again
[X] make double tap work again
[X] new event for byte shortcuts (escape sequences)
[X] create driver
[X] handle byte shortcuts
[X] detect shortcuts
[X] Load escape sequence shortcuts
[X] controll modes (vim like mode to not collide with application shortcuts)
[X] create keyboard layout
[X]set flag that it is used in emulation
[X] write/ consume them (controll it at all)
https://docs.python.org/3.2/library/pty.html
http://sqizit.bartletts.id.au/2011/02/14/pseudo-terminals-in-python/
https://blog.konpat.me/pythons-pseudo-terminal-pty-examples/
[X] make generic speech driver default
[X] pyttsx3 speech driver
- get information already in watchdogs insteed of mainloop (use eventloop to transport)
[X] InputDriver
Settings:
Application Profiles:
Translation:
- German (thanks to schulle4u and Jenny) https://robbinaer.info/index.php?article101/fenrir
Fixes:
- no shell in generic speech Driver
- imporove validity checks for speech driver
- handle thread and process shutdown more gracefully
- cleanup
- a lot more fixes
- better device detection
[X] (not conflict with other applications) find . -iname "*.py" -exec sed 's/from \(core.*\) import/from fenrir-screenreader.\1 import/g' {} \;

View File

@ -1,9 +0,0 @@
- import clipboard from x (xclip)
- barrier mode (respect pseudo cli window borders like used in dialog or pdmenu)
- toggle for barrier mode
- soundicon for barrier mode when enter and leave the barrier detection
- imporove accuracy of speak history (arrow up/ down in bash)
- higher accuracy for hilight tracking
- soundicon for attribute
- overall improved attribute code
- variouse speedups and bugfixes

View File

@ -1,13 +0,0 @@
- fix hight CPU load in VCSA pressing mute key
- add remote manager
- remote manager: TCP connection
- remote manager: UNIX Socket connection(default)
- remote manager: set settings set a setting (-o syntax) "setting set sound#enabled=False"
- remote manager: reset settings "setting reset"
- remote manager: save settings "setting save /path/settings.conf"
- remote Manager: say command (say something) "command say this is a test"
- remote manager: interrupt command (interrupt current speech) "command interrupt"
- remote manager: window command (to define window) "command window startX startY endX endY"
- remote manager: resetwindow command (to reset window) "command resetwindow"
- settings: store settings more centralized
- variouse speedups and bugfixes

View File

@ -1,5 +0,0 @@
- initial working emacspeak driver
- fixes for fenrir-ignore-screen/ fenrir-unignore-screen management tools
- settings and sections are now case sensitive (this makes it possible to make better validity checks.)
- validate datatype for settings you set with "-o" parameter or remotemanager "setting set"
- variouse speedups and bugfixes

View File

@ -1,19 +0,0 @@
!!!! ATTENTION !!!!
the speech-dispatcher driver was reworked. the language and voice was swapped.
this needs some reconfiguration in your settings.conf
what you have as speech language= needs now to be set to voice=
!!!! ATTENTION !!!!
1. vMenu
- it allows to define macros in an menu like structure
- allows us to create a settings menu
2. first letter navigation in vMenu
3. quit command for remote manager for exiting fenrir
4. "vmenu" command for remote manager for lock an vmenu
5. "resetvmenu" command for remote manager for release complete vmenu
6. NVDA compatible keyboard layouts
7. fixes to speech-dispatcher driver
8. quickMenu
Bugfixes and Cleanups

View File

@ -1,12 +0,0 @@
1. PTY screen driver (leaves experimental state, stable now)
- lot higher accuracy
- works with "dialog" now
- a lot of performance speedup
- shortcuts are now recognieced more accurate
2. VCSA screen driver got support for UTF32 using /dev/vcsu (needs Linux >=4.19)
3. Tutorial mode now creates more userfriendly output of the shortcuts
4. faster word echo
5. improved dynamic grab/ ungrab of devices
6. custom dicts and emojis can now use regex when prefix with regex;
Bugfixes and Cleanups

View File

@ -3,5 +3,6 @@ daemonize>=2.5.0
dbus-python>=1.2.8 dbus-python>=1.2.8
pyudev>=0.21.0 pyudev>=0.21.0
pexpect pexpect
pyttsx3 ppyperclip
pyte>=0.7.0 pyte>=0.7.0
rapidfuzz>=2.0.0

View File

@ -1,21 +1,29 @@
#!/bin/python #!/usr/bin/env python3
#https://python-packaging.readthedocs.io/en/latest/minimal.html
import os, glob, sys import os, glob, sys
import os.path import os.path
from shutil import copyfile from shutil import copyfile
from setuptools import find_packages from setuptools import find_namespace_packages
from setuptools import setup from setuptools import setup
fenrirVersion = '1.9.7'
packageVersion = 'post1'
# handle flags for package manager like aurman and pacaur. # handle flags for package manager like aurman and pacaur.
forceSettings = False # Allow both environment variable and command line flag
forceSettingsFlag = (
"--force-settings" in sys.argv or
os.environ.get('FENRIR_FORCE_SETTINGS') == '1'
)
if "--force-settings" in sys.argv: if "--force-settings" in sys.argv:
forceSettings = True
sys.argv.remove("--force-settings") sys.argv.remove("--force-settings")
data_files = [] dataFiles = []
# Handle locale files
localeFiles = glob.glob('locale/*/LC_MESSAGES/*.mo')
for localeFile in localeFiles:
lang = localeFile.split(os.sep)[1]
destDir = f'/usr/share/locale/{lang}/LC_MESSAGES'
dataFiles.append((destDir, [localeFile]))
# Handle other configuration files
directories = glob.glob('config/*') directories = glob.glob('config/*')
for directory in directories: for directory in directories:
files = glob.glob(directory+'/*') files = glob.glob(directory+'/*')
@ -26,25 +34,25 @@ for directory in directories:
destDir = '/etc/fenrirscreenreader/keyboard' destDir = '/etc/fenrirscreenreader/keyboard'
elif 'config/settings' in directory: elif 'config/settings' in directory:
destDir = '/etc/fenrirscreenreader/settings' destDir = '/etc/fenrirscreenreader/settings'
if not forceSettings: if not forceSettingsFlag:
try: try:
del(files[files.index('config/settings/settings.conf')]) files = [f for f in files if not f.endswith('settings.conf')]
except: except:
pass pass
elif 'config/scripts' in directory: elif 'config/scripts' in directory:
destDir = '/usr/share/fenrirscreenreader/scripts' destDir = '/usr/share/fenrirscreenreader/scripts'
if destDir != '': if destDir != '':
data_files.append((destDir, files)) dataFiles.append((destDir, files))
files = glob.glob('config/sound/default/*') files = glob.glob('config/sound/default/*')
destDir = '/usr/share/sounds/fenrirscreenreader/default' destDir = '/usr/share/sounds/fenrirscreenreader/default'
data_files.append((destDir, files)) dataFiles.append((destDir, files))
files = glob.glob('config/sound//template/*') files = glob.glob('config/sound//template/*')
destDir = '/usr/share/sounds/fenrirscreenreader/template' destDir = '/usr/share/sounds/fenrirscreenreader/template'
data_files.append((destDir, files)) dataFiles.append((destDir, files))
files = glob.glob('tools/*') files = glob.glob('tools/*')
data_files.append(('/usr/share/fenrirscreenreader/tools', files)) dataFiles.append(('/usr/share/fenrirscreenreader/tools', files))
data_files.append(('/usr/share/man/man1', ['docu/fenrir.1'])) dataFiles.append(('/usr/share/man/man1', ['docs/fenrir.1']))
def read(fname): def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname)).read() return open(os.path.join(os.path.dirname(__file__), fname)).read()
@ -52,15 +60,13 @@ def read(fname):
setup( setup(
# Application name: # Application name:
name="fenrir-screenreader", name="fenrir-screenreader",
# Version number:
version=fenrirVersion + '.' + packageVersion,
# description # description
description="A TTY Screen Reader for Linux.", description="A TTY Screen Reader for Linux.",
long_description=read('README.md'), long_description=read('README.md'),
long_description_content_type="text/markdown",
keywords=['screenreader', 'a11y', 'accessibility', 'terminal', 'TTY', 'console'], keywords=['screenreader', 'a11y', 'accessibility', 'terminal', 'TTY', 'console'],
license="License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", license="License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
url="https://github.com/chrys87/fenrir/", url="https://git.stormux.org/storm/fenrir/",
download_url = 'https://github.com/chrys87/fenrir/archive/' + fenrirVersion + '.tar.gz',
classifiers=[ classifiers=[
"Programming Language :: Python", "Programming Language :: Python",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
@ -70,35 +76,39 @@ setup(
], ],
# Application author details: # Application author details:
author="Chrys, Storm_dragon, Jeremiah and others", author="Storm Dragon, Jeremiah, Chrys and others",
author_email="chrysg@linux-a11y.org", author_email="storm_dragon@stormux.org",
# Packages # Packages
packages=find_packages('src/'), package_dir={'': 'src'},
package_dir={'': 'src/'}, packages=find_namespace_packages(
scripts=['src/fenrir','src/fenrir-daemon'], where='src',
include=['fenrirscreenreader*']
),
scripts=['src/fenrir'],
# Include additional files into the package # Include additional files into the package
include_package_data=True, include_package_data=True,
zip_safe=False, zip_safe=False,
data_files=data_files, data_files=dataFiles,
# Dependent packages (distributions) # Dependent packages (distributions)
python_requires='>=3.6',
install_requires=[ install_requires=[
"evdev>=1.1.2", "evdev>=1.1.2",
"daemonize>=2.5.0", "daemonize>=2.5.0",
"dbus-python>=1.2.8", "dbus-python>=1.2.8",
"pyperclip",
"pyudev>=0.21.0", "pyudev>=0.21.0",
"rapidfuzz>=2.0.0",
"setuptools", "setuptools",
"pexpect", "pexpect",
"pyttsx3",
"pyte>=0.7.0", "pyte>=0.7.0",
], ],
) )
if not forceSettings: if not forceSettingsFlag:
print('') print('')
# create settings file from example if not exist # create settings file from example if not exist
if not os.path.isfile('/etc/fenrirscreenreader/settings/settings.conf'): if not os.path.isfile('/etc/fenrirscreenreader/settings/settings.conf'):
@ -119,5 +129,4 @@ print('once as their user account and once as root to configure Pulseaudio.')
print('Please install the following packages manually:') print('Please install the following packages manually:')
print('- Speech-dispatcher: for the default speech driver') print('- Speech-dispatcher: for the default speech driver')
print('- Espeak: as basic TTS engine') print('- Espeak: as basic TTS engine')
print('- BrlTTY: for Braille')
print('- sox: is a player for the generic sound driver') print('- sox: is a player for the generic sound driver')

View File

@ -2,20 +2,115 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers. # By Chrys, Storm Dragon, and contributors.
import os, sys, inspect import os
import sys
import inspect
import argparse
from daemonize import Daemonize
# Get the fenrir installation path
fenrirPath = os.path.dirname(os.path.realpath(os.path.abspath(inspect.getfile(inspect.currentframe())))) fenrirPath = os.path.dirname(os.path.realpath(os.path.abspath(inspect.getfile(inspect.currentframe()))))
if not fenrirPath in sys.path: if not fenrirPath in sys.path:
sys.path.append(fenrirPath) sys.path.append(fenrirPath)
from fenrirscreenreader.core import fenrirManager from fenrirscreenreader.core import fenrirManager
from fenrirscreenreader import fenrirVersion
def create_argument_parser():
"""Create and return the argument parser for Fenrir"""
argumentParser = argparse.ArgumentParser(
description="Fenrir - A console screen reader for Linux",
formatter_class=argparse.RawDescriptionHelpFormatter
)
argumentParser.add_argument(
'-v', '--version',
action='version',
version=f'Fenrir screen reader version {fenrirVersion.version}-{fenrirVersion.codeName}',
help='Show version information and exit'
)
argumentParser.add_argument(
'-f', '--foreground',
action='store_true',
help='Run Fenrir in the foreground (default: run as daemon)'
)
argumentParser.add_argument(
'-s', '--setting',
metavar='SETTING-FILE',
default='/etc/fenrir/settings/settings.conf',
help='Path to custom settings file'
)
argumentParser.add_argument(
'-o', '--options',
metavar='SECTION#SETTING=VALUE;..',
default='',
help='Override settings file options. Format: SECTION#SETTING=VALUE;... (case sensitive)'
)
argumentParser.add_argument(
'-d', '--debug',
action='store_true',
help='Enable debug mode'
)
argumentParser.add_argument(
'-p', '--print',
action='store_true',
help='Print debug messages to screen'
)
argumentParser.add_argument(
'-e', '--emulated-pty',
action='store_true',
help='Use PTY emulation with escape sequences for input (enables desktop/X/Wayland usage)'
)
argumentParser.add_argument(
'-E', '--emulated-evdev',
action='store_true',
help='Use PTY emulation with evdev for input (single instance)'
)
return argumentParser
def validate_arguments(cliArgs):
"""Validate command line arguments"""
if cliArgs.options:
for option in cliArgs.options.split(';'):
if option and ('#' not in option or '=' not in option):
return False, f"Invalid option format: {option}\nExpected format: SECTION#SETTING=VALUE"
if cliArgs.emulated_pty and cliArgs.emulated_evdev:
return False, "Cannot use both --emulated-pty and --emulated-evdev simultaneously"
return True, None
def run_fenrir():
"""Main function that runs Fenrir"""
fenrirApp = fenrirManager.fenrirManager(cliArgs)
fenrirApp.proceed()
del fenrirApp
def main(): def main():
app = fenrirManager.fenrirManager() global cliArgs
app.proceed() argumentParser = create_argument_parser()
del app cliArgs = argumentParser.parse_args()
# Validate arguments
isValid, errorMsg = validate_arguments(cliArgs)
if not isValid:
argumentParser.error(errorMsg)
sys.exit(1)
if cliArgs.foreground or cliArgs.emulated_pty:
# Run directly in foreground
run_fenrir()
else:
# Run as daemon
pidFile = "/run/fenrir.pid"
daemonProcess = Daemonize(
app="fenrir",
pid=pidFile,
action=run_fenrir,
chdir=fenrirPath
)
daemonProcess.start()
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@ -1,28 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
import os, sys, inspect
fenrirPath = os.path.dirname(os.path.realpath(os.path.abspath(inspect.getfile(inspect.currentframe()))))
if not fenrirPath in sys.path:
sys.path.append(fenrirPath)
from fenrirscreenreader.core import fenrirManager
from daemonize import Daemonize
pidFile = "/run/fenrir.pid"
def main():
app = fenrirManager.fenrirManager()
app.proceed()
del app
if __name__ == "__main__":
# for debug in foreground
#daemon = Daemonize(app="fenrir-daemon", pid=pidFile, action=main, foreground=True,chdir=fenrirPath)
daemon = Daemonize(app="fenrir-daemon", pid=pidFile, action=main, chdir=fenrirPath)
daemon.start()

View File

@ -1,28 +0,0 @@
#!/usr/bin/env pypy3
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
import os, sys, inspect
fenrirPath = os.path.dirname(os.path.realpath(os.path.abspath(inspect.getfile(inspect.currentframe()))))
if not fenrirPath in sys.path:
sys.path.append(fenrirPath)
from fenrirscreenreader.core import fenrirManager
from daemonize import Daemonize
pidFile = "/run/fenrir.pid"
def main():
app = fenrirManager.fenrirManager()
app.proceed()
del app
if __name__ == "__main__":
# for debug in foreground
#daemon = Daemonize(app="fenrir-daemon", pid=pidFile, action=main, foreground=True,chdir=os.path.dirname(os.path.realpath(fenrirVersion.__file__)))
daemon = Daemonize(app="fenrir-daemon", pid=pidFile, action=main, chdir=fenrirPath)
daemon.start()

View File

@ -1,21 +0,0 @@
#!/usr/bin/env pypy3
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
import os, sys, inspect
fenrirPath = os.path.dirname(os.path.realpath(os.path.abspath(inspect.getfile(inspect.currentframe()))))
if not fenrirPath in sys.path:
sys.path.append(fenrirPath)
from fenrirscreenreader.core import fenrirManager
def main():
app = fenrirManager.fenrirManager()
app.proceed()
del app
if __name__ == "__main__":
main()

View File

@ -1,66 +0,0 @@
#!/bin/python
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
from fenrirscreenreader.core import debug
from fenrirscreenreader.core.brailleDriver import brailleDriver
class driver(brailleDriver):
def __init__(self):
brailleDriver.__init__(self)
self._brl = None
def initialize(self, environment):
self.env = environment
try:
import brlapi
self._brl = brlapi.Connection()
self._deviceSize = self._brl.displaySize
except Exception as e:
print(e)
self.env['runtime']['debug'].writeDebugOut(str(e),debug.debugLevel.ERROR)
return
self._isInitialized = True
def getDeviceSize(self):
if not self._isInitialized:
return (0,0)
if not self._deviceSize:
return (0,0)
return self._deviceSize
def flush(self):
if not self._isInitialized:
return
try:
self._brl.writeText('',0)
except Exception as e:
self.env['runtime']['debug'].writeDebugOut('BRAILLE.flush '+str(e),debug.debugLevel.ERROR)
def writeText(self,text):
if not self._isInitialized:
return
try:
self._brl.writeText(text)
except Exception as e:
self.env['runtime']['debug'].writeDebugOut('BRAILLE.writeText '+str(e),debug.debugLevel.ERROR)
def connectDevice(self):
self._brl = brlapi.Connection()
def enterScreen(self, screen):
if not self._isInitialized:
return
self._brl.enterTtyMode(int(screen))
def leveScreen(self):
if not self._isInitialized:
return
self._brl.leaveTtyMode()
def shutdown(self):
if not self._isInitialized:
return
self.leveScreen()

View File

@ -1,49 +0,0 @@
#!/bin/python
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
from fenrirscreenreader.core import debug
from fenrirscreenreader.core.brailleDriver import brailleDriver
class driver(brailleDriver):
def __init__(self):
brailleDriver.__init__(self)
def initialize(self, environment):
self.env = environment
self._isInitialized = True
self.deviceSize = (40,0)
print('Braille Debug Driver: Initialized')
def getDeviceSize(self):
if not self._isInitialized:
return (0,0)
print('Braille Debug Driver: getDeviceSize ' + str(self.deviceSize))
return self.deviceSize
def writeText(self,text):
if not self._isInitialized:
return
print('Braille Debug Driver: writeText:' + str(text))
print('Braille Debug Driver: -----------------------------------')
def connectDevice(self):
print('Braille Debug Driver: connectDevice')
def enterScreen(self, screen):
if not self._isInitialized:
return
print('Braille Debug Driver: enterScreen')
def leveScreen(self):
if not self._isInitialized:
return
print('Braille Debug Driver: leveScreen')
def shutdown(self):
if self._isInitialized:
self.leveScreen()
self._isInitialized = False
print('Braille Debug Driver: Shutdown')

View File

@ -1,12 +0,0 @@
#!/bin/python
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
from fenrirscreenreader.core import debug
from fenrirscreenreader.core.brailleDriver import brailleDriver
class driver(brailleDriver):
def __init__(self):
brailleDriver.__init__(self)

View File

@ -1,4 +1,4 @@
#!/bin/python #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader

View File

@ -1,4 +1,4 @@
#!/bin/python #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader

View File

@ -1,4 +1,4 @@
#!/bin/python #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader
@ -41,7 +41,7 @@ class command():
# get the word # get the word
newContent = self.env['screen']['newContentText'].split('\n')[cursorPos['y']] newContent = self.env['screen']['newContentText'].split('\n')[cursorPos['y']]
x, y, currWord, endOfScreen, lineBreak = word_utils.getCurrentWord(cursorPos['x'], 0, newContent) x, y, currWord, endOfScreen, lineBreak = word_utils.getCurrentWord(cursorPos['x'], 0, newContent)
currWord = currWord.strip(string.whitespace + '!"#$%&\()*+,-./:;<=§>?@[\\]^_{|}~') currWord = currWord.strip(string.whitespace + r'!"#$%&\()*+,-./:;<=Â?@[\\]^_{|}~')
if currWord != '': if currWord != '':
if self.spellChecker.is_added(currWord): if self.spellChecker.is_added(currWord):

View File

@ -0,0 +1,27 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
from fenrirscreenreader.core import debug
from fenrirscreenreader import fenrirVersion
class command():
def __init__(self):
pass
def initialize(self, environment):
self.env = environment
def shutdown(self):
pass
def getDescription(self):
return _('Present the version of Fenrir currrrently in use.')
def run(self):
try:
self.env['runtime']['outputManager'].presentText(f'Fenrir screen reader version {fenrirVersion.version}-{fenrirVersion.codeName}', interrupt=True)
except exception as e:
self.env['runtime']['outputManager'].presentText(_('Version information is unavailable.'), interrupt=True)
def setCallback(self, callback):
pass

View File

@ -1,4 +1,4 @@
#!/bin/python #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader

View File

@ -1,4 +1,4 @@
#!/bin/python #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader

View File

@ -1,4 +1,4 @@
#!/bin/python #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader

View File

@ -1,4 +1,4 @@
#!/bin/python #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader

View File

@ -1,4 +1,4 @@
#!/bin/python #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader

View File

@ -1,4 +1,4 @@
#!/bin/python #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader

View File

@ -1,4 +1,4 @@
#!/bin/python #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader

View File

@ -1,4 +1,4 @@
#!/bin/python #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader

View File

@ -1,4 +1,4 @@
#!/bin/python #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader

Some files were not shown because too many files have changed in this diff Show More