From 3fccfd9723b6af2c174cd073b3a0324a85611f11 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sat, 18 Jul 2015 20:06:26 -0400 Subject: autoload/auditory.vim: Make dictionary of mappings Create a dictionary with all our mappings. We'll use this to activate them programmatically. I think it might also be interesting to provide this as a configurable variable within the plugin so that users can change the built-in mappings if they so choose. Note that this doesn't currently work because you can't have comments in dictionary literals in Vimscript. Thanks to Raimondi on #vim for confirming that for me after I played around with this. Also thanks to bairui/dahu for his suggestion for emulating comments in dict literals: https://gist.github.com/dahu/18b48c70444d8078f7d7 " Barry Arthur, July 2015 " Kludge emulating comments in dict literals " :-0 surprised?! function! StripComments(comment_leader, dict) return filter(a:dict, 'v:key !~ "^" . escape(a:comment_leader, "\"")') endfunction let x = StripComments('REM', { \ 'a' : 1 \, 'REM This is a nasty workaround mimicking comments in dict literals' :-0 \, 'b' : 2 \, 'REM Duplicate keys are not tolerated within dict literals, hence the numbered comment keys' :-0 \, 'c' : 3 \, 'REM For the younger audience members, REM stands for "remark" and was the comment leader in BASIC' :-0 \, 'd' : 4 \}) --- autoload/auditory.vim | 239 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 239 insertions(+) (limited to 'autoload') diff --git a/autoload/auditory.vim b/autoload/auditory.vim index 1c27485..b0e8210 100644 --- a/autoload/auditory.vim +++ b/autoload/auditory.vim @@ -205,6 +205,245 @@ endfunction " Normal mode " =========== +let s:mappings = { + \ 'h': { + \ 'audio': '/Resources/Normal_Mode/Left.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'h'", + \ }, + \ 'j': { + \ 'audio': '/Resources/Normal_Mode/Down.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'j'", + \ }, + \ 'k': { + \ 'audio': '/Resources/Normal_Mode/Up.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'k'", + \ }, + \ 'l': { + \ 'audio': '/Resources/Normal_Mode/Right.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'l'", + \ }, + \ + \ 'gj': { + \ 'audio': '/Resources/Normal_Mode/Down.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'gj'", + \ }, + \ 'gk': { + \ 'audio': '/Resources/Normal_Mode/Up.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'gk'", + \ }, + \ + \ '': { + \ 'audio': '/Resources/Normal_Mode/Right.wav', + \ 'map_to': "exec 'normal!' v:count1 . ''", + \ }, + \ + \ " FIXME: allow counts on the delete key + \ '': { + \ 'audio': '/Resources/Normal_Mode/Left.wav', + \ 'map_to': "", + \ }, + \ + \ '0': { + \ 'audio': '/Resources/Normal_Mode/Left.wav', + \ 'map_to': "0", + \ }, + \ '^': { + \ 'audio': '/Resources/Normal_Mode/Left.wav', + \ 'map_to': "exec 'normal!' v:count1 . '^'", + \ }, + \ '_': { + \ 'audio': '/Resources/Normal_Mode/Left.wav', + \ 'map_to': "exec 'normal!' v:count1 . '_'", + \ }, + \ '$': { + \ 'audio': '/Resources/Normal_Mode/Right.wav', + \ 'map_to': "exec 'normal!' v:count1 . '$'", + \ }, + \ 'g_': { + \ 'audio': '/Resources/Normal_Mode/Right.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'g_'", + \ }, + \ '%': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "%", + \ }, + \ + \ 'b': { + \ 'audio': '/Resources/Normal_Mode/Left.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'b'", + \ }, + \ 'w': { + \ 'audio': '/Resources/Normal_Mode/Right.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'w'", + \ }, + \ 'e': { + \ 'audio': '/Resources/Normal_Mode/Right.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'e'", + \ }, + \ 'B': { + \ 'audio': '/Resources/Normal_Mode/Left.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'B'", + \ }, + \ 'W': { + \ 'audio': '/Resources/Normal_Mode/Right.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'W'", + \ }, + \ 'E': { + \ 'audio': '/Resources/Normal_Mode/Right.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'E'", + \ }, + \ + \ 'p': { + \ 'audio': '/Resources/Normal_Mode/Paste.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'p'", + \ }, + \ 'P': { + \ 'audio': '/Resources/Normal_Mode/Paste.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'P'", + \ }, + \ + \ '/': { + \ 'audio': '/Resources/Normal_Mode/Search.wav', + \ 'map_to': "/", + \ }, + \ 'n': { + \ 'audio': '/Resources/Normal_Mode/Search.wav', + \ 'map_to': "n", + \ }, + \ 'N': { + \ 'audio': '/Resources/Normal_Mode/Search.wav', + \ 'map_to': "N", + \ }, + \ '#': { + \ 'audio': '/Resources/Normal_Mode/Search.wav', + \ 'map_to': "#", + \ }, + \ '*': { + \ 'audio': '/Resources/Normal_Mode/Search.wav', + \ 'map_to': "*", + \ }, + \ + \ 'zt': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "zt", + \ }, + \ 'z.': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "z.", + \ }, + \ 'zz': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "zz", + \ }, + \ 'zb': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "zb", + \ }, + \ + \ " FIXME: Allow these scrolling commands to support counts. Was getting errors constructing them the other way + \ '': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "", + \ }, + \ '': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "", + \ }, + \ '': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "", + \ }, + \ + \ " FIXME: need to press twice in order for it to work + \ '': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "", + \ }, + \ + \ 'H': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "H", + \ }, + \ 'M': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "M", + \ }, + \ 'L': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "L", + \ }, + \ + \ '(': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "exec 'normal!' v:count1 . '('", + \ }, + \ ')': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "exec 'normal!' v:count1 . ')'", + \ }, + \ '{': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "exec 'normal!' v:count1 . '{'", + \ }, + \ '}': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "exec 'normal!' v:count1 . '}'", + \ }, + \ + \ '': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "exec 'normal!' v:count1 . ''", + \ }, + \ '': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "exec 'normal!' v:count1 . ''", + \ }, + \ + \ 'gg': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'gg'", + \ }, + \ 'G': { + \ 'audio': '/Resources/Normal_Mode/Jump.wav', + \ 'map_to': "exec 'normal!' v:count . 'G'", + \ }, + \ + \ 'x': { + \ 'audio': '/Resources/Normal_Mode/Delete.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'x'", + \ }, + \ 'x': { + \ 'audio': '/Resources/Normal_Mode/Delete.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'x'", + \ }, + \ " nnoremap d :call auditory#Play('/Resources/Normal_Mode/Delete.wav') \| exec 'normal!' v:count1 . 'd' + \ " nnoremap d :set opfunc=d \| call auditory#Play('/Resources/Normal_Mode/Delete.wav') \| exec 'normal!' v:count1 . @g + \ + \ " inoremap :call auditory#Play('/Resources/auto_complete.wav')a + \ " inoremap :call auditory#Play('/Resources/auto_complete.wav')a + \ + \ 'u': { + \ 'audio': '/Resources/Normal_Mode/Undo.wav', + \ 'map_to': "exec 'normal!' v:count1 . 'u'", + \ }, + \ + \ " Note: redo doesn't currently support a count because the `v:count1` was giving me an error + \ '': { + \ 'audio': '/Resources/Normal_Mode/Redo.wav', + \ 'map_to': "", + \ }, +\ } + +function! auditory#AssignNormalModeMappings() + for [key, value] in items(s:mappings) + let l:pipe = '' + if match(value, 'exec') !=# -1 + let l:pipe = ' \| ' + endif + echom 'nmap ' . key . ' :call auditory#Play("' . value.audio . '")' . l:pipe . value.map_to + endfor +endfunction + function! auditory#NormalModeMappings() nnoremap h :call auditory#Play('/Resources/Normal_Mode/Left.wav') \| exec 'normal!' v:count1 . 'h' nnoremap j :call auditory#Play('/Resources/Normal_Mode/Down.wav') \| exec 'normal!' v:count1 . 'j' -- cgit v1.2.3