Many fixes.

This commit is contained in:
Israel Chauca Fuentes
2010-05-06 01:34:18 -05:00
parent d478e75178
commit 29cb16c42e
2 changed files with 126 additions and 44 deletions

View File

@@ -42,7 +42,7 @@ function! delimitMate#ShouldJump() "{{{
endfunction "}}} endfunction "}}}
function! delimitMate#IsBlockVisual() " {{{ function! delimitMate#IsBlockVisual() " {{{
if visualmode() == "<C-V>" if mode() == "\<C-V>"
return 1 return 1
endif endif
" Store unnamed register values for later use in delimitMate#RestoreRegister(). " Store unnamed register values for later use in delimitMate#RestoreRegister().
@@ -193,14 +193,10 @@ function! delimitMate#JumpOut(char) "{{{
let line = getline('.') let line = getline('.')
let col = col('.')-2 let col = col('.')-2
if line[col+1] == a:char if line[col+1] == a:char
if len(b:delimitMate_buffer) == 0 return a:char . delimitMate#Del()
return "\<Right>"
else else
call setline('.',line[:(col)].line[(col+2):])
call delimitMate#RmBuffer(1)
return a:char return a:char
endif endif
endif
endfunction " }}} endfunction " }}}
function! delimitMate#JumpAny() " {{{ function! delimitMate#JumpAny() " {{{
@@ -230,11 +226,7 @@ function! delimitMate#SkipDelim(char) "{{{
elseif cur[1] == a:char elseif cur[1] == a:char
" Exit pair " Exit pair
"return delimitMate#WriteBefore(a:char) "return delimitMate#WriteBefore(a:char)
if delimitMate#Del() == '' return a:char . delimitMate#Del()
return "\<Right>"
else
return a:char
endif
"elseif cur[1] == ' ' && cur[2] == a:char "elseif cur[1] == ' ' && cur[2] == a:char
"" I'm leaving this in case someone likes it. Jump an space and delimiter. "" I'm leaving this in case someone likes it. Jump an space and delimiter.
"return "\<Right>\<Right>" "return "\<Right>\<Right>"
@@ -307,10 +299,13 @@ function! delimitMate#BS() " {{{
"call delimitMate#RmBuffer(1) "call delimitMate#RmBuffer(1)
return "\<BS>" . delimitMate#Del() return "\<BS>" . delimitMate#Del()
" return "\<Right>\<BS>\<BS>" " return "\<Right>\<BS>\<BS>"
elseif b:delimitMate_expand_cr && elseif b:delimitMate_expand_space &&
\ (delimitMate#IsCRExpansion() != 0 || delimitMate#IsSpaceExpansion()) \ delimitMate#IsSpaceExpansion()
"call delimitMate#RmBuffer(1) "call delimitMate#RmBuffer(1)
return "\<BS>" . delimitMate#Del return "\<BS>" . delimitMate#Del()
elseif b:delimitMate_expand_cr &&
\ delimitMate#IsCRExpansion()
return "\<BS>\<Del>"
else else
return "\<BS>" return "\<BS>"
endif endif
@@ -403,17 +398,17 @@ function! delimitMate#VisualMaps() " {{{
" Map left delimiter: " Map left delimiter:
let ld = b:delimitMate_left_delims[i] let ld = b:delimitMate_left_delims[i]
let rd = b:delimitMate_right_delims[i] let rd = b:delimitMate_right_delims[i]
exec 'vnoremap <buffer> <expr> ' . vleader . ld . ' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("' . VMapMsg . '") : "s' . ld . '\<C-R>\"' . rd . '\<Esc>:call delimitMate#RestoreRegister()<CR>"' exec 'vnoremap <buffer> <expr> ' . vleader . ld . ' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("' . VMapMsg . '") : mode() ==# "V" ? "s' . ld . '\<C-R>\"\<BS>' . rd . '\<Esc>:call delimitMate#RestoreRegister()\<CR>" : "s' . ld . '\<C-R>\"' . rd . '\<Esc>:call delimitMate#RestoreRegister()\<CR>"'
" Map right delimiter: " Map right delimiter:
exec 'vnoremap <buffer> <expr> ' . vleader . rd . ' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("' . VMapMsg . '") : "s' . ld . '\<C-R>\"' . rd . '\<Esc>:call delimitMate#RestoreRegister()<CR>"' exec 'vnoremap <buffer> <expr> ' . vleader . rd . ' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("' . VMapMsg . '") : mode() ==# "V" ? "s' . ld . '\<C-R>\"\<BS>' . rd . '\<Esc>:call delimitMate#RestoreRegister()<CR>" : "s' . ld . '\<C-R>\"' . rd . '\<Esc>:call delimitMate#RestoreRegister()<CR>"'
let i += 1 let i += 1
endwhile endwhile
" Wrap the selection with matching quotes, but do nothing if blockwise visual mode is active: " Wrap the selection with matching quotes, but do nothing if blockwise visual mode is active:
for quote in b:delimitMate_quotes_list for quote in b:delimitMate_quotes_list
" vnoremap <buffer> <expr> \' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("Message") : "s'\<C-R>\"'\<Esc>:call delimitMate#RestoreRegister()<CR>" " vnoremap <buffer> <expr> \' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("Message") : "s'\<C-R>\"'\<Esc>:call delimitMate#RestoreRegister()<CR>"
exec 'vnoremap <buffer> <expr> ' . vleader . quote . ' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("' . VMapMsg . '") : "s' . escape(quote,'"') .'\<C-R>\"' . escape(quote,'"') . '\<Esc>:call delimitMate#RestoreRegister()<CR>"' exec 'vnoremap <buffer> <expr> ' . vleader . quote . ' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("' . VMapMsg . '") : mode() ==# "V" ? "s' . escape(quote,'"') .'\<C-R>\"\<BS>' . escape(quote,'"') . '\<Esc>:call delimitMate#RestoreRegister()<CR>" : "s' . escape(quote,'"') .'\<C-R>\"' . escape(quote,'"') . '\<Esc>:call delimitMate#RestoreRegister()<CR>"'
endfor endfor
endfunction "}}} endfunction "}}}
@@ -554,6 +549,7 @@ function! delimitMate#Tests() " {{{
let text = text . "<cr>" . getline(i) let text = text . "<cr>" . getline(i)
let i += 1 let i += 1
endwhile endwhile
echom "text: " . text
if result == 0 if result == 0
exec "let b:test_results['" . substitute(a:name, "[^a-zA-Z0-9_]", "_", "g") . "'] = 'Passed: ' . text . ' == ' . join(a:output, '<cr>')" exec "let b:test_results['" . substitute(a:name, "[^a-zA-Z0-9_]", "_", "g") . "'] = 'Passed: ' . text . ' == ' . join(a:output, '<cr>')"
else else
@@ -590,7 +586,6 @@ function! delimitMate#Tests() " {{{
call Type("Test 1", "123", ["123|"], []) call Type("Test 1", "123", ["123|"], [])
call RepeatLast("Test 1", ["123|123|"]) call RepeatLast("Test 1", ["123|123|"])
" Auto-closing parens " Auto-closing parens
call Type("Autoclose parens", "(", ["(|)"], []) call Type("Autoclose parens", "(", ["(|)"], [])
call RepeatLast("Autoclose_parens", ["(|)(|)"]) call RepeatLast("Autoclose_parens", ["(|)(|)"])
@@ -630,24 +625,100 @@ function! delimitMate#Tests() " {{{
" Close quote " Close quote
call Type("Close quote", "'\<Del>\<Esc>a'", ["'|'"], []) call Type("Close quote", "'\<Del>\<Esc>a'", ["'|'"], [])
" Closing paren
call Type("Closing paren", "abcd)", ["abcd)|"], [])
" <S-Tab> " <S-Tab>
call Type("S Tab", "(\<S-Tab>", ["()|"], []) call Type("S Tab", "(\<S-Tab>", ["()|"], [])
call RepeatLast("S Tab", ["()|()|"]) call RepeatLast("S Tab", ["()|()|"])
" Space expansion " Space expansion
call Type("Space expansion", "(\<Space>)", ['( | )'], ['expand_space:1']) call Type("Space expansion", "(\<Space>", ['( | )'], ['expand_space:1'])
call RepeatLast("Space expansion", ['( | )( | )']) call RepeatLast("Space expansion", ['( | )( | )'])
" Car return expansion " Car return expansion
call Type("CR expansion", "(\<CR>", ['(', '|', ')'], ['expand_cr:1']) call Type("CR expansion", "(\<CR>", ['(', '|', ')'], ['expand_cr:1'])
call RepeatLast("CR expansion", ['(', '|', ')(', '|', ')']) call RepeatLast("CR expansion", ['(', '|', ')(', '|', ')'])
" Show results: " Visual wrapping
call Type("Visual wrapping left paren", "1234\<Esc>v,(", ['123(4)'], ['visual_leader:","'])
cal RepeatLast("Visual wrapping left paren", ['(1)23(4)'])
" Visual line wrapping
call Type("Visual line wrapping left paren", "1234\<Esc>V,(", ['(1234)'], ['visual_leader:","'])
cal RepeatLast("Visual line wrapping left paren", ['((1234))'])
" Visual wrapping
call Type("Visual wrapping right paren", "1234\<Esc>v,)", ['123(4)'], ['visual_leader:","'])
cal RepeatLast("Visual wrapping right paren", ['(1)23(4)'])
" Visual line wrapping
call Type("Visual line wrapping right paren", "1234\<Esc>V,)", ['(1234)'], ['visual_leader:","'])
cal RepeatLast("Visual line wrapping right paren", ['((1234))'])
" Visual wrapping
call Type("Visual wrapping quote", "1234\<Esc>v,\"", ['123"4"'], ['visual_leader:","'])
cal RepeatLast("Visual wrapping quote", ['"1"23"4"'])
" Visual line wrapping
call Type("Visual line wrapping quote", "1234\<Esc>V,\"", ['"1234"'], ['visual_leader:","'])
cal RepeatLast("Visual line wrapping quote", ['""1234""'])
" Visual line wrapping empty line
call Type("Visual line wrapping paren empty line", "\<Esc>V,(", ['()'], ['visual_leader:","'])
" Visual line wrapping empty line
call Type("Visual line wrapping quote empty line", "\<Esc>V,\"", ['""'], ['visual_leader:","'])
" Smart quotes
call Type("Smart quote alphanumeric", "alpha\"numeric", ['alpha"numeric|'], [])
call RepeatLast("Smart quote alphanumeric", ['alpha"numeric|alpha"numeric|'])
" Smart quotes
call Type("Smart quote escaped", "esc\\\"", ['esc\"|'], [])
call RepeatLast("Smart quote escaped", ['esc\"|esc\"|'])
" Smart quotes
call Type("Smart quote apostrophe", "I'm", ["I'm|"], ['smart_quotes:0'])
call RepeatLast("Smart quote escaped", ["I'm|I'm|"])
" Backspace inside space expansion
call Type("Backspace inside space expansion", "(\<Space>\<BS>", ['(|)'], ['expand_space:1'])
call RepeatLast("Backspace inside space expansion", ['(|)(|)'])
" Backspace inside CR expansion
call Type("Backspace inside CR expansion", "(\<CR>\<BS>", ['(|)'], ['expand_cr:1'])
call RepeatLast("Backspace inside CR expansion", ['(|)(|)'])
" FileType event
let g:delimitMate_excluded_ft = "vim"
set ft=vim
call Type("FileType Autoclose parens", "(", ["(|"], [])
unlet g:delimitMate_excluded_ft
set ft=
" Show results: {{{
normal ggVG"_d normal ggVG"_d
call append(0, split(string(b:test_results)[1:-2], ', ')) call append(0, split(string(b:test_results)[1:-2], ', '))
normal "_ddgg normal "_ddgg
nmap <F1> :q!<CR> nmap <F1> :q!<CR>
let @/ = "Failed:.*!=" let @/ = ".\\+Failed:.*!="
set nohlsearch
"syntax match failedLine "^.*Failed.*$" contains=ALL
"syn match passedLine ".*Passed.*"
syn match labelPassed "'\@<=.\+\(': 'Passed\)\@="
syn match labelFailed "'\@<=.\+\(': 'Failed\)\@="
syn match resultPassed "\('Passed: \)\@<=.\+\('$\)\@="
syn match resultFailed "\('Failed: \)\@<=.\+\('$\)\@=" contains=resultInequal
syn match resultInequal "!="
hi def link labelPassed Comment
hi def link labelFailed Special
hi def link resultPassed Ignore
hi def link resultFailed Boolean
hi def link resultInequal Error
" }}}
endfunction " }}} endfunction " }}}
"}}} "}}}

View File

@@ -148,7 +148,7 @@ endfunction "}}} Init()
function! s:UnMap() " {{{ function! s:UnMap() " {{{
" No Autoclose Mappings: " No Autoclose Mappings:
for char in b:delimitMate_right_delims + b:delimitMate_quotes_list for char in b:delimitMate_right_delims + b:delimitMate_quotes_list
if maparg(char,"i") =~? 'SkipDelim' if maparg(char,"i") =~? 'delimitMate'
exec 'silent! iunmap <buffer> ' . char exec 'silent! iunmap <buffer> ' . char
"echomsg 'iunmap <buffer> ' . char "echomsg 'iunmap <buffer> ' . char
endif endif
@@ -158,57 +158,71 @@ function! s:UnMap() " {{{
let i = 0 let i = 0
let l = len(b:delimitMate_matchpairs_list) let l = len(b:delimitMate_matchpairs_list)
while i < l while i < l
if maparg(b:delimitMate_left_delims[i],"i") =~? 'JumpIn' if maparg(b:delimitMate_left_delims[i],"i") =~? 'delimitMate'
exec 'silent! iunmap <buffer> ' . b:delimitMate_left_delims[i] exec 'silent! iunmap <buffer> ' . b:delimitMate_left_delims[i]
"echomsg 'iunmap <buffer> ' . b:delimitMate_left_delims[i] "echomsg 'iunmap <buffer> ' . b:delimitMate_left_delims[i]
endif endif
let i += 1 let i += 1
endwhile endwhile
for char in b:delimitMate_quotes_list for char in b:delimitMate_quotes_list
if maparg(char, "i") =~? 'QuoteDelim' if maparg(char, "i") =~? 'delimitMate'
exec 'silent! iunmap <buffer> ' . char exec 'silent! iunmap <buffer> ' . char
"echomsg 'iunmap <buffer> ' . char "echomsg 'iunmap <buffer> ' . char
endif endif
endfor endfor
for char in b:delimitMate_right_delims for char in b:delimitMate_right_delims
if maparg(char, "i") =~? 'JumpOut' if maparg(char, "i") =~? 'delimitMate'
exec 'silent! iunmap <buffer> ' . char exec 'silent! iunmap <buffer> ' . char
"echomsg 'iunmap <buffer> ' . char "echomsg 'iunmap <buffer> ' . char
endif endif
endfor endfor
for map in b:delimitMate_apostrophes_list for char in b:delimitMate_apostrophes_list
exec "silent! iunmap <buffer> " . map if maparg(char, "i") =~? 'delimitMate'
endfor exec "silent! iunmap <buffer> " . char
" Visual Mappings:
for char in b:delimitMate_right_delims + b:delimitMate_left_delims + b:delimitMate_quotes_list
if maparg(b:delimitMate_visual_leader . char,"v") =~? 'IsBlock'
exec 'silent! vunmap <buffer> ' . b:delimitMate_visual_leader . char
"echomsg 'vunmap <buffer> ' . b:delimitMate_visual_leader . char
endif endif
endfor endfor
" Expansion Mappings: " Expansion Mappings:
if maparg('<BS>', "i") =~? 'WithinEmptyPair' if maparg('<BS>', "i") =~? 'delimitMate'
silent! iunmap <buffer> <BS> silent! iunmap <buffer> <BS>
"echomsg "silent! iunmap <buffer> <BS>" "echomsg "silent! iunmap <buffer> <BS>"
endif endif
if maparg('<S-BS>', "i") =~? 'WithinEmptyPair' if maparg('<S-BS>', "i") =~? 'delimitMate'
silent! iunmap <buffer> <BS> silent! iunmap <buffer> <BS>
"echomsg "silent! iunmap <buffer> <BS>" "echomsg "silent! iunmap <buffer> <BS>"
endif endif
if maparg('<CR>',"i") =~? 'DelimitMate_ExpandReturn' if maparg('<CR>',"i") =~? 'delimitMate'
silent! iunmap <buffer> <CR> silent! iunmap <buffer> <CR>
"echomsg "silent! iunmap <buffer> <CR>" "echomsg "silent! iunmap <buffer> <CR>"
endif endif
if maparg('<Space>',"i") =~? 'DelimitMate_ExpandSpace' if maparg('<Space>',"i") =~? 'delimitMate'
silent! iunmap <buffer> <Space> silent! iunmap <buffer> <Space>
"echomsg "silent! iunmap <buffer> <Space>" "echomsg "silent! iunmap <buffer> <Space>"
endif endif
if maparg('<S-Tab>', "i") =~? 'ShouldJump' if maparg('<S-Tab>', "i") =~? 'delimitMate'
silent! iunmap <buffer> <S-Tab> silent! iunmap <buffer> <S-Tab>
"echomsg "silent! iunmap <buffer> <S-Tab>" "echomsg "silent! iunmap <buffer> <S-Tab>"
endif endif
if maparg('<Esc>', "i") =~? 'delimitMate'
silent! iunmap <buffer> <Esc>
"echomsg "silent! iunmap <buffer> <S-Tab>"
endif
" Visual Mappings:
if !exists("b:delimitMate_visual_leader")
let vleader = ""
else
let vleader = b:delimitMate_visual_leader
endif
for char in b:delimitMate_right_delims + b:delimitMate_left_delims + b:delimitMate_quotes_list
"echom "maparg(" . vleader . char .", \"v\")"
exec 'let result = maparg("' . escape(vleader . char, '"') . '", "v") =~? "delimitMate" ? 1 : 0'
if result == 1
exec 'silent! vunmap <buffer> ' . vleader . char
"echomsg 'vunmap <buffer> ' . b:delimitMate_visual_leader . char
endif
endfor
endfunction " }}} s:ExtraMappings() endfunction " }}} s:ExtraMappings()
function! s:TestMappingsDo() "{{{ function! s:TestMappingsDo() "{{{
@@ -243,9 +257,6 @@ function! s:DelimitMateDo() "{{{
" Check if this file type is excluded: " Check if this file type is excluded:
for ft in split(g:delimitMate_excluded_ft,',') for ft in split(g:delimitMate_excluded_ft,',')
if ft ==? &filetype if ft ==? &filetype
if !exists("b:delimitMate_quotes_list")
return 1
endif
"echomsg "excluded" "echomsg "excluded"
call s:UnMap() call s:UnMap()
return 1 return 1