ToDos in Priority order: - Known Bugs gstreamer sounddriver doesnt work (i think it needs a Glib next word wrapping sometimes skips a word on beginn of line - 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 - implement commands attributes_curr_char toggle_highlighted_mode generic list command (convert clipboard management) next item pref item curr item first item last item - implement onScreenChange commands read highlighted text mode window mode (define a area and just read that changes) - 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 - implement autodetection of plugged and removed input devices (python-pyudev) http://askubuntu.com/questions/508236/how-can-i-run-code-whenever-a-usb-device-is-unplugged-without-requiring-root - implement braille httstormp://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 - configuration should be overwriteable with parameter and alternative paths - write settings - menue for settings configuration #storm - translateable - implement speechdriver generic - implement sounddriver generic (use current sox and make it configurable) -------------DONE-------------------------------- - 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 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') 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 - add setting for autodetect X ps a -o tty,comm | grep -e Xorg | grep -v "grep -e Xorg" - 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 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 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" - 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 - implement onScreenChange commands promoted text clear_marks_on_screen_change leve_review_mode_on_screen_change