diff --git a/google-docs.py b/google-docs.py new file mode 100644 index 0000000..9382f8f --- /dev/null +++ b/google-docs.py @@ -0,0 +1,380 @@ +from talon.voice import Context, Key, press +from talon import ctrl + +titles = ('- Google Docs', '- Google Sheets', '- Google Slides') +ctx = Context('google_docs', func=lambda app, win: win.title.endswith(titles)) +ctx.keymap({ + 'copy': Key('cmd+c'), + 'cut': Key('cmd+x'), + 'paste': Key('cmd+v'), + 'paste without formatting': Key('cmd+shift+v'), + 'undo': Key('cmd+z'), + 'redo': Key('cmd+shift+z'), + 'insert or edit link': Key('cmd+k'), + 'open link': Key('alt+enter'), + 'show common keyboard shortcuts': Key('cmd+/'), + 'save every change is automatically saved in drive': Key('cmd+s'), + 'print': Key('cmd+p'), + 'open': Key('cmd+o'), + 'find': Key('cmd+f'), + 'find and replace': Key('cmd+shift+h'), + 'find again': Key('cmd+g'), + 'find previous': Key('cmd+shift+g'), + 'hide the menus ': Key('ctrl+shift+f'), + 'insert page break': Key('cmd+enter'), + 'search the menus': Key('alt+/'), + 'bold': Key('cmd+b'), + 'italicize': Key('cmd+i'), + 'underline': Key('cmd+u'), + 'strikethrough': Key('cmd+shift+x'), + 'superscript': Key('cmd+.'), + 'subscript': Key('cmd+,'), + 'copy text formatting': Key('cmd+alt+c'), + 'paste text formatting': Key('cmd+alt+v'), + 'clear text formatting': Key('cmd+\\'), + 'increase font size': Key('cmd+shift+>'), + 'decrease font size': Key('cmd+shift+<'), + 'increase paragraph indentation': Key('cmd+]'), + 'decrease paragraph indentation': Key('cmd+['), + 'apply normal text style': Key('cmd+alt+o'), + 'apply heading style 1': Key('cmd+alt+1'), + 'apply heading style 2': Key('cmd+alt+2'), + 'apply heading style 3': Key('cmd+alt+3'), + 'apply heading style 4': Key('cmd+alt+4'), + 'apply heading style 5': Key('cmd+alt+5'), + 'apply heading style 6': Key('cmd+alt+6'), + 'left align': Key('cmd+shift+l'), + 'center align': Key('cmd+shift+e'), + 'right align': Key('cmd+shift+r'), + 'justify': Key('cmd+shift+j'), + 'numbered list': Key('cmd+shift+7'), + 'bulleted list': Key('cmd+shift+8'), + 'resize larger': Key('cmd+ctrl+k'), + 'resize larger horizontally': Key('cmd+ctrl+b'), + 'resize larger vertically': Key('cmd+ctrl+i'), + 'resize smaller': Key('cmd+ctrl+j'), + 'resize smaller horizontally': Key('cmd+ctrl+w'), + 'resize smaller vertically': Key('cmd+ctrl+q'), + 'rotate clockwise by 15 degree': Key('alt+right'), + 'rotate counterclockwise by 15 degree': Key('alt+left'), + 'rotate counterclockwise by 1 degree': Key('alt+shift+left'), + 'rotate clockwise by 1 degree': Key('alt+shift+right'), + 'close drawing editor': Key('cmd+esc'), + 'insert comment': Key('cmd+alt+m'), + 'open discussion thread': Key('cmd+alt+shift+a'), + 'enter current comment': Key('ctrl+enter'), + 'insert footnote': Key('cmd+alt+f'), + 'move to current footnote': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('e'), press('f'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to next footnote': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('f'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to previous footnote': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('f'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'context menu': Key('cmd+shift+\\'), + 'file menu': Key('ctrl+alt+f'), + 'edit menu': Key('ctrl+alt+e'), + 'view menu': Key('ctrl+alt+v'), + 'insert menu': Key('ctrl+alt+i'), + 'format menu': Key('ctrl+alt+o'), + 'tools menu': Key('ctrl+alt+t'), + 'table menu': Key('ctrl+alt+b'), + 'help menu': Key('ctrl+alt+h'), + 'accessibility menu': Key('ctrl+alt+a'), + 'input tools menu': Key('cmd+alt+shift+k'), + 'toggle input controls': Key('cmd+shift+k'), + 'select all': Key('cmd+a'), + 'extend selection one character left': Key('shift+left'), + 'extend selection one character right': Key('shift+right'), + 'extend selection one line up': Key('shift+up'), + 'extend selection one line down': Key('shift+down'), + 'extend selection to the beginning of the line': Key('shift+home'), + 'extend selection one paragraph up': Key('alt+shift+up'), + 'extend selection one paragraph down': Key('alt+shift+down'), + 'extend selection to the end of the line': Key('shift+end'), + 'extend selection to the beginning of the document': Key('cmd+shift+up'), + 'extend selection to the end of the document': Key('cmd+shift+down'), + 'select current list item': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('e'), press('i'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'select all list items at current level': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('e'), press('o'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'enable screen reader supportlearn more about using google docs with a screen reader': Key('alt+cmd+z'), + 'speak selection': Key('ctrl+cmd+x'), + 'speak from cursor location': Key('ctrl+cmd+r'), + 'announce cursor location': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('a'), press('l'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'announce formatting at cursor location': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('a'), press('f'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'speak the table column and row header': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('h'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'speak the table cell location': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('n'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'speak the table row header': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('r'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'speak the table column header': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('c'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'move to next heading': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('h'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to previous heading': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('h'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to next heading 1': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('1'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to next heading 2': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('2'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to next heading 3': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('3'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to next heading 4': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('4'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to next heading 5': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('5'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to next heading 6': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('6'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to previous heading 1': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('1'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to previous heading 2': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('2'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to previous heading 3': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('3'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to previous heading 4': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('4'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to previous heading 5': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('5'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to previous heading 6': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('6'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to next media': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('g'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to previous media': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('g'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to next list': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('o'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to previous list': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('o'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to next item in the current list': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('i'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to previous item in the current list': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('i'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to next link': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('l'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to previous link': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('l'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to next bookmark': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('b'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to previous bookmark': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('b'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to next formatting change': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('w'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to previous formatting change': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('w'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to the next edit': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('n'), press('r'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to the previous edit': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('p'), press('r'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move to the start of the table': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('s'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'move to the end of the table': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('d'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'move to the start of the table column': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('i'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'move to the end of the table column': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('k'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'move to the next table column': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('b'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'move to the previous table column': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('v'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'move to the start of the table row': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('j'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'move to the end of the table row': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('l'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'move to the next table row': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('m'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'move to the previous table row': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('g'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'exit table': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('t'), press('e'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'move to the next table': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('n'), press('t'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'move to the previous table': lambda m: ( + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, down=True), + press('p'), press('t'), + ctrl.key_press('shift', ctrl=True, cmd=True, shift=True, up=True), + ), + 'open revision history': Key('cmd+alt+shift+h'), + 'open explore tool': Key('cmd+alt+shift+i'), + 'open dictionary': Key('cmd+shift+y'), + 'word count': Key('cmd+shift+c'), + 'start voice typing': Key('cmd+shift+s'), + 'page up': Key('pageup'), + 'page down': Key('pagedown'), + 'move to next misspelling': Key('cmd+\''), + 'move to previous misspelling': Key('cmd+;'), + 'insert or move to header': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('o'), press('h'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'insert or move to footer': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('o'), press('f'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move focus to popup': lambda m: ( + ctrl.key_press('cmd', ctrl=True, cmd=True, down=True), + press('e'), press('p'), + ctrl.key_press('cmd', ctrl=True, cmd=True, up=True), + ), + 'move focus out of document text': Key('cmd+alt+shift+m'), + 'return focus to document text': Key('esc'), + 'focus containing webpage': Key('ctrl+shift+esc'), +}) \ No newline at end of file diff --git a/repeat.py b/repeat.py new file mode 100644 index 0000000..7cf8434 --- /dev/null +++ b/repeat.py @@ -0,0 +1,25 @@ +from talon.voice import Context, Rep, RepPhrase, talon +from user.utils import parse_words_as_integer + +ctx = Context('repeater') + +# TODO: This could be made more intelligent: +# * Apply a timeout after which the command will not repeat previous actions +# * Prevent stacking of repetitions upon previous repetitions +def repeat(m): + repeat_count = parse_words_as_integer(m._words[1:]) + + if repeat_count != None and repeat_count >= 2: + repeater = Rep(repeat_count - 1) + repeater.ctx = talon + return repeater(None) + +ctx.keymap({ + # 'wink': Rep(1), + 'creek': RepPhrase(1), + # 'soup': Rep(2), + # 'trace': Rep(3), + # 'quarr': Rep(4), + # 'fypes': Rep(5), + '(rep | repeat) (0 | oh | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)+': repeat, +}) \ No newline at end of file