- 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 - implement sounddriver generic (use current sox and make it configurable) - add setting for autodetect X ps a -o tty,comm | grep -e Xorg | grep -v "grep -e Xorg" - respect window mode in differ (getwindow code is already in place) - parse punctuation setting file in conf/substitution - 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 define_window remove_window 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 add_bookmark (per application) remove_bookmark present_bookmark 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" next_char_phonetic prev_char_phonetic next_word_phonetic prev_word_phonetic toggle_highlighted_mode - 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 read highlighted - implement onScreenChange commands promoted text clear_marks_on_screen_change leve_review_mode_on_screen_change window mode (define a area and just read that changes) - add screenManager abstract screen driver - pass environment instance in init and remove it from function calls - New Triggers onAppChange onAppProfileChange onScreenChange rename current onScreenChange to onScreenUpdate - rework inputManager 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 - beep on cursor to capital letters in cursor and review - add pause handling create pause make it configurable when the pause the pause happens - external scripting load scripts from a folder as subprocess create thread load key definition of keybindings like SOPS did - add an daemonize mode https://github.com/thesharp/daemonize https://web.archive.org/web/20131017130434/http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/ - announce capslock - anounce numlock - anounce scroll - 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