Compare commits

...

388 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
chrys
9187c7eedf
Update setup.py 2021-05-17 14:32:59 +02:00
chrys
65fa0a54de
Update add_word_to_spell_check.py 2021-04-22 11:34:29 +02:00
Storm Dragon
7fdd5878f2 Updated install.sh so that all keyboard layouts will be installed. 2021-02-22 17:51:36 -05:00
Chrys
fb20f1a681 check_dependency: check for espeak-ng instead of espeak 2021-02-02 11:08:31 +01:00
Chrys
566f2ca8a4 check_dependency: check for espeak-ng instead of espeak 2021-02-02 11:05:08 +01:00
Chrys
404672a5b1 fix volume for gstreamer sound backend 2020-12-16 00:23:37 +01:00
chrys
c59d729748
implement sound volume for gstreamer backend 2020-10-15 13:20:14 +02:00
Storm Dragon
146f133874 Changed the espeak examples to espeak-ng and also for the generic speech command. 2020-09-17 20:48:52 -04:00
chrys
6c0556977e
Merge pull request #55 from RybinDen/feature
update readme
2020-06-11 00:21:22 +02:00
RybinDen
51d5e796bb update reade 2020-04-23 01:31:14 +07:00
chrys
346f7756bc
Update README.md 2020-04-21 14:17:12 +02:00
chrys
70982a2887
Update README.md 2020-04-21 14:14:58 +02:00
chrys
b727ec30b2
Merge pull request #54 from RybinDen/feature
add russian translation
2020-04-21 14:05:13 +02:00
Рыбин Денис
26284cc480
Update generate_translations.sh
user root for raspberry
2020-04-21 09:41:43 +07:00
RybinDen
b6474bfd9d add russian translation 2020-04-20 13:22:02 +07:00
Storm Dragon
bb095022e0 remove 8) from regex because it is used quite a bit in mutt and other apps. Try to make the Oo emoticon not misfire. 2020-04-17 22:02:57 -04:00
Chrys
fd63321554 fix device detection 2020-04-11 01:19:52 +02:00
Storm Dragon
5b5536444d Improved rstrip for copy. 2020-03-07 07:28:30 -05:00
Storm Dragon
48427c247c Remove white space from right of lines copied to clipboard. 2020-03-06 13:13:26 -05:00
Chrys
3d93dcbd98 fix check-dependencies.py 2020-03-03 21:56:44 +01:00
Chrys
b4e6b50530 make punctuation for # work 2020-01-10 17:39:46 +01:00
Chrys
340421ce5a tweak for remote 2020-01-10 14:26:40 +01:00
Chrys
c878ed2b74 tweak for remote 2020-01-10 14:23:53 +01:00
Storm Dragon
3bbc88f351 One more fix with wtf emoticon. 2019-11-08 19:30:59 -05:00
Storm Dragon
1b82dfafba Fixed Oo emoticon in default.: 2019-11-08 19:27:16 -05:00
chrys
4002bc07e1
Update vcsaDriver.py 2019-11-06 14:22:20 +01:00
Chrys
d5ca736f7c get sure decode doesnt break 2019-11-04 23:00:23 +01:00
Chrys
f04d8584d9 get sure decode doesnt break 2019-11-04 22:52:38 +01:00
Chrys
6761b6267c fix vcsa 2019-11-04 22:31:36 +01:00
chrys
bed06374f1
Update remoteManager.py 2019-10-22 13:25:21 +02:00
Chrys
cfb3695196 sync 2019-10-22 01:06:54 +02:00
Chrys
8b5ae6a803 fix regex 2019-10-22 00:56:52 +02:00
Chrys
effb576089 sync 2019-10-22 00:51:09 +02:00
Chrys
981bf85cf0 add regex; 2019-10-22 00:45:38 +02:00
Chrys
aa5bb94237 Merge branch 'master' into retrygrab 2019-10-22 00:28:17 +02:00
Chrys
a05a85ee34 Merge branch 'regexpunct' 2019-10-22 00:28:02 +02:00
Chrys
8ee7823e21 Merge branch 'regexpunct' 2019-10-22 00:27:24 +02:00
Chrys
ce9ffaa107 sync 2019-10-22 00:12:33 +02:00
Chrys
1bb2d35425 add delay to sync 2019-10-22 00:08:44 +02:00
Chrys
617942f828 name for fallback 2019-10-21 23:40:47 +02:00
Chrys
42a690de77 add force 2019-10-21 23:36:46 +02:00
Chrys
d01d4f0773 detect device only once 2019-10-21 23:32:17 +02:00
Chrys
7e4217254a detect device only once 2019-10-21 23:11:13 +02:00
Chrys
0279edf4ff detect device only once 2019-10-21 23:09:15 +02:00
Chrys
d38c409518 fix 2019-10-18 16:08:13 +02:00
Chrys
28f29154cb fix grab ungrab while input 2019-10-18 00:58:47 +02:00
Chrys
8bed7ce8e2 more fixes 2019-10-18 00:24:20 +02:00
Chrys
a3acf7d9cc do not deadlock 2019-10-17 23:55:39 +02:00
Storm Dragon
7749be508e Fixed up punct dictionaries for all language files. They will still need to be translated. 2019-10-16 17:54:18 -04:00
572435bd12 Try to fix emoticons for regex 2019-10-11 05:59:14 -07:00
Chrys
a4b4560a6b reduce sleep time 2019-10-04 23:55:26 +02:00
Chrys
cda91a1ab6 be more aggressive 2019-10-04 23:27:50 +02:00
chrys
d084a11145
Update evdevDriver.py 2019-10-04 18:05:33 +02:00
chrys
882889ee1c
Update evdevDriver.py 2019-10-04 17:57:45 +02:00
Chrys
4365d0c306 remove message 2019-10-04 17:35:10 +02:00
Chrys
ce4da1834f improve error handling 2019-10-04 17:33:48 +02:00
Chrys
23edc5eaa7 remove devices we cannot read anymore 2019-10-04 17:10:58 +02:00
Chrys
ca5ce66f31 retry grabbing 2019-10-04 17:08:27 +02:00
Chrys
c50b64b2f1 fix up bad commit 2019-10-04 16:01:46 +02:00
Storm Dragon
2f0e8470e1 This is still brroken, but at least it doesn't freeze up any more. 2019-09-17 10:38:08 -04:00
chrys
26ad967725
Update byteManager.py 2019-09-14 11:50:04 +02:00
chrys
7125bfac0f
Update byteManager.py 2019-09-14 11:48:23 +02:00
Chrys
7afbd90403 remove : from filename 2019-09-07 22:10:42 +02:00
Chrys
8b49ab8914 make paste work again 2019-09-07 17:28:08 +02:00
Chrys
7736559e92 make paste work again 2019-09-07 17:14:03 +02:00
Chrys
a386ef8d0d add timestamp 2019-09-07 00:43:23 +02:00
Chrys
52f1c221c3 increase char echo tollerance 2019-09-06 22:52:30 +02:00
Chrys
32794f2fe5 fix tab completion 2019-09-06 22:49:50 +02:00
Chrys
13742ba980 strip whitespace 2019-09-06 22:16:00 +02:00
Chrys
d6498f053c remove unneded checks 2019-09-06 22:10:39 +02:00
Chrys
8e39b7b884 imporove tab and char echo accuracy 2019-09-06 22:06:13 +02:00
Chrys
fe96d204a7 try to harden tab completion 2019-09-06 18:16:13 +02:00
Chrys
cacfaac649 version 2019-09-05 23:13:03 +02:00
Chrys
3f85d672a6 unify more loops, remove spaces 2019-09-05 23:12:05 +02:00
Chrys
8663ad1ac9 unify loops 2019-09-05 23:02:30 +02:00
Chrys
05165d2868 improve multiprocessing, wait for complete and handle remtoe moregraceful 2019-09-05 23:01:35 +02:00
chrys
6dbd82da71
Update default.conf 2019-08-30 13:57:28 +02:00
Storm Dragon
45a27be679 Regexp changes for smileys. 2019-08-30 07:02:25 -04:00
Storm Dragon
f676819eae Regexp for emoticons. 2019-08-29 12:46:40 -04:00
Storm Dragon
46427342b3 Emoticons escaped. Comments added explaing custom and emoticon dicts use regexp. 2019-08-29 12:33:32 -04:00
Chrys
7dd5b609de replace replace by sub 2019-08-29 18:08:22 +02:00
Chrys
1155103389 replace replace by sub 2019-08-29 17:55:19 +02:00
Chrys
6b6de57c9e Revert "replace replace by sub"
This reverts commit 7f91223f945b8376340aed9f444ae1109d134235.
2019-08-29 17:52:57 +02:00
Chrys
7f91223f94 replace replace by sub 2019-08-29 17:51:34 +02:00
Chrys
59c4a2beb4 fix sorting of emotjies 2019-08-26 18:54:31 +02:00
Storm Dragon
c407f2f418 Fixed smiley order. 2019-08-26 11:18:49 -04:00
chrys
6db1e9378f
Update default.conf 2019-08-26 17:13:45 +02:00
chrys
128f30c05b
Update default.conf 2019-08-26 17:01:29 +02:00
chrys
ef68584b18
Update default.conf 2019-08-26 16:47:43 +02:00
chrys
aa7d556782
Update default.conf 2019-08-26 16:46:13 +02:00
Storm Dragon
4d834a7a4c Added skull emoticon. 2019-08-25 15:38:04 -04:00
Storm Dragon
e3b24aac95 Some punct expanded to handle # evils msile emoticons added. 2019-08-25 15:34:15 -04:00
Chrys
4d6f6fb038 try fixing broken VCSU 2019-08-25 21:09:49 +02:00
Chrys
2f592338fe make device list available in plug trigger 2019-08-25 20:50:43 +02:00
Chrys
082f392305 make device list available in plug trigger 2019-08-25 20:49:50 +02:00
Chrys
2c81540634 make device list available in plug trigger 2019-08-25 20:48:44 +02:00
Chrys
9657d23c4f reduce timeout 2019-08-24 22:25:45 +02:00
Chrys
9554dbbf6d style 2019-08-24 21:52:48 +02:00
Chrys
f70cb1670e better buffer for pty 2019-08-24 21:51:11 +02:00
Chrys
ecacae23d0 Revert "tweak values"
This reverts commit 968ffd42a3cec5dfd35e6b889212dc453c1a1763.
2019-08-24 21:49:04 +02:00
Chrys
d380ab711d make ,..# vaid section#option separators 2019-08-24 19:27:24 +02:00
Chrys
0e8ebc43b4 try remove sound for virtual devices 2019-08-24 18:26:40 +02:00
chrys
55e9f9e4b4
Update 55000-tab_completion.py 2019-08-23 11:39:11 +02:00
chrys
3271fe9010
Update 15000-char_echo.py 2019-08-23 11:37:41 +02:00
chrys
288661afa2
Update 55000-tab_completion.py 2019-08-23 10:09:30 +02:00
chrys
c7f62cd1ff
Update 15000-char_echo.py 2019-08-23 10:06:29 +02:00
Chrys
4444a90aa2 hardern heuristic even more 2019-08-23 00:01:44 +02:00
Chrys
88e77d310c fix bug 2019-08-22 23:55:57 +02:00
Chrys
99984915e4 restore orign sorting 2019-08-22 23:44:44 +02:00
Chrys
7ce4bc0811 save cursor commands 2019-08-22 23:43:00 +02:00
Chrys
228f6ba417 be more accurate 2019-08-22 22:33:35 +02:00
Chrys
bf49e9d72a remove debug hell 2019-08-22 22:13:15 +02:00
Chrys
3a86f2f9d0 debug hell 2019-08-22 22:06:31 +02:00
Chrys
47027aaa4f debug hell 2019-08-22 22:02:14 +02:00
Chrys
efb53c8b53 debug hell 2019-08-22 22:01:28 +02:00
Chrys
9ddb823861 fix 7 2019-08-22 21:54:22 +02:00
Chrys
dbb3955a79 fix 7 2019-08-22 21:48:45 +02:00
Chrys
2bd9ea2ee3 fix heuristic 2019-08-22 21:29:35 +02:00
Chrys
a76aa855a3 only wait if needed 2019-08-22 21:13:33 +02:00
Chrys
48ab30a370 reenable VCSU 2019-08-22 21:04:58 +02:00
Chrys
6bf7ad6b74 add good heuristic for typing detection 2019-08-22 21:02:54 +02:00
Chrys
7527fc3552 restructure conCursorChange 2019-08-22 20:28:23 +02:00
chrys
c7b5134cd5
Update remoteManager.py 2019-08-22 14:43:18 +02:00
chrys
44c75a90ee
Update remoteManager.py 2019-08-22 14:38:25 +02:00
chrys
c3ab4fabcb
Update vcsaDriver.py 2019-08-22 09:32:27 +02:00
Chrys
a54e053f91 Revert "add better heuristic for typing"
This reverts commit 3d5841ded9c5f718befaf315f56153ee59655835.
2019-08-22 00:42:16 +02:00
Chrys
3d5841ded9 add better heuristic for typing 2019-08-22 00:36:08 +02:00
Chrys
0a78d4d3c6 style 2019-08-22 00:02:56 +02:00
Chrys
975efcace0 Revert "resort word echo"
This reverts commit 3bd8e5e561b93ce22985a46eec869aad1b8745b7.
2019-08-22 00:01:05 +02:00
Chrys
2da58e73ad make virtual devices work 2019-08-21 23:26:49 +02:00
Chrys
c517ed0a6d add release note 2019-08-21 23:22:22 +02:00
Chrys
3bd8e5e561 resort word echo 2019-08-21 23:03:46 +02:00
Chrys
8423dbe4ab complete VCSU support 2019-08-21 22:56:02 +02:00
chrys
4a70a0442e
Update vcsaDriver.py 2019-08-21 16:12:13 +02:00
chrys
b1d9e943ed
Update vcsaDriver.py 2019-08-21 15:36:07 +02:00
chrys
a574e94348
Update TODO v2.0 2019-08-21 12:18:06 +02:00
chrys
968ffd42a3
tweak values 2019-08-21 11:42:18 +02:00
chrys
61a0e69dfa
Update pty.conf 2019-08-21 09:28:17 +02:00
chrys
c1b91d7fef
Update pty2.conf 2019-08-21 09:28:03 +02:00
chrys
994d65a196
Update pty.conf 2019-08-21 09:27:06 +02:00
chrys
364c759de7
Update byteManager.py 2019-08-20 16:29:06 +02:00
chrys
69632cb0b1
Update byteManager.py 2019-08-20 16:05:13 +02:00
chrys
ba6826284f
Update ptyDriver.py 2019-08-20 12:03:49 +02:00
chrys
181c9bd2fe
Update ptyDriver.py 2019-08-20 12:00:39 +02:00
chrys
1b1d6ac269
Update screen_utils.py 2019-08-20 11:44:33 +02:00
chrys
6d5c4cb5f2
Update ptyDriver.py 2019-08-20 11:42:30 +02:00
chrys
a8603c89d7
Update ptyDriver.py 2019-08-20 10:54:31 +02:00
chrys
a7a0ab0d86
Update ptyDriver.py 2019-08-20 10:51:54 +02:00
Chrys
9af6c410c8 remove spellcheck massage 2019-08-20 01:10:52 +02:00
Chrys
f015fa8193 remove unneded return 2019-08-19 23:42:46 +02:00
Chrys
b9af6f2b46 remove set_mode LNM 2019-08-19 23:02:16 +02:00
Chrys
152c4c2185 sync pty driver 2019-08-19 21:15:06 +02:00
Chrys
be19a67fcd make nice shortcut presentation work 2019-08-19 19:10:27 +02:00
chrys
a5b7694e59
Update commandManager.py 2019-08-19 17:27:00 +02:00
chrys
ec4b1408b6
Update commandManager.py 2019-08-19 17:12:45 +02:00
chrys
2082c73554
Update helpManager.py 2019-08-19 17:11:49 +02:00
chrys
7835b145ac
Update commandManager.py 2019-08-19 17:10:54 +02:00
chrys
8ffca527ab
Update evdevDriver.py 2019-08-19 16:01:38 +02:00
chrys
05b9a72b38
Update ptyDriver.py 2019-08-19 14:14:20 +02:00
Chrys
224739ecfb remove trailing spaces 2019-08-13 09:57:43 +02:00
Chrys
371adb7417 improve code 2019-08-13 09:55:23 +02:00
Chrys
f418adb817 remove CRLF 2019-08-13 09:54:05 +02:00
Chrys
9e48fb1cf6 Revert "improve code"
This reverts commit 8ea6e375379e53bd04b1b72a06555add203f3c13.
2019-08-13 09:44:00 +02:00
Chrys
8ea6e37537 improve code 2019-08-13 09:41:16 +02:00
52adc37434 Fix xterm in pyte 2019-08-12 17:48:49 -07:00
Chrys
c843bf313c try to fix 2019-08-13 02:29:57 +02:00
Chrys
19e59dcbd5 Merge branch 'master' of github.com:chrys87/fenrir 2019-08-13 01:09:22 +02:00
Chrys
de92aa33b2 fix term environ 2019-08-13 01:09:09 +02:00
Storm Dragon
d17d2817d3 Terminal number added. 2019-07-29 19:00:00 -04:00
Storm Dragon
c8be993dd6 TTY info added to cursor_position. 2019-07-29 15:56:29 -04:00
chrys
c4cc983c5a
Update fenrirManager.py 2019-05-17 10:18:48 +02:00
Storm Dragon
8394ad551e Merge branch 'shlex'
Hopefully fixed the issues with exporting lines containing lots of quotes and symbols to X.
2019-04-30 09:30:22 -04:00
Storm Dragon
c3ccf3c5df removed import shlex because it is not used. 2019-04-29 08:16:03 -04:00
Storm Dragon
82c3ef97f8 Fixed nvda layout files. 2019-04-29 08:14:27 -04:00
Storm Dragon
83fadb8854 Forgot to move the pipe to the right spot for a here document. 2019-04-28 21:26:52 -04:00
Storm Dragon
23badb0940 Small bug fix with the export here document. 2019-04-28 21:17:28 -04:00
Storm Dragon
014d23c61a tried to fix weird quote stuff with export to X by using a here document. 2019-04-28 21:10:47 -04:00
Storm Dragon
13d06d8470 Revert "Another attempt to fix the weird quoting stuff with export to x."
This reverts commit ee7dc30376680d103ca4df011eb429290c0ba8ff.

It didn't work.
2019-04-28 21:00:12 -04:00
Storm Dragon
ee7dc30376 Another attempt to fix the weird quoting stuff with export to x. 2019-04-28 19:40:42 -04:00
Storm Dragon
c8f85351b6 try to make export to X handle strings with weird symbols, replaced the surrounding quotes. 2019-04-28 11:40:08 -04:00
Storm Dragon
742d3073dd used shel for export to X 2019-04-28 11:27:50 -04:00
Chrys
49e2e4f3a3 cleanup and mark stuff translateable 2019-04-28 12:39:26 +02:00
Storm Dragon
db6ea0c3b5 NVDA compatability settings for save settings. 2019-04-27 17:16:32 -04:00
Storm Dragon
9130503b36 Updated the save settings path. 2019-04-27 15:37:44 -04:00
Chrys
2fe27bdc36 save settingsfile and add API 2019-04-27 21:34:55 +02:00
Storm Dragon
52c7389ba4 Fixed a bug in the presentation of the saved text. 2019-04-27 15:28:26 -04:00
Storm Dragon
ec44730741 removed an unneeded line of code. 2019-04-27 15:27:20 -04:00
Storm Dragon
b9f1feaa60 announced when settings are saved. 2019-04-27 11:22:34 -04:00
Storm Dragon
97e0368f61 Keybinding for sav settings added. 2019-04-27 11:11:34 -04:00
Storm Dragon
b23ef94bec First pass at saving settings. 2019-04-27 11:06:46 -04:00
Chrys
955ee74b47 Merge branch 'master' of github.com:chrys87/fenrir 2019-04-27 16:25:00 +02:00
Chrys
24e78beb88 remove useless code 2019-04-27 16:11:30 +02:00
Chrys
ff1d474ca2 remove boarder checks 2019-04-27 16:08:19 +02:00
chrys
37b68c6e36
Update fenrirManager.py 2019-04-24 13:59:40 +02:00
chrys
6ab98189ff
Add optional resetIndex parameter 2019-04-23 11:54:05 +02:00
Chrys
fe7152c0d9 Merge branch 'master' of github.com:chrys87/fenrir 2019-04-05 21:12:50 +02:00
Chrys
3461b88969 add Temp Disable Speech to remoteManager 2019-04-05 21:12:07 +02:00
Storm Dragon
3cb042b4b6 Fixed a problem with bookmark 8, it was commented for some reason. 2019-04-03 10:53:58 -04:00
chrys
ddcd0b9071 fix pid 2019-03-20 23:03:02 +01:00
chrys
a4129fecbf Merge branch 'master' of github.com:chrys87/fenrir 2019-03-20 17:02:22 +01:00
chrys
185ee8cae2 use right pidfile place 2019-03-20 17:02:13 +01:00
Storm Dragon
85e81168ce Fixed the bookmark_8 binding which was commented for some reason. 2019-03-13 07:31:24 -04:00
chrys
60b0bf272a fix 2019-03-03 21:00:05 +01:00
chrys
da8e28540e add keyecho to tutorial mode 2019-03-03 20:57:58 +01:00
chrys
49c9645b8a Revert "Update vcsaDriver.py"
This reverts commit 47bcaa425b567ec78a9fe9cfb449326140153e25.
2019-03-02 19:06:46 +01:00
chrys
47bcaa425b
Update vcsaDriver.py 2019-02-28 17:52:52 +01:00
chrys
16d657e761 Merge branch 'voice' 2019-02-26 20:47:07 +01:00
chrys
97e70f1ef8 make reset work for speechdispatcher 2019-02-26 20:42:40 +01:00
chrys
05c9aafbfd
Update settingsManager.py 2019-02-26 15:06:21 +01:00
chrys
bafc67b7bb
Update speechdDriver.py 2019-02-26 15:01:24 +01:00
chrys
4f0bc98ff8
Update outputManager.py 2019-02-26 14:57:48 +01:00
chrys
ff96933fff
Update speechDriver.py 2019-02-26 14:54:55 +01:00
chrys
67c99c0dfe
Update speechdDriver.py 2019-02-22 16:35:16 +01:00
chrys
31fd3be23a
Update outputManager.py 2019-02-18 10:09:17 +01:00
Storm Dragon
3e91913241 Updated nvda-compatability keyboard laytouts. 2019-02-17 08:14:31 -05:00
chrys
efe4bac439
Update speechdDriver.py 2019-02-16 13:23:47 +01:00
Storm Dragon
2f7b55f3b8 Updated documentation for language and voice settings. 2019-02-15 14:38:07 -05:00
428 changed files with 12111 additions and 9531 deletions

View File

@ -3,11 +3,16 @@
## Developers
* Chrys: Main coder.
* Storm Dragon Sounds and keyboard layout, tiny bits of code.
* Storm Dragon: Project leader
* Jeremiah: Coder.
## Previous Developers
* Chrys: coder.
## Special thanks to:
* 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
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.
This software is licensed under the LGPL v3.
# OS Requirements
## OS Requirements
- Linux (ptyDriver, vcsaDriver, evdevDriver)
- macOS (ptyDriver)
- BSD (ptyDriver)
- Windows (ptyDriver)
# Core Requirements
- python3 >= 3.3
- screen, input, speech, sound or braille drivers dependencies see "Features, Drivers, Extras".
# Features, Drivers, Extras, Dependencies
# Input Drivers:
## Core Requirements
- 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
- python-evdev >=0.6.3 (This is commonly referred to as python3-evdev by your distribution)
- python-pyudev
@ -25,7 +32,9 @@ This software is licensed under the LGPL v3.
2. "ptyDriver" terminal emulation input driver
- python-pyte
# Screen Drivers:
### Screen Drivers:
1. "vcsaDriver" screen driver for linux VCSA devices
- python-dbus
- 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
- python-pyte
# Speech Drivers:
### Speech Drivers:
1. "genericDriver" (default) speech driver for sound as subprocess:
- espeak or espeak-ng
2. "espeakDriver" speech driver for Espeak or Espeak-NG:
- python-espeak
3. "speechdDriver" speech driver for Speech-dispatcher:
2. "speechdDriver" speech driver for Speech-dispatcher:
- Speech-dispatcher
- python-speechd
4. "emacspeakDriver" speech driver for emacspeak
3. "emacspeakDriver" speech driver for 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:
- Sox
2. "gstreamerDriver" sound driver for gstreamer
- gstreamer >=1.0
- GLib
# Extras:
## Extras:
1. spellchecker
- python-pyenchant
- aspell-YourLanguageCode (example aspell-en for us English)
@ -68,26 +76,63 @@ This software is licensed under the LGPL v3.
3. Modify system volume:
- 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
- PIP: sudo pip install fenrir-screenreader
- fenrir: stable release
- fenrir-git: Bleeding edge release
- Manual:
- install "espeak" and "sox" with your package manager
- sudo pip install -r requirements.txt
- run install.sh and uninstall.sh as root
- you also can just run it from Git without installing:
You can just run the following as root:
if you are in Fenrir Git rootfolder:
cd src/fenrir/
sudo ./fenrir
- install "espeak" and "sox" with your package manager
- sudo pip install -r requirements.txt
- run install.sh or uninstall.sh as root
- You can also just run it from Git without installing:
Requires root privileges
cd src/fenrir/
sudo ./fenrir
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.
By default it uses:
- sound driver: genericDriver (via sox, 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
# Documentation
You can see all information on the Wiki:
https://wiki.linux-a11y.org/doku.php?id=fenrir_user_manual
## Configure pulseaudio
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.
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
## Documentation and Support
- 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,85 +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
[] 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
exec fenrir
[ -r ./conf ] && . ./conf
exec fenrir -f

View File

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

View File

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

View File

@ -1,208 +1,134 @@
#!/bin/env python3
import os, sys
#!/usr/bin/env python3
# default installation
# core
# speech: speech-dispatcher
# sound: sox
# braille: brltty:
defaultInstallation = ['FenrirCore','vcsaDriver','brlapiDriver','evdevDriver','genericDriver (speech)', 'genericDriver (sound)']
currentInstallation = []
import os
import sys
from dataclasses import dataclass
from typing import List, Optional
print('checking dependencys...')
# CORE
print('')
print('fenrir core:')
available = True
try:
from daemonize import Daemonize
print('python3-daemonize: OK')
except:
print('python3-daemonize: FAIL')
available = available and False
try:
import enchant
print('pyenchant: OK')
except:
print('pyenchant: FAIL')
available = available and False
if available:
currentInstallation.append('FenrirCore')
# SCREEN
print('--------------------')
print('screen driver')
# VCSA (screen driver)
print('vcsaDriver')
available = True
try:
import dbus
print('python3-dbus: OK')
except:
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
print('--------------------')
print('braille driver')
# 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:
currentInstallation.append('brlapiDriver')
# INPUT
print('--------------------')
print('input driver')
# 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')
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')
@dataclass
class Dependency:
name: str
depType: str # screen, input, sound, speech, core
moduleName: str
checkCommands: Optional[List[str]] = None # Command-line tools to check
pythonImports: Optional[List[str]] = None # Python packages to check
devicePaths: Optional[List[str]] = None # Device files to check
# SPEECH
print('--------------------')
print('speech driver')
# 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 by default)')
available = True
if os.path.exists('/usr/bin/espeak') or os.path.exists('/bin/espeak'):
print('espeak: OK')
else:
print('espeak: FAIL')
available = available and False
if available:
currentInstallation.append('genericDriver (speech)')
def check_dependency(dep: Dependency) -> bool:
"""Check if a single dependency is satisfied."""
isAvailable = True
if dep.pythonImports:
for package in dep.pythonImports:
try:
moduleName = package.split('.')[0]
__import__(moduleName)
print(f'{package}: OK')
except ImportError:
print(f'{package}: FAIL')
isAvailable = False
# SUMMERY
print('====================')
available = True
missing = []
for element in defaultInstallation:
if not element in currentInstallation:
available = False
missing.append(element)
if available:
print('Default Setup: OK')
else:
print('Default Setup: FAIL')
print('Unavailable Default Modules:')
for e in missing:
print(e)
print('you may need to install the missing dependencys for the modules above or reconfigure fenrir to not use them')
print('')
print('Available Modules:')
for element in currentInstallation:
print(element)
if dep.checkCommands:
for cmd in dep.checkCommands:
if os.path.exists(f'/usr/bin/{cmd}') or os.path.exists(f'/bin/{cmd}'):
print(f'{cmd}: OK')
else:
print(f'{cmd}: FAIL')
isAvailable = False
if dep.devicePaths:
for path in dep.devicePaths:
if os.path.exists(path):
print(f'{path}: OK')
else:
print(f'{path}: FAIL')
isAvailable = False
return isAvailable
# Define all dependencies
dependencyList = [
# Core dependencies
Dependency('FenrirCore', 'core', 'core',
pythonImports=['daemonize', 'enchant']),
# Screen drivers
Dependency('DummyScreen', 'screen', 'dummyDriver'),
Dependency('VCSA', 'screen', 'vcsaDriver',
pythonImports=['dbus'],
devicePaths=['/dev/vcsa']),
Dependency('PTY', 'screen', 'ptyDriver',
pythonImports=['pyte']),
# Input drivers
Dependency('DummyInput', 'input', 'dummyDriver'),
Dependency('DebugInput', 'input', 'debugDriver'),
Dependency('Evdev', 'input', 'evdevDriver',
pythonImports=['evdev', 'evdev.InputDevice', 'evdev.UInput', 'pyudev']),
Dependency('PTYInput', 'input', 'ptyDriver',
pythonImports=['pyte']),
# Sound drivers
Dependency('DummySound', 'sound', 'dummyDriver'),
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('\nUnavailable Default Modules:')
for module in missingModules:
print(f'- {module}')
print('\nYou may need to install the missing dependencies for the modules above or reconfigure fenrir to not use them.')
else:
print('Default Setup: OK')
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_KP2=curr_screen_after_cursor
#=cursor_read_to_end_of_line
#=review_screen_last_char
#=review_screen_first_char
#=cursor_column
#=cursor_lineno
#=braille_flush
#=braille_return_to_cursor
#=braille_pan_left
#=braille_pan_right
#=cursor_read_line_to_cursor
KEY_FENRIR,KEY_CTRL,KEY_1=clear_bookmark_1
KEY_FENRIR,KEY_SHIFT,KEY_1=set_bookmark_1
KEY_FENRIR,KEY_1=bookmark_1
@ -61,7 +64,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_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
@ -116,8 +119,10 @@ 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
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_O=review_next_line
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_L=review_line_last_char
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_Y=toggle_highlight_tracking
#=toggle_barrier
#=cursor_read_line_to_cursor
KEY_FENRIR,KEY_Q=quit_fenrir
KEY_FENRIR,KEY_T=time
2,KEY_FENRIR,KEY_T=date
@ -110,14 +111,18 @@ 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_UP=inc_speech_volume
KEY_FENRIR,KEY_DOWN=dec_speech_volume
KEY_FENRIR,KEY_RIGHT=inc_speech_rate
KEY_FENRIR,KEY_LEFT=dec_speech_rate
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_ALT,KEY_RIGHT=inc_speech_pitch
KEY_FENRIR,KEY_ALT,KEY_LEFT=dec_speech_pitch
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
KEY_FENRIR,KEY_SHIFT,KEY_V=announce_fenrir_version

View File

@ -63,7 +63,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_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
@ -99,14 +99,14 @@ KEY_FENRIR,KEY_SHIFT,KEY_S=remove_word_from_spell_check
KEY_FENRIR,KEY_F2=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
#=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_C=copy_marked_to_clipboard
KEY_FENRIR,KEY_CTRL,KEY_U=copy_last_echo_to_clipboard
KEY_FENRIR,KEY_CTRL,KEY_SHIFT,KEY_C=copy_last_echo_to_clipboard
KEY_FENRIR,KEY_V=paste_clipboard
KEY_FENRIR,KEY_F5=import_clipboard_from_file
KEY_FENRIR,KEY_F6=export_clipboard_to_file
@ -117,11 +117,12 @@ 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_CTRL,KEY_RIGHT=next_quick_menu_entry
KEY_FENRIR,KEY_UP=next_quick_menu_value
KEY_FENRIR,KEY_CTRL,KEY_UP=next_quick_menu_value
KEY_FENRIR,KEY_CTRL,KEY_LEFT=prev_quick_menu_entry
KEY_FENRIR,KEY_DOWN=prev_quick_menu_value
KEY_FENRIR,KEY_CTRL,KEY_DOWN=prev_quick_menu_value
KEY_FENRIR,KEY_CTRL,KEY_C=save_settings
# linux specific
#=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
KEY_FENRIR,KEY_ALT,KEY_UP=inc_alsa_volume
KEY_FENRIR,KEY_ALT,KEY_DOWN=dec_alsa_volume

View File

@ -99,14 +99,14 @@ KEY_FENRIR,KEY_SHIFT,KEY_S=remove_word_from_spell_check
KEY_FENRIR,KEY_F2=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
#=clear_clipboard
#=first_clipboard
#=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_C=copy_marked_to_clipboard
KEY_FENRIR,KEY_CTRL,KEY_U=copy_last_echo_to_clipboard
KEY_FENRIR,KEY_CTRL,KEY_SHIFT,KEY_C=copy_last_echo_to_clipboard
KEY_FENRIR,KEY_V=paste_clipboard
KEY_FENRIR,KEY_F5=import_clipboard_from_file
KEY_FENRIR,KEY_F6=export_clipboard_to_file
@ -117,11 +117,12 @@ KEY_FENRIR,KEY_SHIFT,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_CTRL,KEY_RIGHT=next_quick_menu_entry
KEY_FENRIR,KEY_UP=next_quick_menu_value
KEY_FENRIR,KEY_CTRL,KEY_UP=next_quick_menu_value
KEY_FENRIR,KEY_CTRL,KEY_LEFT=prev_quick_menu_entry
KEY_FENRIR,KEY_DOWN=prev_quick_menu_value
KEY_FENRIR,KEY_CTRL,KEY_DOWN=prev_quick_menu_value
KEY_FENRIR,KEY_CTRL,KEY_C=save_settings
# linux specific
#=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
KEY_FENRIR,KEY_ALT,KEY_UP=inc_alsa_volume
KEY_FENRIR,KEY_ALT,KEY_DOWN=dec_alsa_volume

View File

@ -1,3 +1,7 @@
# This file contains terminal escape sequences as shortcut
# It is used for PTY screen / Input driver (Terminal emulation)
# ^[ is used as escape
# f1 - fenrir help
^[OP=toggle_tutorial_mode
# double tap control+end read attributes

View File

@ -1,10 +1,14 @@
# This file contains terminal escape sequences as shortcut
# It is used for PTY screen / Input driver (Terminal emulation)
# ^[ is used as escape
^[h=toggle_tutorial_mode
^[/=shut_up
^[[D=shut_up
^[O=review_bottom
^[U=review_top
^[[1;3B=review_curr_line
#^[i=review_curr_line
#^[[1;3B=review_curr_line
^[i=review_curr_line
^[u=review_prev_line
^[o=review_next_line
^[J=review_line_begin
@ -36,3 +40,7 @@
^[x=set_mark
^[\=toggle_auto_indent
^[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,8 +46,33 @@ _:===:Lienie unten
[customDict]
[emoticonDict]
:):===:Grins
;):===:Zwinker
XD:===:loool
:D:===:Lach
<{-.-}>:===:Raves
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

@ -4,7 +4,7 @@
# the entrys are seperated with :===: in words colon tripple equal colon ( to not collide with substitutions)
[levelDict]
none:===:
some:===:-$~+*-/\@
some:===:-$~+*-/\@#
most:===:.,:-$~+*-/\@!#%^&*()[]}{<>;
all:===:!"#$%& \'()*+,-./:;<=>?@[\\]^_`{|}~
@ -46,9 +46,33 @@ _:===:line
[customDict]
[emoticonDict]
:):===:smile
;):===:wink
XD:===:LOL
:D:===:laugh
<{-.-}>:===:Raves
\o/:===:Hurray
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

@ -46,8 +46,33 @@ _:===:line
[customDict]
[emoticonDict]
:):===:smile
;):===:twinker
XD:===:loool
:D:===:lought
<{-.-}>:===:Raves
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

@ -46,8 +46,33 @@ _:===:subrayado
[customDict]
[emoticonDict]
:):===:sonrisa
;):===:twinker
XD:===:loool
:D:===:lought
<{-.-}>:===:Raves
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

@ -46,8 +46,33 @@ _:===:souligné
[customDict]
[emoticonDict]
:):===:sourire
;):===:clin d'oeil
XD:===:explosé de rire
:D:===:rire
<{-.-}>:===:Raves
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

@ -46,8 +46,33 @@ _:===:podkreślnik
[customDict]
[emoticonDict]
:):===:smile
;):===:twinker
XD:===:loool
:D:===:lought
<{-.-}>:===:Raves
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

@ -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,238 +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=File
debugFile=/var/log/fenrirscreenreader/fenrir.log
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
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=
[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: /var/log/fenrirscreenreader/fenrir.log)
# debugMode=Print just prints on the screen
debugMode=File
debugFile=/var/log/fenrirscreenreader/fenrir.log
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
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=
[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: /var/log/fenrirscreenreader/fenrir.log)
# debugMode=Print just prints on the screen
debugMode=File
debugFile=/var/log/fenrirscreenreader/fenrir.log
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
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=
[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:
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
# Select speech driver, options are speechdDriver or genericDriver:
driver=speechdDriver
#driver=genericDriver
# 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=0.5
@ -53,20 +49,24 @@ 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
# The default is specified in speechd.conf.
#module=espeak-ng
# 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 selects the voice you want to use, for example, en-GB-scotland will use the Scotish English voice in Espeak,
# 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
# You can add a variant by adding +name onto the end.
# voice=en-us
# Select the language you want Fenrir to use.
#language=english-us
#language=en
# Read new text as it happens?
autoReadIncoming=True
# Speak individual numbers instead of whole string.
readNumbersAsDigits = False
# genericSpeechCommand is the command that is executed for talking
# the following variables are replaced with values
# fenrirText = is the text that should be spoken
@ -78,9 +78,9 @@ autoReadIncoming=True
# 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"
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
fenrirMaxVolume=200
fenrirMinPitch=0
@ -88,37 +88,6 @@ 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
@ -136,7 +105,10 @@ ignoreShortcuts=False
# the current shortcut layout located in /etc/fenrirscreenreader/keyboard
keyboardLayout=desktop
# echo chars while typing.
charEcho=False
# 0 = None
# 1 = always
# 2 = only while capslock
charEchoMode=1
# echo deleted chars
charDeleteEcho=True
# echo word after pressing space
@ -151,10 +123,10 @@ doubleTapTimeout=0.2
[general]
debugLevel=0
# debugMode sets where the debug output should send to:
# debugMode=File writes to debugFile (Default: /var/log/fenrirscreenreader/fenrir.log)
# debugMode=File writes to debugFile (Default:/tmp/fenrir-PID.log)
# debugMode=Print just prints on the screen
debugMode=File
debugFile=/var/log/fenrirscreenreader/fenrir.log
debugFile=
punctuationProfile=default
punctuationLevel=some
respectPunctuationPause=True
@ -184,7 +156,13 @@ commandPath=
#fenrirFont = the font
#fenrirFontSize = the fontsize
attributeFormatString=Background fenrirBGColor,Foreground fenrirFGColor,fenrirUnderline,fenrirBold,fenrirBlink, Font fenrirFont,Fontsize fenrirFontSize
# present indentation
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
hasAttributes=True
# shell for PTY emulatiun (empty = default shell)
@ -205,7 +183,7 @@ driver=unixDriver
# tcp port
port=22447
# socket filepath
socketpath=/tmp/
socketFile=
# allow settings to overwrite
enableSettingsRemote=True
# allow commands to be executed

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: /var/log/fenrirscreenreader/fenrir.log)
# debugMode=Print just prints on the screen
debugMode=File
debugFile=/var/log/fenrirscreenreader/fenrir.log
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
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=
[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=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=/var/log/fenrirscreenreader/fenrir.log
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
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=
[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: /var/log/fenrirscreenreader/fenrir.log)
# debugMode=Print just prints on the screen
debugMode=File
debugFile=/var/log/fenrirscreenreader/fenrir.log
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
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=
[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
# 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

@ -17,8 +17,9 @@ install -m755 -d /usr/share/fenrirscreenreader/scripts
cp -af "config/scripts/wlan__-__key_y.sh" /usr/share/fenrirscreenreader/scripts/
# keyboard
install -m644 -D "config/keyboard/desktop.conf" /etc/fenrirscreenreader/keyboard/desktop.conf
install -m644 -D "config/keyboard/laptop.conf" /etc/fenrirscreenreader/keyboard/laptop.conf
for i in "config/keyboard/"*.conf ; do
install -m644 -D "$i" "/etc/fenrirscreenreader/keyboard/${i##*/}"
done
# punctuation
install -m755 -d /etc/fenrirscreenreader/punctuation

Binary file not shown.

File diff suppressed because it is too large Load Diff

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,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,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,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,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

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

View File

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

View File

@ -2,20 +2,115 @@
# -*- coding: utf-8 -*-
# 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()))))
if not fenrirPath in sys.path:
sys.path.append(fenrirPath)
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():
app = fenrirManager.fenrirManager()
app.proceed()
del app
global cliArgs
argumentParser = create_argument_parser()
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__":
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,21 +1,21 @@
#!/bin/python
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
from fenrirscreenreader.core import debug
class command():
def __init__(self):
pass
def initialize(self, environment):
self.env = environment
def shutdown(self):
pass
def getDescription(self):
return 'No description found'
def run(self):
pass
def setCallback(self, callback):
pass
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
from fenrirscreenreader.core import debug
class command():
def __init__(self):
pass
def initialize(self, environment):
self.env = environment
def shutdown(self):
pass
def getDescription(self):
return 'No description found'
def run(self):
pass
def setCallback(self, callback):
pass

View File

@ -1,26 +1,26 @@
#!/bin/python
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
from fenrirscreenreader.core import debug
# this command is just to initialize stuff.
# like init index lists in memoryManager
# it is not useful to execute it
class command():
def __init__(self):
pass
def initialize(self, environment):
self.env = environment
# clipboard
self.env['runtime']['memoryManager'].addIndexList('clipboardHistory', self.env['runtime']['settingsManager'].getSettingAsInt('general', 'numberOfClipboards'))
def shutdown(self):
pass
def getDescription(self):
return 'No description found'
def run(self):
pass
def setCallback(self, callback):
pass
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
from fenrirscreenreader.core import debug
# this command is just to initialize stuff.
# like init index lists in memoryManager
# it is not useful to execute it
class command():
def __init__(self):
pass
def initialize(self, environment):
self.env = environment
# clipboard
self.env['runtime']['memoryManager'].addIndexList('clipboardHistory', self.env['runtime']['settingsManager'].getSettingAsInt('general', 'numberOfClipboards'))
def shutdown(self):
pass
def getDescription(self):
return 'No description found'
def run(self):
pass
def setCallback(self, callback):
pass

View File

@ -1,4 +1,4 @@
#!/bin/python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
@ -31,7 +31,6 @@ class command():
def run(self):
if not initialized:
self.env['runtime']['outputManager'].presentText(_('pyenchant is not installed'), interrupt=True)
return
if self.env['runtime']['settingsManager'].getSetting('general', 'spellCheckLanguage') != self.language:
try:
@ -42,7 +41,7 @@ class command():
# get the word
newContent = self.env['screen']['newContentText'].split('\n')[cursorPos['y']]
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 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,30 +1,30 @@
#!/bin/python
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
from fenrirscreenreader.core import debug
from fenrirscreenreader.utils import screen_utils
class command():
def __init__(self):
pass
def initialize(self, environment):
self.env = environment
def shutdown(self):
pass
def getDescription(self):
return _('Reads attributes of current cursor position')
def run(self):
cursorPos = self.env['runtime']['cursorManager'].getReviewOrTextCursor()
try:
attributes = self.env['runtime']['attributeManager'].getAttributeByXY( cursorPos['x'], cursorPos['y'])
except Exception as e:
print(e)
attributeFormatString = self.env['runtime']['settingsManager'].getSetting('general', 'attributeFormatString')
attributeFormatString = self.env['runtime']['attributeManager'].formatAttributes(attributes, attributeFormatString)
self.env['runtime']['outputManager'].presentText(attributeFormatString, soundIcon='', interrupt=True)
def setCallback(self, callback):
pass
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
from fenrirscreenreader.core import debug
from fenrirscreenreader.utils import screen_utils
class command():
def __init__(self):
pass
def initialize(self, environment):
self.env = environment
def shutdown(self):
pass
def getDescription(self):
return _('Reads attributes of current cursor position')
def run(self):
cursorPos = self.env['runtime']['cursorManager'].getReviewOrTextCursor()
try:
attributes = self.env['runtime']['attributeManager'].getAttributeByXY( cursorPos['x'], cursorPos['y'])
except Exception as e:
print(e)
attributeFormatString = self.env['runtime']['settingsManager'].getSetting('general', 'attributeFormatString')
attributeFormatString = self.env['runtime']['attributeManager'].formatAttributes(attributes, attributeFormatString)
self.env['runtime']['outputManager'].presentText(attributeFormatString, soundIcon='', interrupt=True)
def setCallback(self, callback):
pass

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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