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 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 [] screenData.py [] settingsData -> defaultSettings.py General (Easy for contribution) [] wrapper script for running Fenrir to check if pypy3 exists, use python3 as fallback. [w] make fenrir runnable without root permissions [] make fenrir runable without settingsfile. fallback to defaults Get information already in watchdogs insteed of mainloop (use eventloop to transport) [W] ScreenDriver [W] split oldValues := newValues out to helper function [W] move processing of diff to own thread [W] move processing of encoding to own thread Imporove attribute handling [] improve attributes_curr_char (Easy for contribution) [] add an attribute sound (Easy for contribution) [] beep on cursor/ review by char (capital wins) (Easy for contribution) [] 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 Driver (screen, input): [W] PTY Screen driver (to use gnome-terminal and other terminal emulators) [X] emulation [X] basic reading [W] attributes [X] detect colum/ lines [X] resize on colum / line change [W] make shell command configurable (or detect it) [W] stop emulation properly [] make pasteing text work again 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/ [W] PTY Input driver [X] new event for byte shortcuts (escape sequences) [] create driver, set flag that it is used in emulation [W] handle byte shortcuts [W] detect shortcuts [] write/ consume them (controll it at all) [W] create keyboard layout [] ATK input driver (don't grab on graphical interface) https://git.linux-a11y.org/AIT/pyatspi2/src/master/examples/keypress.py Driver (speech): [] talkey driver [W] emacspeak driver https://pypi.python.org/pypi/ptyprocess#downloads [] Dectalk SpeechDriver (Easy for contribution, device needed - i dont own one) https://github.com/tvraman/emacspeak/blob/master/servers/obsolete/python/dectalk.py Settings: [] write settings (Easy for contribution) [] menue for settings configuration (Easy for contribution) 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---------------- 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] 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] 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 [X] (not conflict with other applications) find . -iname "*.py" -exec sed 's/from \(core.*\) import/from fenrir-screenreader.\1 import/g' {} \;