diff --git a/Changelog v1.0.txt b/Changelog v1.0.txt new file mode 100644 index 00000000..1a4a0f7e --- /dev/null +++ b/Changelog v1.0.txt @@ -0,0 +1,204 @@ +- 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 diff --git a/Maintainer b/Maintainer new file mode 100644 index 00000000..ebed8072 --- /dev/null +++ b/Maintainer @@ -0,0 +1,3 @@ +chrys (chrys87@web.de) +storm_dragon +Jeremiah diff --git a/TODO v2.0 b/TODO v2.0 new file mode 100644 index 00000000..bee4819b --- /dev/null +++ b/TODO v2.0 @@ -0,0 +1,60 @@ +ToDo list for Fenrir Version 2.0 + +General: +- implement onScreenUpdate commands + read highlighted text mode +- translateable +- be more event based +- try to make it more asynchronus +- multpible threads + +- implement commands + attributes_curr_char + generic list command (convert clipboard management) + next item + pref item + curr item + first item + last item + +Braille Support: + output to braille device + virtual buffer area for scroll left/right if the line is to long for device + commands for scroll left/right + print cursor in review + print cursor in textmode + flush message after X seconds and show current line (review over text) + make flush configurable + leve review mode on typing (show current textline) + capture input from braile + make routing keys assignable in keyboard + tweak current commands and output + 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 + +Driver: +- implement PTY Screen driver (to use gnome-terminal and other terminal emulators) +- ATK input driver (dont grab on graphical interface) +- BrlTTY driver + https://docs.python.org/3.2/library/pty.html +- implement speechdriver generic +- implement autodetection of plugged and removed input devices (python-pyudev) for evdev driver + http://askubuntu.com/questions/508236/how-can-i-run-code-whenever-a-usb-device-is-unplugged-without-requiring-root + +Settings: +- configuration should be overwriteable with parameter and alternative paths +- write settings +- menue for settings configuration #storm + +Application Profiles +- 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 diff --git a/known bugs.txt b/known bugs.txt new file mode 100644 index 00000000..ddce00f3 --- /dev/null +++ b/known bugs.txt @@ -0,0 +1,7 @@ +Known Bugs (Problems with the logic ): +- word echo triggers twice if there are two spaces after an word and you arrow over them +- spellcheck triggers twice if there are two spaces after an word and you arrow over them + +Glitches (improve diff results): +- For example, in screen, it just tells me bell in window, but doesn't tell me which one. (southernprince) +- alpine seems to have problems (southernprince)