File: user.txt

package info (click to toggle)
fenrir 1.9.5-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, sid
  • size: 3,724 kB
  • sloc: python: 10,749; sh: 387; makefile: 12
file content (1332 lines) | stat: -rw-r--r-- 61,193 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
====== Fenrir User Manual ======

Fenrir is a modern command line screen reader written in Python3. 
 
It has a modular structure, a flexible based driver model, is highly configurable and easy to customize and extend ([[fenrir_development_manual|see Developer Manual]]).
 
Please see the following pages for the [[fenrir_current_version|current]] and [[fenrir_git_version|Git]] version of Fenrir. 

 
====== Support and Requirements ======
 
Fenrir requires several drivers to interact with the operating system.
 
===== Speech Drivers =====
 
A speech driver is for communication with the text to speech system like [[#SpeechDispatcher|Speech-Dispatcher]] or [[http://espeak.sourceforge.net|Espeak]]. \\
See section [[#Speech|Speech]] in ''settings.conf'' for more information.

 
==== SpeechDispatcher ====
 
This driver is used by default.
It uses Speech-dispatcher as its backend. 
 
Dependencies:
 
  * Speech-dispatcher (installed and configured, [[https://devel.freebsoft.org/speechd#sec2|Documentation]])
  * Python-speechd

==== Espeak ====
 
Uses Espeak via Python bindings.
 
Dependencies:
  * Espeak or Espeak-ng
  * [[https://launchpad.net/python-espeak|python-espeak]]
 
==== Generic ====
 
This invokes speech via a sub-process. This is almost the same as using the commandline. The performance depends on the overhead of the speech synthesis application but it is really flexible.
 
Dependencies:
  * Espeak or Espeak-ng
 
The Requirements are flexible, they depend on the configuration in settings.conf. 
 
==== Dummy ====
 
this is just for debugging, logs are output to the screen and logged as well.

===== Sound Drivers =====
 
To play sound icons and similar.\\
See section [[#Sound|Sound]] in ''settings.conf'' for more information.
 
==== Generic ====
 
This driver is used by default.
 
Dependencies:
 
  * [[http://sox.sourceforge.net/|Sox]] with opus support
The Requirements are flexible, they depend on the configuration in settings.conf. 
 
==== Gstreamer ====

if you prefer to use Gstreamer for sound output.
 
Dependencies:
  * Gstreamer >= 1.x
  * Glibc
 
==== Dummy ====
 
this is just for debugging, logs are output to the screen and logged as well.
 
===== Input Drivers =====
 
Input drivers are to capture keyboard shortcuts issued to the screen reader \
See section [[#Keyboard|Keyboard]] in ''settings.conf'' for more information.
 
==== Evdev ====
 
This driver is used by default.
 
Evdev is the low level input device framework for Linux.
 
Dependencies:
 
  * python-evdev >=0.6.3
  * pyudev
  * loaded uinput kernel module
  * exclusive access to the input devices
Read permission to the following files and services:
  * /dev/input
  * /dev/uinput
 
===== Screen Drivers =====
 
The job of a screen driver is to get the information of current screen content.\\
See section [[#Screen|Screen]] in ''settings.conf'' for more information.
 
==== VCSA ====
 
This driver is used by default.
For Linux VCSA devices. These exist on any current standard installation of Linux.
 
Dependencie
s:
 
  * python-dbus
Read permission to the following files and services (or run as root):
  * /sys/devices/virtual/tty/tty0/active
  * /dev/tty[1 - 64] 
  * /dev/vcsa[1 - 64] ([[https://linux.die.net/man/4/vcsa|VCSA manpage]])
  * read Logind DBUS
 
===== Braille Drivers =====
This is for Braille support.
Braille is currently a work in progress and is planned for the Fenrir 2.0 release.\\
See section [[#Braille|Braille]] in ''settings.conf'' for more information.

 
==== BRLTTY ====
 
This driver is used by default.
It uses [[brltty|BrlTTY]] to communicate with with a Braille device.
 
Dependencies:
 
  * BrlTTY (configured and running, [[http://mielke.cc/brltty/doc/Manual-BRLTTY/English/BRLTTY.html|Documentation]])
  * python-brlapi (configured, [[http://mielke.cc/brltty/doc/Manual-BrlAPI/English/BrlAPI.html|Documentation]])
===== Currently supported platforms =====
 
Currently Fenrir  completely supports the following Platforms:
  * Linux TTY
Support for further Systems are planned.
 
====== Installation ======
 
Fenrir can run without installation. It just requires the dependencies are installed first.
 
We recommend to try it out before installation to be sure everything works and prevent yourself from experiencing a non-talking environment.
 
===== Try Out =====
Fenrir does not require installation. You can try it and make sure everything works before you decide to install. In this way you can be sure that your system doesnt break or stop talking.
for that you can just grab the code and run as root ''src/fenrir/fenrir'' (in foreground) or ''src/fenrir/fenrir-daemon'' (in background, used by systemd for autostart)

===== Install it =====

==== Documented operating systems ==== 
 
==== Arch Linux ====
 
For Arch there are PKGBUILDs in the AUR:
  * [[https://aur.archlinux.org/packages/fenrir/|fenrir]]
  * [[https://aur.archlinux.org/packages/fenrir-git/|fenrir-git]]
 
==== Manual ====
 
  - Download the latest stable version from the [[https://linux-a11y.org/index.php?page=fenrir-screenreader|Fenrir-Project]] site.
  - Unpack the archive
  - Check the needed Dependencys by running [[https://github.com/chrys87/fenrir/blob/master/check-dependencies.py|check-dependencys.py]] script
  - install the missing dependencies an standard installation requires the following:
    * python3 >= 3.3 (and all the following is needed for python3 )
    * python3-speechd (screen)
    * python3-dbus (screen)
    * python3-evdev >= 0.6.4(input)
    * python3-daemonize (background service)
    * python3-brlapi (braille)
    * python3-pyenchant (spellchecker)
    * your language for aspell (aspell-<lang>) (spellchecker)
    * sox (sound)
    * For an individual installation see [[#Support and Requirements|Support and Requirements]] or consult the [[https://github.com/chrys87/fenrir/blob/master/README.md|Readme]])
  - run "install.sh" as root

this installs Fenrir as the following
    * Application:''/opt/fenrir''
    * Settings:''/etc/fenrir''
    * Sound Icons:''/usr/share/fenrirscreenreader/''
 
to remove Fenrir just run uninstall.sh as root
 
==== Git ====
 
if you want to get the latest code you can use git to get a development snapshot:
 
  git clone https://github.com/chrys87/fenrir.git
 
===== Auto Start =====
 
To start Fenrir once:
  systemctl start fenrir
 
To enable auto start on system boot:
  systemctl enable fenrir
 
====== First Steps ======
 
If you are using Fenrir for the first time you may want to take a look at these resources:
  * [[#Keybindings|Keybindings]]
  * [[#Tutorial Mode|Tutorial Mode]]
 
====== Features ======
 
===== Commands =====
 
==== Keybindings ====
 
Normal commands can be invoked in two ways:
  - Using a Metakey ([[#Fenrir Key|FenrirKey]])
  - Shortcuts with a single key

See section [[#Keyboard|Keyboard]] in ''settings.conf'' for more information. 
=== Fenrir Key ===
The Fenrir Key is for invoking screen reader commands. Fenrir can utilize more than one FenrirKey at the same time.
By default the following keys are used:
  - Insert
  - KeyPad Insert
  - Meta (Super, Windows) 
 
=== Script Key ===
To invoke "Scripts" the Script Key is mandatory. The shortcut is encoded in the filename of the script. See [[#Scripting|Scripting]]
=== Desktop Layout ===
^Shortcut   ^Command    ^
|FenrirKey + H|[[#Tutorial Mode|toggle tutorial mode]]|
|CTRL|[[#shut up|shut up (interrupts speech)]]|
|FenrirKey + KeyPad 9|[[#review bottom|reviews bottom]]|
|FenrirKey + KeyPad 7|[[#review top|reviews top]]|
|KeyPad 8|[[#review current line|reviews current line]]|
|KeyPad 7|[[#review previous line|reviews previous line]]|
|KeyPad 9|[[#review next line|reviews next line]]|
|FenrirKey + KeyPad 4|[[#review line beginning|reviews line beginning]]|
|FenrirKey + KeyPad 6|[[#review line ending|reviews line ending]]|
|FenrirKey + KeyPad 1|[[#review line first character|reviews line first character]]|
|FenrirKey + KeyPad 3|[[#review line last character|reviews line last character]]|
|FenrirKey + Alt + 1|[[#present first line|presents first line]]|
|FenrirKey + Alt + 2|[[#present last line|presents last line]]|
|KeyPad 5|[[#review current word|reviews current word]]|
|KeyPad 4|[[#review previous word|reviews previous word]]|
|KeyPad 6|[[#review next word|reviews next word]]|
|FenrirKey + Shift + KeyPad 5|[[#review current word phonetic|reviews current word phonetic]]|
|FenrirKey + Shift + KeyPad 4|[[#review previous word phonetic|reviews previous word phonetic]]|
|FenrirKey + Shift + KeyPad 6|[[#review next word phonetic|reviews next word phonetic]]|
|KeyPad 2|[[#review current character|reviews current char]]|
|KeyPad 1|[[#review previous character|reviews previous char]]|
|KeyPad 3|[[#review next character|reviews next char]]|
|FenrirKey + Shift + KeyPad 2|[[#review current character phonetic|reviews current character phonetic]]|
|FenrirKey + Shift + KeyPad 1|[[#review previous character phonetic|reviews previous character phonetic]]|
|FenrirKey + Shift + KeyPad 3|[[#review next character phonetic|reviews next character phonetic]]|
|FenrirKey + CTRL + KeyPad 8|[[#review up|reviews up]]|
|FenrirKey + CTRL + KeyPad 2|[[#review down|reviews down]]|
|FenrirKey + KeyPad dot|[[#exit review|exit review]]|
|KeyPad dot|[[#cursor position|cursor position]]|
|FenrirKey + I|[[#indent current line|indent curr line]]|
|FenrirKey + KeyPad 5|[[#current screen|current screen]]|
|FenrirKey + KeyPad 8|[[#current screen before cursor|current screen before cursor]]|
|FenrirKey + KeyPad 2|[[#current screen after cursor|current screen after cursor]]|
|<Unbound>|[[#cursor read to end of line|cursor read to end of line]]|
|<Unbound>|[[#cursor column|cursor column]]|
|<Unbound>|[[#cursor line number|cursor line number]]|
|<Unbound>|[[#braille flush|Braille flush]]|
|<Unbound>|[[#braille pan left|Braille pan left]]|
|<Unbound>|[[#braille pan right|Braille pan right]]|
|<Unbound>|[[#braille return to cursor|Braille return to cursor]]|
|FenrirKey + CTRL + 1|[[#clear Bookmark X|clear bookmark 1]]|
|FenrirKey + Shift + 1|[[#set Bookmark X|set bookmark 1]]|
|FenrirKey + 1|[[#read Bookmark X|bookmark 1]]|
|FenrirKey + CTRL + 2|[[#clear Bookmark X|clear bookmark 2]]|
|FenrirKey + Shift + 2|[[#set Bookmark X|set bookmark 2]]|
|FenrirKey + 2|[[#read Bookmark X|bookmark 2]]|
|FenrirKey + CTRL + 3|[[#clear Bookmark X|clear bookmark 3]]|
|FenrirKey + Shift + 3|[[#set Bookmark X|set bookmark 3]]|
|FenrirKey + 3|[[#read Bookmark X|bookmark 3]]|
|FenrirKey + CTRL + 4|[[#clear Bookmark X|clear bookmark 4]]|
|FenrirKey + Shift + 4|[[#set Bookmark X|set bookmark 4]]|
|FenrirKey + 4|[[#read Bookmark X|bookmark 4]]|
|FenrirKey + CTRL + 5|[[#clear Bookmark X|clear bookmark 5]]|
|FenrirKey + Shift + 5|[[#set Bookmark X|set bookmark 5]]|
|FenrirKey + 5|[[#read Bookmark X|bookmark 5]]|
|FenrirKey + CTRL + 6|[[#clear Bookmark X|clear bookmark 6]]|
|FenrirKey + Shift + 6|[[#set Bookmark X|set bookmark 6]]|
|FenrirKey + 6|[[#read Bookmark X|bookmark 6]]|
|FenrirKey + CTRL + 7|[[#clear Bookmark X|clear bookmark 7]]|
|FenrirKey + Shift + 7|[[#set Bookmark X|set bookmark 7]]|
|FenrirKey + 7|[[#read Bookmark X|bookmark 7]]|
|FenrirKey + CTRL + 8|[[#clear Bookmark X|clear bookmark 8]]|
|FenrirKey + Shift + 8|[[#set Bookmark X|set bookmark 8]]|
|FenrirKey + 8|[[#read Bookmark X|bookmark 8]]|
|FenrirKey + CTRL + 9|[[#clear Bookmark X|clear bookmark 9]]|
|FenrirKey + Shift + 9|[[#set Bookmark X|set bookmark 9]]|
|FenrirKey + 9|[[#read Bookmark X|bookmark 9]]|
|FenrirKey + CTRL + 0|[[#clear Bookmark X|clear bookmark 10]]|
|FenrirKey + Shift + 0|[[#set Bookmark X|set bookmark 10]]|
|FenrirKey + 0|[[#read Bookmark X|bookmark 10]]|
|FenrirKey + KeyPad Slash|[[#Create Window|set window application]]|
|2 * FenrirKey + KeyPad Slash|[[#Remove Window|clear window application]]|
|KeyPad Plus|[[#last incoming|read last incoming]]|
|FenrirKey + F2|[[#toggle braille|toggles braille]]|
|FenrirKey + F3|[[#toggle sound|toggles sound]]|
|FenrirKey + F4|[[#toggle speech|toggles speech]]|
|KeyPad Enter|[[#disable speech temporarily|temporarily disables speech]]|
|FenrirKey + CTRL + P|[[#toggle punctuation level|toggles punctuation level]]|
|FenrirKey + RightBrace|[[#toggle auto spell check|toggle auto spell check]]|
|FenrirKey + Backslash|[[#toggle output|toggles output]]|
|FenrirKey + CTRL + E|[[#toggle emoticons|toggles emoticons]]|
|FenrirKey + KeyPad Enter|[[#toggle auto read|toggles auto read]]|
|FenrirKey + CTRL + T|[[#toggle auto time|toggles auto time]]|
|FenrirKey + KeyPad ASTERISK|[[#toggle highlight tracking|toggles highlight tracking]]|
|FenrirKey + Q|[[#quit Fenrir|quits fenrir]]|
|FenrirKey + T|[[#Time|Announce time]]|
|2 * FenrirKey + T|[[#Date|Announce date]]|
|FenrirKey + S|[[#spell check|spell check]]|
|2 * FenrirKey + S|[[#add word to spell check|add word to spell check]]|
|FenrirKey + Shift + S|[[#removes word from spell check|removes word from spell check]]|
|FenrirKey + Backspace|[[#forward keypress|forward keypress]]|
|FenrirKey + Up|[[#increase speech volume|increase speech volume]]|
|FenrirKey + Down|[[#decrease speech volume|decrease speech volume]]|
|FenrirKey + Right|[[#increase speech rate|increase speech rate]]|
|FenrirKey + Left|[[#decrease speech rate|decrease speech rate]]|
|FenrirKey + Alt + Right|[[#increase speech pitch|increase speech pitch]]|
|FenrirKey + Alt + Left|[[#decrease speech pitch|decrease speech pitch]]|
|FenrirKey + Alt + Up|[[#increase sound volume|increase sound volume]]|
|FenrirKey + Alt + Down|[[#decrease sound volume|decrease sound volume]]|
|FenrirKey + CTRL + Shift + C|[[#clear clipboard|clears clipboard]]|
|FenrirKey + Home|[[#first clipboard|first clipboard]]|
|FenrirKey + End|[[#last clipboard|last clipboard]]|
|FenrirKey + PageUp|[[#previous clipboard|previous clipboard]]|
|FenrirKey + PageDown|[[#next clipboard|next clipboard]]|
|FenrirKey + Shift + C|[[#read current clipboard|current clipboard]]|
|FenrirKey + C|[[#copy marked to clipboard|copy marked text to clipboard]]|
|FenrirKey + V|[[#paste clipboard|paste clipboard contents]]|
|FenrirKey + P|[[#import clipboard from file|import clipboard from file]]|
|FenrirKey + Alt + Shift +C|[[#export clipboard to file|export clipboard to file]]|
|FenrirKey + CTRL + Shift + X|[[#Remove Marks|remove marks]]|
|FenrirKey + X|[[#Set mark|set mark]]|
|FenrirKey + Shift + X|[[#Get text between marks|announce marked text]]|
^Linux specific    ^
|<Unbound>|export clipboard to X|
|FenrirKey + CTRL + Up|include Alsa volume|
|FenrirKey + CTRL + Down|decrease Alsa volume|

=== Laptop Layout ===
^Shortcut   ^Command    ^
|FenrirKey + H|[[#Tutorial Mode|toggle tutorial mode]]|
|CTRL|[[#shut up|shut up (interrupts speech)]]|
|FenrirKey + Shift + O|[[#review bottom|reviews bottom]]|
|FenrirKey + Shift + U|[[#review top|reviews top]]|
|FenrirKey + I|[[#review current line|reviews current line]]|
|FenrirKey + U|[[#review previous line|reviews previous line]]|
|FenrirKey + O|[[#review next line|reviews next line]]|
|FenrirKey + Shift + J|[[#review line beginning|reviews line beginning]]|
|FenrirKey + Shift + L|[[#review line ending|reviews line ending]]|
|FenrirKey + CTRL + J|[[#review line first character|reviews line first character]]|
|FenrirKey + CTRL + L|[[#review line last character|reviews line last character]]|
|FenrirKey + Alt + 1|[[#present first line|presents first line]]|
|FenrirKey + Alt + 2|[[#present last line|presents last line]]|
|FenrirKey + K|[[#review current word|reviews current word]]|
|FenrirKey + J|[[#review previous word|reviews previous word]]|
|FenrirKey + L|[[#review next word|reviews next word]]|
|FenrirKey + CTRL + ALT + K|[[#review current word phonetic|reviews current word phonetic]]|
|FenrirKey + CTRL + ALT + J|[[#review previous word phonetic|reviews previous word phonetic]]|
|FenrirKey + CTRL + ALT + L|[[#review next word phonetic|reviews next word phonetic]]|
|FenrirKey + comma|[[#review current character|reviews current character]]|
|FenrirKey + M|[[#review previous character|reviews previous character]]|
|FenrirKey + dot|[[#review next character|reviews next character]]|
|FenrirKey + CTRL + ALT + comma|[[#review current character phonetic|reviews current character phonetic]]|
|FenrirKey + CTRL + ALT + M|[[#review previous character phonetic|reviews previous character phonetic]]|
|FenrirKey + CTRL + ALT + dot|[[#review next character phonetic|reviews next character phonetic]]|
|FenrirKey + CTRL + I|[[#review up|reviews up]]|
|FenrirKey + CTRL + comma|[[#review down|reviews down]]|
|FenrirKey + Slash|[[#exit review|exit review]]|
|FenrirKey + Shift + dot|[[#cursor position|cursor position]]|
|2 * FenrirKey + I|[[#indent current line|indent curr line]]|
|FenrirKey + Shift + K|[[#current screen|current screen]]|
|FenrirKey + Shift + I|[[#current screen before cursor|current screen before cursor]]|
|FenrirKey + Shift + comma|[[#current screen after cursor|current screen after cursor]]|
|<Unbound>|[[#cursor read to end of line|cursor read to end of line]]|
|<Unbound>|[[#cursor column|cursor column]]|
|<Unbound>|[[#cursor line number|cursor line number]]|
|<Unbound>|[[#braille flush|Braille flush]]|
|<Unbound>|[[#braille pan left|Braille pan left]]|
|<Unbound>|[[#braille pan right|Braille pan right]]|
|<Unbound>|[[#braille return to cursor|Braille return to cursor]]|
|FenrirKey + CTRL + 1|[[#clear Bookmark X|clear bookmark 1]]|
|FenrirKey + Shift + 1|[[#set Bookmark X|set bookmark 1]]|
|FenrirKey + 1|[[#read Bookmark X|bookmark 1]]|
|FenrirKey + CTRL + 2|[[#clear Bookmark X|clear bookmark 2]]|
|FenrirKey + Shift + 2|[[#set Bookmark X|set bookmark 2]]|
|FenrirKey + 2|[[#read Bookmark X|bookmark 2]]|
|FenrirKey + CTRL + 3|[[#clear Bookmark X|clear bookmark 3]]|
|FenrirKey + Shift + 3|[[#set Bookmark X|set bookmark 3]]|
|FenrirKey + 3|[[#read Bookmark X|bookmark 3]]|
|FenrirKey + CTRL + 4|[[#clear Bookmark X|clear bookmark 4]]|
|FenrirKey + Shift + 4|[[#set Bookmark X|set bookmark 4]]|
|FenrirKey + 4|[[#read Bookmark X|bookmark 4]]|
|FenrirKey + CTRL + 5|[[#clear Bookmark X|clear bookmark 5]]|
|FenrirKey + Shift + 5|[[#set Bookmark X|set bookmark 5]]|
|FenrirKey + 5|[[#read Bookmark X|bookmark 5]]|
|FenrirKey + CTRL + 6|[[#clear Bookmark X|clear bookmark 6]]|
|FenrirKey + Shift + 6|[[#set Bookmark X|set bookmark 6]]|
|FenrirKey + 6|[[#read Bookmark X|bookmark 6]]|
|FenrirKey + CTRL + 7|[[#clear Bookmark X|clear bookmark 7]]|
|FenrirKey + Shift + 7|[[#set Bookmark X|set bookmark 7]]|
|FenrirKey + 7|[[#read Bookmark X|bookmark 7]]|
|FenrirKey + CTRL + 8|[[#clear Bookmark X|clear bookmark 8]]|
|FenrirKey + Shift + 8|[[#set Bookmark X|set bookmark 8]]|
|FenrirKey + 8|[[#read Bookmark X|bookmark 8]]|
|FenrirKey + CTRL + 9|[[#clear Bookmark X|clear bookmark 9]]|
|FenrirKey + Shift + 9|[[#set Bookmark X|set bookmark 9]]|
|FenrirKey + 9|[[#read Bookmark X|bookmark 9]]|
|FenrirKey + CTRL + 0|[[#clear Bookmark X|clear bookmark 10]]|
|FenrirKey + Shift + 0|[[#set Bookmark X|set bookmark 10]]|
|FenrirKey + 0|[[#read Bookmark X|bookmark 10]]|
|FenrirKey + CTRL + 8|[[#Create Window|set window application]]|
|2 * FenrirKey + CTRL + 8|[[#Remove Window|clear window application]]|
|FenrirKey + Semicolon|[[#last incoming|read last incoming]]|
|FenrirKey + F2|[[#toggle braille|toggles braille]]|
|FenrirKey + F3|[[#toggle sound|toggles sound]]|
|FenrirKey + F4|[[#toggle speech|toggles speech]]|
|FenrirKey + Enter|[[#disable speech temporarily|temporarily disables speech]]|
|FenrirKey + Shift + CTRL + P|[[#toggle punctuation level|toggles punctuation level]]|
|FenrirKey + RightBrace|[[#toggle auto spell check|toggle auto spell check]]|
|FenrirKey + Shift + Enter|[[#toggle output|toggles output]]|
|FenrirKey + Shift + E|[[#toggle emoticons|toggles emoticons]]|
|FenrirKey + Enter|[[#toggle auto read|toggles auto read]]|
|FenrirKey + CTRL + T|[[#toggle auto time|toggles auto time]]|
|FenrirKey + Y|[[#toggle highlight tracking|toggles highlight tracking]]|
|FenrirKey + Q|[[#quit Fenrir|quits fenrir]]|
|FenrirKey + T|[[#Time|Announce time]]|
|2 * FenrirKey + T|[[#Date|Announce date]]|
|FenrirKey + S|[[#spell check|spell check]]|
|2 * FenrirKey + S|[[#add word to spell check|add word to spell check]]|
|FenrirKey + Shift + S|[[#removes word from spell check|removes word from spell check]]|
|FenrirKey + Backspace|[[#forward keypress|forward keypress]]|
|FenrirKey + Up|[[#increase speech volume|increase speech volume]]|
|FenrirKey + Down|[[#decrease speech volume|decrease speech volume]]|
|FenrirKey + Right|[[#increase speech rate|increase speech rate]]|
|FenrirKey + Left|[[#decrease speech rate|decrease speech rate]]|
|FenrirKey + Alt + Right|[[#increase speech pitch|increase speech pitch]]|
|FenrirKey + Alt + Left|[[#decrease speech pitch|decrease speech pitch]]|
|FenrirKey + Alt + Up|[[#increase sound volume|increase sound volume]]|
|FenrirKey + Alt + Down|[[#decrease sound volume|decrease sound volume]]|
|FenrirKey + CTRL + Shift + C|[[#clear clipboard|clears clipboard]]|
|FenrirKey + Home|[[#first clipboard|first clipboard]]|
|FenrirKey + End|[[#last clipboard|last clipboard]]|
|FenrirKey + PageUp|[[#previous clipboard|previous clipboard]]|
|FenrirKey + PageDown|[[#next clipboard|next clipboard]]|
|FenrirKey + Shift + C|[[#read current clipboard|current clipboard]]|
|FenrirKey + C|[[#copy marked to clipboard|copy marked text to clipboard]]|
|FenrirKey + V|[[#paste clipboard|paste clipboard contents]]|
|FenrirKey + F5|[[#import clipboard from file|import clipboard from file]]|
|FenrirKey + Alt + Shift +C|[[#export clipboard to file|export clipboard to file]]|
|FenrirKey + CTRL + Shift + X|[[#Remove Marks|remove marks]]|
|FenrirKey + X|[[#Set mark|set mark]]|
|FenrirKey + Shift + X|[[#Get text between marks|announce marked text]]|
^Linux specific    ^
|<Unbound>|export clipboard to X|
|FenrirKey + CTRL + Up|increases Alsa volume|
|FenrirKey + CTRL + Down|decreases Alsa volume|
==== General ====
=== quit Fenrir ===
Just stops fenrir.
=== shut up ===
Interrupt the current spoken.
==== Review Modes ====
Fenrir provides a virtual cursor, with it you can navigate all over the screen without changing the text cursor. 
 
Using the review feature will open the review mode automatically. 
 
The review cursor always starts from the text cursor.  Attention: after using the review mode, the review cursor will stay open until you use the ''exit review'' shortcut. 
 
Think when using clipboard operations and similar. The review cursor is always prefered over the text cursor.

Fenrir sounds a bell sound if the used review command jumps to another line or end of screen.
=== exit review ===
You can leave the review mode by pressing the ''exit review'' shortcut.
=== review bottom ===
Set the review cursor to first column in the last line.
=== review top ===
Set the review cursor to the first column in the first line
=== review current line ===
Set the review cursor to the beginn of the the current line and review it.
=== review previous line ===
Set the review cursor to the previous line and review it.
=== review next line ===
Set the review cursor to the next line and review it.
=== review line beginning ===
Set the review cursor to the begin of the current line
=== review line ending ===
Set the review cursor to the end of the current line
=== review line first character ===
Set the review cursor the first char (that is not space) in the current line and review it.
=== review line last character ===
Set the review cursor the last char (that is not space) in the current line and review it.
=== review current word ===
Sets the review cursor to the beginning of the current word and review it.
=== review previous word ===
Sets the review cursor to the beginning of the previous word and review it.
=== review next word ===
Sets the review cursor to the beginning of the next word and review it.
=== review current word phonetic ===
Sets the review cursor to the beginning of the current word and spell it phonetic.
=== review previous word phonetic ===
Sets the review cursor to the beginning of the previous word and spell it phonetic.
=== review next word phonetic ===
Sets the review cursor to the beginning of the next word and spell it phonetic.
=== review current character ===
Does not change the review cursor. Just announce the current char.
=== review previous character ===
Sets review cursor to the previous column and review it
=== review next character ===
Sets review cursor to the next column and review it
=== review current character phonetic ===
Does not change the review cursor. Just announce the current char phonetic.
=== review previous character phonetic ===
Sets review cursor to the previous column and announce the char phonetic.
=== review next character phonetic ===
Sets review cursor to the next column and announce the char phonetic.
=== review up ===
Set the review cursor in the same column one line above the current one and review it.
=== review down ===
Set the review cursor in the same column one line below the current one and review it.
==== Handling marking ====
A mark defines a point of origin or end to prepare to copy or paste a block of text.
\\
Examples where you need marks are:
  * copy to clipboard
  * set window application
  * set bookmark 1 - X
=== Set mark ===
How to set a mark:
  - navigate with review or textcursor to the position you want to set the mark. Attention: if a review cursor is set, that is the prefered. If you want to use text cursor, be sure that you are not in review mode.
  - press shortcut for ''set mark''
you can set two marks (begin and end). Some commands allow some simpler usecases just using the whole line if only one mark is set. you may want to try this out.
=== Get text between marks ===
To get the text that is currently between your marks press shortcut for ''marked text''.\\
=== Remove Marks ===
You can remove all current marks by pressing the shortcut for ''remove marks''.
Changing the screen also removes the marks.
==== Screen Interaction ====
Fenrir provides several methods to interact with the current screen.
=== forward keypress ===
This just forwards the next shortcut to the screen Fenrir shortcut or not. This is useful if the currently pressed shortcut is also in use by Fenrir.
=== Clipboard ===
Fenrir provides a clipboard with multible items represented by a list. You navigate throught the list and paste the selected clipboard.
== copy marked to clipboard ==
To copy something to the clipboard you need to set one or two marks. if you set one mark, the text between the mark and your current cursor is copied to clipboard. Setting two marks just copies the text between the marks into the clipboard. If you copy something it is always placed as the first item on your clipboard.
== clear clipboard ==
You can remove all items from the current clipboard by ''clear clipboard'' functionality.
== first clipboard ==
This moves quick to the first item of the clipboard.
== last clipboard ==
This moves quick to the last item of the clipboard.
== previous clipboard ==
Go to previous item in the clipboard.
== next clipboard ==
Go to next item on the clipboard. 
== read current clipboard ==
Read the content of the current item of the clipboard.
== paste clipboard ==
Pass whatever item is currently selected by first, last, prev or next clipboard commands.
if no special clipboard is selected the (last copied) is used.
== export clipboard to file ==
This allows you to export the current clipboard to a configurable filepath. This is useful to share the clipboard with a graphical desktop.
== import clipboard from file ==
Import a clipboard from a configurable file. This is useful to share the clipboard with a graphical desktop.
==== Quick Settings ====
Fenrir provides shortcuts to change settings temporarily and on the fly without the need to permanently change the ''settings.conf'' file.
=== toggle braille ===
Enables and disables Braille. This is not persistent stored in your ''settings.conf'' but during run time.
=== toggle sound ===
Enables and disables sound. This is not persistent stored in your ''settings.conf'' but during run time.
=== toggle speech ===
Enables and disables speech. This is not persistent stored in your ''settings.conf'' but during run time.
=== disable speech temporarily ===
Disables the speech until next key press. it might be useful if you want to listen to music or similar. As soon as a key is pressed it is going to be enabled again.
=== toggle punctuation level ===
Cycle between all available punctuation levels. This is not persistent stored in your ''settings.conf'' but during run time.
=== toggle auto spell check ===
Enables and disables automatic spellchecker (when typing). This is not persistent stored in your ''settings.conf'' but during run time.
=== toggle emoticons ===
Enables and disables emoticons. This is not persistent stored in your ''settings.conf'' but during runtime.
=== toggle output ===
Enables and disables all output at once (sound, Braille, speech). This is not persistent stored in your ''settings.conf'' but during run time.
=== toggle auto read ===
Enables and disables what is automatically spoken. This is not persistent stored in your ''settings.conf'' but during run time.
=== toggle auto time ===
Enables and disables auto time functionality. This is not persistent stored in your ''settings.conf'' but during run time.
=== toggle highlight tracking ===
Enables and disables highlight tracking. This is not persistent stored in your ''settings.conf'' but during run time.
=== increase speech volume ===
Increase the volume of the speech. This is not persistent stored in your ''settings.conf'' but during runtime.
=== decrease speech volume ===
Decrease the volume of the speech. This is not persistent stored in your ''settings.conf'' but during runtime.
=== increase speech rate ===
Increase the rate of the speech. This is not persistent stored in your ''settings.conf'' but during runtime.
=== decrease speech rate ===
Decrease the rate of the speech. This is not persistent stored in your ''settings.conf'' but during runtime.
=== increase speech pitch ===
Increase the pitch of the speech. This is not persistent stored in your ''settings.conf'' but during runtime.
=== decrease speech pitch ===
Decrease the pitch of the speech. This is not persistent stored in your ''settings.conf'' but during runtime.
=== increase sound volume ===
Increase the volume of the sound. This is not persistent stored in your ''settings.conf'' but during runtime.
=== decrease sound volume ===
Decrease the volume of the sound. This is not persistent stored in your ''settings.conf'' but during runtime.
==== Window Mode ====
Fenrir supports window mode, a window is a partial area of the screen.
=== Create Window ===
To create a window you need to do the following:
  - set a beginning mark (as the start of the window)
  - set an end mark (where the window should end)
  - press ''set window application'' shortcut. 
Now Fenrir ignores anything outside of the window.\\
=== Remove Window ===
You can remove the window by pressing ''the clear window application'' shortcut.
Now Fenrir will read everything on the screen again.
==== Tracking Modes ====
Different types of tracking are currently supported
See section [[#Focus|Focus]] in ''settings.conf'' for more information.
=== Cursor Tracking === 
This follows the text cursor. This is the typical way an application works. This is used by:
  * almost any shell such as (Bash, Zsh, sh)
  * vim
  * nano
  * emacs
  * mutt
  * tintin++
=== Highlight Tracking ===
In some applications there are no text cursors. In those applications cursor changes are represented by different colors or attributes (underlined or bold). This mode tracks and announces these changes for you. This is used by: 
    * wifi-menu
    * dialog
    * alpine
==== Tutorial Mode ====
Fenrir provides a Tutorial mode. 
When you enter tutorial mode, screen reader commands are intercepted  and explained instead of executing them. ''Arrow up'' and ''Arrow Down'' let you navigate through a list of all available commands with shortcuts and description. Pressing escape leaves the tutorial mode. 

==== Information ====
=== Time ===
Announces the current Time.
=== Date ===
Announces the current Date.
=== Bookmarks ===
Bookmarks provide quick access to part of the screen without the need to navigate to the area.
By default Fenrir provides 10 bookmarks. Those can be set and accessed via shortcut.
This is useful for status lines or other information where the position does not change.
== set Bookmark X ==
You need to set the bookmark first. For that you have to set one or two lines for use.
  - Set marks (one or two)
  - press shortcut for ''set bookmark X''. X represents the number 1 - 10.
== read Bookmark X ==
If a bookmark is set you can access the area just by pressing the ''bookmark X'' shortcut. X represents the number 1 - 10. Bookmarks are dynamic. That means the content changes with the screen. 
== clear Bookmark X ==
to remove a bookmark just press the ''clear bookmark X'' shortcut.  X represents the number 1 - 10.
Afterward the bookmark is no longer available.
=== cursor position ===
You can get information about the current cursor and its position by using the "cursor position" functionality.
=== indent current line ===
Announce the current indent level of the current line. It represents the number of trailing spaces of the line.
=== current screen ===
Reads all the current screen from the beginning to the end.
=== current screen  before cursor ===
Reads current screen from the beginning of the screen to the current cursor position.
=== current screen after cursor ===
Read anything after current cursor position to the end.
=== cursor read to end of line ===
Read from the current cursor position to the end of the current line.
=== cursor column ===
Read the current X position of a cursor (column of the current line).
=== cursor line number ===
Read the current Y position of a cursor (line number).
=== present first line ===
Reads just the first line. this is maybe useful for status information.
=== present last line ===
Presets the last line. This is maybe useful for status information.
=== last incoming ===
Repeat the last automatically incoming text.
===== Input =====
==== Echo ====
Fenrir provides different methods of echoing content:
  * Word: Will speak each word after you push space
  * Character: speak any letter you type on the screen
  * Delete Character: speaks the character prior to the cursor when you push backspace
==== Silence on Key press ====
==== Spellchecker ====
Fenrir has a built-in spellchecker, it can invoke automatically while typing or be called by a shortcut.
Commands to add or remove the current word to the dictionary are included. 
As using the spellchecker is enhanced usage. You will need dictionary aspell-<language>.
See section [[#General|General]] in ''settings.conf'' for more information.
=== spell check ===
Invokes the spellcheck on the word that contains the Review or text cursor. 
=== add word to spell check ===
Adds the word under the Review or Text cursor to the dictionary.
=== removes word from spell check ===
Removes the word under the Review or Text cursor from the dictionary.
===== Announcements =====
==== Emoticons ====
If you want to replace ":)" emoticons with "smile" in speech you can use this feature.
It can be toggled on or off.
You can define emoticons in a dictionary, please see Emoticon Dictionary.
See section [[#General|General]] in ''settings.conf'' to see how to enable or disable this feature.

==== Time ====
Announce the time at periodical increments, To track the time easily.
You can define 2 different ways of time announcements.
  - periodic
  - on fix minutes

Example periodic, every 20 minutes "delaySec=20":

  [time]
  enabled=True
  presentTime=True
  presentDate=True
  delaySec=20
  onMinutes=
  announce=True
  interrupt=False    

Example on fix minutes in an hour. example every quarter "delaySec=0" and "onMinutes=00,15,30,45":

  [time]
  enabled=True
  presentTime=True
  presentDate=True
  #delaySec is repected bevore onMinutes so it need to be set to 0
  delaySec=0 
  onMinutes=00,15,30,45
  announce=True
  interrupt=False      
==== Promoted List ====
Promoted Lists are a nice feature if you are away from your computer or performing more longer tasks.
you can define a list of words which you want to hear a sound icon for after a period of inactivity.
Example if the word "Chrys" appears after 120 Seconds of inactivity:
  [promote]
  enabled=True  
  inactiveTimeoutSec=120
  list=Chrys
See section [[#Promote|Promote]] in ''settings.conf'' for more information.
==== Punctuation ====
Fenrir handles punctuation levels and names for you with several provided dictionaries.

See levelDict
See punctuationDict
===== Braille =====
Fenrir provides Braille support in Version >= 2.0.
See section [[#Braille|Braille]] in ''settings.conf'' for more information.
==== braille flush ====
If a message appears on the Braille device you can flush it to get back to the review- or system cursor
==== Braille pan left ====
If a line is longer than your Braille devices you can move the view (called panning) to the left.
So you can read stuff without the need to move the review- or system cursor.
==== Braille pan right ====
If a line is longer than your Braille devices you can move the view (called panning) to the right.
So you can read stuff without the need to move the review- or system cursor.
==== braille return to cursor ====
When you have finished reading the line on the Braille device using panning, the focus can be returned to the current used cursor by using "return to cursor" command.
===== Dictionary =====
You can make use of different kinds of built-in dictionary's.
A dictionary has a name and list of keys and values separated by :===:
Example:
  [customDict]
  Chrys:===:Chrys is cool
  lollipop:===:lolli
that means that every instance "chrys" is displayed, speech will say Chrys is cool.
"lollipop" is spoken as "lolli".
Before making changes to a dictionary we recommend  making a backup of your current dictionary in case future updates overwrite your local changes.
==== Punctuation ====
=== Level ===
The punctuation level dict contains lists with "what punctuation is spoken in what level".
the default one looks like this:
  [levelDict]
  none:===:
  some:===:.-$~+*-/\@
  most:===:.,:-$~+*-/\@!#%^&*()[]}{<>;
  all:===:!"#$%& \'()*+,-./:;<=>?@[\\]^_`{|}~
the level "none" has no values. so it should not speak any punctuation (sadly this is not respected by every TTS system)
if "some" is the current level the following are spoken: dot dash dollar tilde plus star slash backslash at.
same for most and all, you can add new levels. if you cycle punctuation levels they are recognized. the default punctuation level is set in settings.conf. The default is "some".
=== Punctuation ===
The punctuation dictionary "[punctDict]" contains how the punctuation is spoken. 
Example:
  [punctDict]
  _:===:line  
speaks an _ as "line".  
  [punctDict]
  _:===:underscore
speaks an _ as underscore.
for question mark an ? is appended to the word that the TTS system can announce the question correctly.    
==== Custom ====
The dict "[customDict]" is just for your own use, it just replace the key with the value without any special functionality. This might be used to fix incorrectly spoken words, make words more common, shorter or just for fun. :)
==== Emoticons ====
The Emoticons dictionary "[emoticonDict]" by default contains some emoticons. it can replace ":)" with "smile" or "XD" with "loool" Making chat more colorful.
A nice feature with this dictionary  is that you can toggle the substitution on or off during run time or in settings.conf. This is useful because while doing programming or other serious work you want to hear colons and perryns not smiles.
====== Configuration ======
You can configure Fenrir in the following places (ordered by priority):
  - Commandline Parameters ''-o'' see [[#Set settings coption|Set settings coption]]
  - /etc/fenrir/settings/settings.conf see [[#Settings|Settigns]]
  - <sourceTree>/config/settings/settings.conf see [[#Settings|Settigns]]
  - hard coded defaults
===== Commandline Arguments =====
==== Set settings option ====
You can specify options that overwrite the setting.conf.
This is done with ''-o <list of options>'' parameter.
The list of options have the following syntax
  fenrir -o "section#setting=value;section#setting=value"

For example changing the sound driver to gstreamer and disabling Braille  
  fenrir -o "sound#driver=gstreamerDriver;braille#enabled=False=False"
or change the debug level to verbose
  fenrir -o "general#debugLevel=3"
You can find the available sections and variables here [[#Settings]]
See Syntax [[#settings.conf syntax]]
==== settings.conf syntax ====
the syntax of the [[#Settings|settings.conf]] is quite simple and similar to a "*.ini" file, there are 4 different elements. 
  - Sections
  - Settings
  - Values
  - Comments

A comment starts with a # and is ignored by Fenrir.
  # this is a comment
To group settings we have sections.
A section can look like this:
  [Section]
A setting looks like this:
  settingName=Value

Example:
  [sound]
  # Turn sound on or off:
  enabled=True
  # Select the driver used to play sounds, choices are genericDriver and gstreamerDriver.
  # Sox is default.
  driver=genericDriver
    
===== Settings =====
==== Sound ====
The sound is configured in section ''[sound]''. 

Turn sound on or off:
  enabled=True
Values: on=''True'', off=''False''

Select the driver used to play sounds.
The genericDriver using Sox is the default.

  driver=genericDriver

Available Drivers:
  * ''genericDriver'' using the generic driver, for Fenrir <1.5 just use ''generic''
  * ''gstreamerDriver'' using the gstreamer, for Fenrir <1.5 just use ''gstreamer''

These are the pack of sounds used for sound icons.
  theme=default
By default we ship two sound packs.
  - ''default'' opus encoded, for newer Sox versions
  - ''default-wav'' wav encoded, just for compatibility
Sound packs are located at /usr/share/sounds/fenrirscreenreader/

Sound volume controls how loud the sounds for your selected sound pack are.
  volume=1.0
Values: ''0.0'' is quietest, ''1.0'' is loudest.

=== Generic Driver ===
The generic sound driver uses shell commands for play sound and frequencies.

''genericPlayFileCommand'' defines the command that is used to play a sound file.
  genericPlayFileCommand=<your command for playing a file>
''genericFrequencyCommand'' defines the command that is used playing frequencies.
  genericFrequencyCommand=<your command for playing a frequence>
 
The following variables are substituted in ''genericPlayFileCommand'' and ''genericFrequencyCommand'':
  * ''fenrirVolume'' = the current volume setting
  * ''fenrirSoundFile'' = the sound file for an sound icon
  * ''fenrirFrequence'' = the frequency to play
  * ''fenrirDuration'' = the duration of the frequency

Example genericPlayFileCommand (default)
  genericPlayFileCommand=play -q -v fenrirVolume fenrirSoundFile
Example genericFrequencyCommand (default)
  genericFrequencyCommand=play -q -v fenrirVolume -n -c1 synth fenrirDuration sine fenrirFrequence
==== Speech ====
Speech is configured in section ''[speech]''.
Turn speech on or off:
  enabled=True
Values: on=''True'', off=''False''

# Select speech driver, options are speechdDriver (default), genericDriver or espeakDriver:
driver=speechdDriver
#driver=espeakDriver
#driver=genericDriver

Select the driver used to generate speech output.

  driver=speechdDriver

Available Drivers:
  * ''genericDriver'' using the generic driver, for Fenrir <1.5 this is not available
  * ''speechdDriver'' using speech-dispatcher, for Fenrir <1.5 just use ''speechd''
  * ''espeakDriver'' using the espeak directly, for Fenrir <1.5 just use ''espeak''

The rate selects how fast Fenrir will speak. 
  rate=0.65
Values: Range Minimum:''0.0'' is slowest, Maximum:''1.0'' is fastest.

Pitch controls the pitch of the voice.
   pitch=0.5
Values: Range Minimum:''0.0'' is lowest, Maximum:''1.0'' is highest.

A Pitch for capital letters can be set.
  capitalPitch=0.9
Values: Range Minimum:''0.0'' is lowest, Maximum:''1.0'' is highest.

The Volume controls the loudness of the voice.
  volume=1.0
Values: Range Minimum:''0.0'' is quietest, Maximum:''1.0'' is loudest.

Some speech drivers like speechdDriver can support various modules. these can be set here.
  module=espeak
Values: Text, Consult speech-dispatcher's configuration to see what modules are available.

Voice selects the varient you want to use, for example, f5 will use the female voice #5 in Espeak,
or if using the Espeak module in Speech-dispatcher. To find out which voices are available, consult the documentation provided with your selected synthesizer.
  voice=
Values: Text, see your TTS synths documentation what is available.

Select the language you want Fenrir to use.
  language=english-us
Values: Text, see your TTS synths documentation what is available.

Read new text as it occurs
autoReadIncoming=True
Values: on=''True'', off=''False''

=== Generic Driver ===
The generic speech driver uses shell commands for speech synthisus.

''genericSpeechCommand'' defines the command that is executed for creating speech
The following variables are substituted in ''genericSpeechCommand'':
  * ''FenrirText'' = is the text that should be spoken
  * ''fenrirModule'' = may be the speech module like used in speech-dispatcher, not every TTY needs this
  * ''fenrirLanguage'' = the language to speak in
  * ''fenrirVoice'' = is the current voice that should be used
  * ''fenrirVolume'' = is replaced with the current volume
  * ''fenrirPitch'' = is replaced with the current pitch
  * ''fenrirRate'' = is replaced with the current speed (speech rate)

Example genericSpeechCommand (default):
  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. They are needed to calculate the abstract range in volume, rate and pitch 0.0 - 1.0.

  FenrirMinVolume=0
  fenrirMaxVolume=200
  fenrirMinPitch=0
  fenrirMaxPitch=99
  fenrirMinRate=80
  fenrirMaxRate=450

The current volume, pitch and rate is calculated like this
value = min + [volume,pitch,rate] * (min - max )
==== Braille ====
Braille is a WIP and not ready yet.
Braille support can be configured in section ''[braille]''.

Turn braille on or off:
  enabled=False
Values: on=''True'', off=''False''

Select the driver used for communication with a braille device.
  driver=brlapiDriver
Values: Text, available Driver
Available Drivers:
  * ''brlttyDriver'' using brltty for braille communication, for Fenrir <1.5 just use ''brltty''

The Braille layout can be configured here
  layout=en
Values: Text, see braille driver for layouts.

What should the flush timeout relate to 
  flushMode=word
Values: Text, an flushMode
Existing flushModes:
  * ''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)

Seconds to flush (see flushMode)
  flushTimeout=3
Values: Integer, in Seconds or ''-1'' = no automatic flush (manual via shortcut)
The total flush time calculates in relation to flushMode.

How should the Braille cursor focus be tracked?
  cursorFocusMode=page
Values: Text, an existing cursor focus mode
Available cursor focus modes:
  * ''page'' = if the cursor crosses the border move to next page and start at begin
  * ''fixCell'' = ajust the cursor on a special cell where it is always placed. the display scroll here more smooth.


Define the cell on the Braille device where Fenrir should scroll and keep the cursor
  fixCursorOnCell=-1
Values: Integer
  * ''0'' = first cell on device,
  * ''-1'' = last cell on device 
  * ''>0'' = fix cell number

What cursor should Fenrir show on the Braille device
  cursorFollowMode=review
Values: Text, an exsiting cursor following mode.
Existing cursor following mode:
  * ''none'' = no automatic toggle command used
  * ''review'' = priority to review
  * ''last'' = follow last used cursor

number of cells in panning (horizontal). How many cell should be panned on press the routing key?
  panSizeHorizontal=0
Values: Integer,
  * ''0'' = display size
  * ''>0'' number of cells
==== Screen ====
The settings for screens, (TTY, PTY) are configured in the ''[screen]'' section.

The driver to get the information from the screen:
  driver=vcsaDriver
Available Drivers:
  * ''vcsaDriver'' using the VCSA driver (for TTYs), for Fenrir <1.5 just use ''vcsa''
The encoding of the screen
  encoding=cp850
Values:''cp850'' is used for Western languages like USA or Europe.

The driver updates Fenrir with changes on the screen.
  screenUpdateDelay=0.05
Values: in Seconds

If you want Fenrir to not be active on any screen for various reasons. Maybe an X server or Wayland is running on that screen. You can make Fenrir ignore it or multiple screens seperated by '','' with:
  suspendingScreen=
Values: Depends on driver:
  * VCSA: the number of the TTY. TTY6 is ''6''.
Example ignore TTY1 and TTY2:
  suspendingScreen=1,2

There is also the ability to let Fenrir auto detect screens that are running an X server. So Screens running an GUI can be ignored.
  autodetectSuspendingScreen=True
Values: on=''True'', off=''False''

==== Keyboard ====
The settings for keyboard and input related configuration is located in the section ''[keyboard]'' of the ''settings.conf'' file.

Select the driver used for grabbing keybord input and for recieving shortcuts.
  driver=evdevDriver
Values: Text, available Driver
Available Drivers:
  * ''evdevDriver'' uses the evdev input system of linux, for Fenrir <1.5 just use ''evdev''
  
You can let Fenrir know about what input devices are to be used.
  device=ALL
Values: 
  * ''ALL'' use all devices with key capabilities.
  * ''NOMICE'' Exclude mices from handling.
  * ''<Device Name>'' just use the device with the given name.
  
Gives Fenrir exclusive access to the keyboard and lets it control keystrokes. This is needed to intercept Fenrir related shortcuts.
  grabDevices=True
Values: on=''True'', off=''False''

The following makes sense if you are using a second screenreader and want to have some hooked events. Fenrir ignores all shortcuts then. 
  ignoreShortcuts=False
Values: on=''True'', off=''False''

The current keyboard layout used for shortcuts.
  keyboardLayout=desktop
 Values: An absolute Path to a Keyboard definition file or a Filename without extension located in  ''/etc/fenrir/keyboard''
 
Announce characters while typing.
  charEcho=False
Values: on=''True'', off=''False''

Announce deleted characters
  charDeleteEcho=True
Values: on=''True'', off=''False''

Announce word after pressing space
  wordEcho=False
Values: on=''True'', off=''False''

Interrupt speech on any keypress
  interruptOnKeyPress=False
Values: on=''True'', off=''False''

You can filter the keys that speech should interrupt 
  interruptOnKeyPressFilter=
Values: (List) empty = all keys, otherwise interrupt with specified keys

The timeout that is used for double tap shortcuts
  doubleTapTimeout=0.2
Values: Seconds
==== General ====
Overall settings can be configured from the section ''[general]''.

Set the current debug level:
  debugLevel=1
Values: off=0, error=1, warning=2, info=3

the current punctuation and dict file in use:
  punctuationProfile=default
Values: Text, see available profiles in ''/etc/fenrir/punctuation'' or in ''sourceTree/config/punctuation''

The current punctuation level in use:
  punctuationLevel=some
Values: Text, See available levels in the used punctuation file.  

Respect pause for punctuations:
  respectPunctuationPause=True
Values: on=''True'', off=''False''

Add a pause on Line break:
  newLinePause=True
Values: on=''True'', off=''False''

Specify the path where the clipboard should be exported to.
See [[#export clipboard to file|export clipboard to file]].
The variable ''$user'' is replaced by the current logged username.
  clipboardExportPath=/tmp/fenrirClipboard
Values: Text, Systemfilepath

The number of available clipboards:
  numberOfClipboards=10
Values: Integer, 1 - 999

Replace emoticons like :) or ;) with text insertions:
  emoticons=True
Values: on=''True'', off=''False''  

Define the current Fenrir keys:
  fenrirKeys=KEY_KP0,KEY_META,KEY_INSERT
Values, Text list, separated by comma.

Define the current script keys: 
  scriptKey=KEY_COMPOSE
Values, Text list, separated by comma.

The time format to be used for (time command) output:
  timeFormat=%H:%M:%P
Values: see python specification for [[https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior|datetime.strftime]]

The date format to be used for (date command) output:
  dateFormat=%A, %B %d, %Y
Values: see python specification for [[https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior|datetime.strftime]]

Enable or Disable spellcheck whilst typing:
  autoSpellCheck=True
Values: on=''True'', off=''False''  

The use of the dictionary with spellcheck:
  spellCheckLanguage=en_US
Values: Text, see aspell dictionary's.

Folder Path for your scripts "scriptKey" functionality: 
  scriptPath=/usr/share/fenrirscreenreader/scripts
Values: Text, Existing path on file system.

Override commands or create new ones without changing the Fenrir defaults:
  commandPath=/usr/share/fenrirscreenreader/commands
Values: Text, Existing path on file system.
Subfolders in commandPath are:
  * ''commands'' = to create shortcut commands
  * ''onInput'' = executed while typing
  * ''onScreenChange'' = executed on change the screen (change from TTY4 to TTY6)
  * ''onScreenUpdate'' = executed when the screen is captured
  
==== Focus ====
The configuration for basic focus is in the section ''[focus]''.
Follow the text cursor:
  cursor=True
Values: on=''True'', off=''False''
  
Follow highlighted text changes (Highlight Tracking):
  highlight=False
Values: on=''True'', off=''False''
==== Review ====
Configurations for the review mode are in the section ''[review]''.

If "next word/ char" or "prev word/char" create a linebreak, announce it:
  lineBreak=True
Values: on=''True'', off=''False''

If "next word/ char" or "prev word/char" cannot be performed because you reached the end of the screen, announce it:
  endOfScreen=True
Values: on=''True'', off=''False''
  
Leave the review mode when pressing a key:
  leaveReviewOnKeypress=False
Values: on=''True'', off=''False''

Leave the review mode when changing the screen (From TTY3 to TTY4):
  leaveReviewOnScreenChange=True
Values: on=''True'', off=''False''
==== Promote ====
"Promoted Lists" are configured in the section ''[promote]''.
Turn Promoted Lists" on or off:
  enabled=True
Values: on=''True'', off=''False''

The minimum time interval of inactivity to activate promoting.
By default it promotes after 120 Seconds inactivity:
  inactiveTimeoutSec=120
Values: in Seconds  

Define a list of promoted words comma seperated:
  list=
Values: text (comma seperated)
Example to promote the word "nickname" or a bash prompt:
  list=nickname,$:,#:
  
==== Time ====
The automated time announcement is configured in the section ''[time]''.
Time announcement is disabled by default.
Turn time announcement on or off:
  enabled=True
Values: on=''True'', off=''False''

Should the time be announced:
  presentTime=True
Values: on=''True'', off=''False''

Should the date be announced (just on date change):
  presentDate=True
Values: on=''True'', off=''False''

Announce after a given period of seconds:
  delaySec=0
Value: in Seconds, 0 = Deactivated  

Announce after fixed minutes in an hour. if delaySec is >0 onMinutes is ignored:
  onMinutes=00,30
Example every 15 minutes: 
  onMinutes=00,15,30,45

Just play a soundicon, (not interrupting):
  announce=True
Values: on=''True'', off=''False''  

Interrupt current speech for time announcement:
  interrupt=False
Values: on=''True'', off=''False''
====== Customization ======
===== Scripting =====
Scripts can be in any language, bash, python, sh or others. Place your scripts in the directory /usr/share/fenrirscreenreader/scripts/ (the path is configurable in settings.conf).
The script key is the applications key. Usually this key can be found on the keyboard located just left of the right most control key.
When you name a script, the key name appears in the script seperated by the sequence __-__. So, for example, if you have a python weather script you want assigned to the script key plus the letter w you would name the script /usr/share/fenrirscreenreader/scripts/weather__-__key_w.py
Then, to access the script, simply press the script key and the letter w.
Scripts must be executable. So, make sure to chmod 755 your script when you place it in the scripts directory.
The script gets some parameters from fenrir when it is executed. So that information is available in your script then.

==== Parameterlist ====
^Parameter ^Content ^
|$1|Username of the current logged in user|

==== Examples ====
Script that just speaks the current username when pressing ScriptKey + H.\\
File: ''/usr/share/fenrirscreenreader/scripts/helloWorld__-__key_h.sh'':
  #!/bin/bash
  echo $1


===== Commands =====
You can place your own commands in "/usr/share/fenrirscreenreader/commands" (path is configurable in settings.conf).
Commands are python files with a special scheme. You can assign them to a shortcut using the filename without an extension or place them in a hook trigger like OnInput or OnScreenChange. For further information see developer guide.
Good Examples: [[https://github.com/chrys87/fenrir/blob/master/src/fenrir/commands/commands/date.py|"date.py"]] (announce the Date), [[https://github.com/chrys87/fenrir/blob/master/src/fenrir/commands/commands/shut_up.py|"shut_up.py"]] (interrupt output)
the basic scheme for a command is as follows:

  from core import debug
  
  class command():
      def __init__(self):
          pass
      def initialize(self, environment):
          self.env = environment
      def shutdown(self):
          pass
      def getDescription(self):
          return _('No description found')
      def run(self):
          pass
      def setCallback(self, callback):
          pass

  * [[https://github.com/chrys87/fenrir/blob/master/src/fenrir/commands/command_template.py|Template lives here]]
  * The class needs to have the name "command".
  * "initialize" is running once whilst loading the command.
  * "shutdown" is running on unload like the command (quit fenrir)
  * "getDescriptsion" just returns an string. That String is used in Tutorial Mode.
  * "run" is executed when the command is invoked. (shortcut is pressed, or trigger isn't running)
  * setCAllback is currently not used. and has no functionality yet.


====== Troubleshooting ======
===== Fenrir does not start =====
  - Have you installed all the dependencies [[#Support and Requirements|Support and Requirements]]
  - Try using master, a lot of changes take place there to make Fenrir compatible with more systems
===== Fenrir does not utilize the shortcuts =====
  - Make sure you have python3-evdev installed
  - Use the latest Fenrir version
  - Make sure that Fenrir has permission to /dev/input/* and /dev/uinput (or run it as root)
===== No sound at all =====
  - Run the script to configure Pulseaudio once as root and once as your user. This will setup Pulseaudio but require a restart of Pulseaudio. The script is located in ''tools/configure_pulse.sh''
  - Use ALSA
  - [[https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide/|Configure Pulse system wide]] (Not recommended)
  - Use gstreamerDriver: change ''settings.conf'' in the section ''sound'' the line ''driver=genericDriver'' to ''driver=gstreamerDriver''
  - Use wave sound-icons: change ''settings.conf'' in the section ''sound'' the line ''theme=default'' to ''theme=default-wav''
  - Use most current version of [[http://sox.sourceforge.net/|sox]] with opus support
  - Try [[https://github.com/i-rinat/apulse|apulse]] (not tested by myself but might work). Please give me feedback if you try it out.
===== You get sound-icons but no speech =====
  - If you are using speech-dispatcher run "spd-conf" once as user and as root.
  - You can test if speech-dispatcher works by invoking it as root\\  ''sudo spd-say "hello world"''
===== Bugreports and feature requests =====
Please report Bugs and feature requests to:
[[https://github.com/chrys87/fenrir/issues|https://github.com/chrys87/fenrir/issues]]

for bugs please provide a [[#Howto create a debug file|debug]] file that shows the issue.
==== How-to create a debug file ====
  - Delete old debug stuff\\  ''sudo rm /var/log/fenrir.log''
  - Start fenrir in debug mode\\ ''sudo fenrir -d''
  - Do your stuff to reproduce the problem
  - Stop fenrir (''fenrirKey + q'')
the debug file is located in ''/var/log/fenrir.log''

Please be as precise as possible to make it easy to solve the problem.