diff --git a/autoload/tablemode.vim b/autoload/tablemode.vim index d5d2b84..73e0789 100644 --- a/autoload/tablemode.vim +++ b/autoload/tablemode.vim @@ -32,90 +32,56 @@ function! s:SetBufferOptDefault(opt, val) "{{{2 endif endfunction +function! s:Map(map, to, mode) + if !hasmapto(a:map, a:mode) + for l:mode in split(a:mode, '.\zs') + execute l:mode . 'map ' a:to a:map + endfor + endif +endfunction + +function! s:UnMap(map, mode) + if !empty(maparg(a:map, a:mode)) + for mode in split(a:mode, '.\zs') + execute l:mode . 'unmap ' a:map + endfor + endif +endfunction + function! s:ToggleMapping() "{{{2 let separator_map = g:table_mode_separator " '|' is a special character, we need to map instead if g:table_mode_separator ==# '|' | let separator_map = '' | endif if tablemode#IsActive() - execute 'inoremap ' separator_map - \ separator_map . ':call tablemode#TableizeInsertMode()a' + call s:Map('(table-mode-tableize)', separator_map, 'i') + call s:Map('(table-mode-motion-up)', '{', 'n') + call s:Map('(table-mode-motion-down)', '}', 'n') + call s:Map('(table-mode-motion-left)', '[', 'n') + call s:Map('(table-mode-motion-right)', ']', 'n') - if !hasmapto('(table-mode-motion-up)', 'n') - nmap { (table-mode-motion-up) - endif - if !hasmapto('(table-mode-motion-down)', 'n') - nmap } (table-mode-motion-down) - endif - if !hasmapto('(table-mode-motion-left)', 'n') - nmap [ (table-mode-motion-left) - endif - if !hasmapto('(table-mode-motion-right)', 'n') - nmap ] (table-mode-motion-right) - endif - if !hasmapto('(table-mode-cell-text-object-a)', 'o') - omap a (table-mode-cell-text-object-a) - xmap a (table-mode-cell-text-object-a) - endif - if !hasmapto('(table-mode-cell-text-object-i)', 'o') - omap i (table-mode-cell-text-object-i) - xmap i (table-mode-cell-text-object-i) - endif - if !hasmapto('(table-mode-realign)', 'n') - nmap tr (table-mode-realign) - endif - if !hasmapto('(table-mode-delete-row)', 'n') - nmap tdd (table-mode-delete-row) - endif - if !hasmapto('(table-mode-delete-column)', 'n') - nmap tdc (table-mode-delete-column) - endif - if !hasmapto('(table-mode-add-formula)', 'n') - nmap tfa (table-mode-add-formula) - endif - if !hasmapto('(table-mode-eval-formula)', 'n') - nmap tfe (table-mode-eval-formula) - endif - if !hasmapto('(table-mode-echo-cell)', 'n') - nmap t? (table-mode-echo-cell) - endif + call s:Map('(table-mode-cell-text-object-a)', 'a', 'ox') + call s:Map('(table-mode-cell-text-object-i)', 'i', 'ox') + + call s:Map('(table-mode-realign)', 'tr', 'n') + call s:Map('(table-mode-delete-row)', 'tdd', 'n') + call s:Map('(table-mode-delete-column)', 'tdc', 'n') + call s:Map('(table-mode-add-formula)', 'tfa', 'n') + call s:Map('(table-mode-eval-formula)', 'tfe', 'n') + call s:Map('(table-mode-echo-cell)', 't?', 'n') else - if !empty(maparg(separator_map, 'i')) - execute "iunmap " . separator_map - endif - if !empty(maparg('{', 'n')) - nunmap { - endif - if !empty(maparg('}', 'n')) - nunmap } - endif - if !empty(maparg('[', 'n')) - nunmap [ - endif - if !empty(maparg(']', 'n')) - nunmap ] - endif - if !empty(maparg('a', 'o')) - ounmap a - endif - if !empty(maparg('i', 'o')) - ounmap i - endif - if !empty(maparg('tdd', 'n')) - nunmap tdd - endif - if !empty(maparg('tdc', 'n')) - nunmap tdc - endif - if !empty(maparg('tfa', 'n')) - nunmap tfa - endif - if !empty(maparg('tfe', 'n')) - nunmap tfe - endif - if !empty(maparg('t?', 'n')) - nunmap t? - endif + call s:UnMap(separator_map, 'i') + call s:UnMap('{', 'n') + call s:UnMap('}', 'n') + call s:UnMap('[', 'n') + call s:UnMap(']', 'n') + call s:UnMap('a', 'o') + call s:UnMap('i', 'o') + call s:UnMap('tdd', 'n') + call s:UnMap('tdc', 'n') + call s:UnMap('tfa', 'n') + call s:UnMap('tfe', 'n') + call s:UnMap('t?', 'n') endif endfunction diff --git a/plugin/table-mode.vim b/plugin/table-mode.vim index abeaa66..5c3731a 100644 --- a/plugin/table-mode.vim +++ b/plugin/table-mode.vim @@ -92,6 +92,10 @@ command! TableAddFormula call tablemode#spreadsheet#formula#Add() command! TableModeRealign call tablemode#table#Realign('.') command! TableEvalFormulaLine call tablemode#spreadsheet#formula#EvaluateFormulaLine() +" '|' is a special character, we need to map instead +if g:table_mode_separator ==# '|' | let separator_map = '' | endif +execute 'inoremap (table-mode-tableize)' separator_map . ':call tablemode#TableizeInsertMode()a' + nnoremap (table-mode-tableize) :Tableize xnoremap (table-mode-tableize) :Tableize xnoremap (table-mode-tableize-delimiter) :call tablemode#TableizeByDelimiter()