ToDos in Priority order: - try to consume shortcuts grab keyboard exclusive [x] release keyboard on error or quit [-] grab shortcuts with fenrir key [x] grab "singel key shortcuts" like numpad navigation for review [] forwart nonshortcuts to system [x] make grabbing configuarble [-] possiblity to forewart shortcut [proxyshortcut] [x] possiblity to forewart shortcut [pressing twice while timeout] [] cleanup inputManager [-] - Known Bugs fix line wrapping bug (multible lines and make a linebreak in the middle of a line) handle ncurses "optimisations.." sometimes the screen is spoken from the beginning without need to - implement commands attributes_curr_char toggle_highlighted_mode 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 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 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 - dictonary for special chars and string replacements - implement speechdriver generic (say) -------------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/ - 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 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 - 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