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
  [] Detect progressbars and just present percent
     |===============            |100%
     [=================>          ] 100%
     ########################           100%
Imporove attribute handling
  [W] 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
  [X] detect colum/ lines
  [X] resize on colum / line change
  [X] make shell command configurable (or detect it)
  [X] stop emulation properly
  [W] attributes
  [W] unify hilgight tracking
  [X] 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/

[] 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
[] MacOS speech Driver
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] 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
[X] PTY Input driver
  [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)
[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' {} \;


