Use internal b:vars to read from user options.

This commit is contained in:
Israel Chauca Fuentes
2010-06-12 22:15:26 -05:00
parent efcf9eb341
commit e0de2dbf39

View File

@@ -7,128 +7,88 @@
" Manual: Read ":help delimitMate". " Manual: Read ":help delimitMate".
" Utilities {{{ " Utilities {{{
function! delimitMate#option_init(name, default) "{{{
let b = exists("b:delimitMate_" . a:name)
let g = exists("g:delimitMate_" . a:name)
let prefix = "delimitMate_l_"
if type(a:default) == type("")
let default = '"'.escape(a:default, '"').'"'
else
let default = a:default
endif
if !b && !g
let sufix = default
elseif !b && g
let sufix = "g:delimitMate_" . a:name
else
let sufix = "b:delimitMate_" . a:name
endif
if exists("b:" . prefix . a:name)
exec "unlockvar! b:" . prefix . a:name
endif
exec "let b:" . prefix . a:name . " = " . sufix
exec "lockvar! b:" . prefix . a:name
endfunction "}}}
function! delimitMate#Init() "{{{ function! delimitMate#Init() "{{{
" Initialize variables: " Initialize variables: {{{
" delimitMate_autoclose {{{ " autoclose
if !exists("b:delimitMate_autoclose") && !exists("g:delimitMate_autoclose") call delimitMate#option_init("autoclose", 1)
let b:delimitMate_autoclose = 1
elseif !exists("b:delimitMate_autoclose") && exists("g:delimitMate_autoclose")
let b:delimitMate_autoclose = g:delimitMate_autoclose
else
" Nothing to do.
endif " }}}
" delimitMate_matchpairs {{{ " matchpairs
if !exists("b:delimitMate_matchpairs") && !exists("g:delimitMate_matchpairs") call delimitMate#option_init("matchpairs", string(&matchpairs)[1:-2])
let s:matchpairs_temp = &matchpairs let b:delimitMate_matchpairs_list = split(b:delimitMate_l_matchpairs, ',')
elseif exists("b:delimitMate_matchpairs") let b:delimitMate_left_delims = split(b:delimitMate_l_matchpairs, ':.,\=')
let s:matchpairs_temp = b:delimitMate_matchpairs let b:delimitMate_right_delims = split(b:delimitMate_l_matchpairs, ',\=.:')
else
let s:matchpairs_temp = g:delimitMate_matchpairs
endif " }}}
" delimitMate_quotes {{{ " quotes
if exists("b:delimitMate_quotes") call delimitMate#option_init("quotes", "\" ' `")
let s:quotes = split(b:delimitMate_quotes) let b:delimitMate_quotes_list = split(b:delimitMate_l_quotes)
elseif exists("g:delimitMate_quotes")
let s:quotes = split(g:delimitMate_quotes)
else
let s:quotes = split("\" ' `")
endif
let b:delimitMate_quotes_list = s:quotes " }}}
" delimitMate_excluded_regions {{{ " excluded_regions
if exists("b:delimitMate_excluded_regions") call delimitMate#option_init("excluded_regions", "Comment")
let s:excluded_regions = b:delimitMate_excluded_regions let b:delimitMate_excluded_regions_list = split(b:delimitMate_l_excluded_regions, ',\s*')
elseif exists("g:delimitMate_excluded_regions") let b:delimitMate_excluded_regions_enabled = len(b:delimitMate_excluded_regions_list) > 0
let s:excluded_regions = g:delimitMate_excluded_regions
else
let s:excluded_regions = "Comment"
endif
let b:delimitMate_excluded_regions_list = split(s:excluded_regions, ',\s*')
let b:delimitMate_excluded_regions_enabled = len(b:delimitMate_excluded_regions_list) " }}}
" delimitMate_visual_leader {{{ " visual_leader
if !exists("b:delimitMate_visual_leader") && !exists("g:delimitMate_visual_leader") call delimitMate#option_init("visual_leader", exists('b:maplocalleader') ? b:maplocalleader :
let b:delimitMate_visual_leader = exists('b:maplocalleader') ? b:maplocalleader : \ exists('g:mapleader') ? g:mapleader : "\\")
\ exists('g:mapleader') ? g:mapleader : "\\"
elseif !exists("b:delimitMate_visual_leader") && exists("g:delimitMate_visual_leader")
let b:delimitMate_visual_leader = g:delimitMate_visual_leader
else
" Nothing to do.
endif " }}}
" delimitMate_expand_space {{{ " expand_space
if !exists("b:delimitMate_expand_space") && !exists("g:delimitMate_expand_space") call delimitMate#option_init("expand_space", 0)
let b:delimitMate_expand_space = 0
elseif !exists("b:delimitMate_expand_space") && exists("g:delimitMate_expand_space")
let b:delimitMate_expand_space = g:delimitMate_expand_space
else
" Nothing to do.
endif " }}}
" delimitMate_expand_cr {{{ " expand_cr
if !exists("b:delimitMate_expand_cr") && !exists("g:delimitMate_expand_cr") call delimitMate#option_init("expand_cr", 0)
let b:delimitMate_expand_cr = 0
elseif !exists("b:delimitMate_expand_cr") && exists("g:delimitMate_expand_cr")
let b:delimitMate_expand_cr = g:delimitMate_expand_cr
else
" Nothing to do.
endif " }}}
" delimitMate_smart_quotes {{{ " smart_quotes
if !exists("b:delimitMate_smart_quotes") && !exists("g:delimitMate_smart_quotes") call delimitMate#option_init("smart_quotes", 1)
let b:delimitMate_smart_quotes = 1
elseif !exists("b:delimitMate_smart_quotes") && exists("g:delimitMate_smart_quotes")
let b:delimitMate_smart_quotes = split(g:delimitMate_smart_quotes)
else
" Nothing to do.
endif " }}}
" delimitMate_apostrophes {{{ " apostrophes
if !exists("b:delimitMate_apostrophes") && !exists("g:delimitMate_apostrophes") call delimitMate#option_init("apostrophes", "")
"let s:apostrophes = split("n't:'s:'re:'m:'d:'ll:'ve:s'",':') let b:delimitMate_apostrophes_list = split(b:delimitMate_l_apostrophes, ":\s*")
let s:apostrophes = []
elseif !exists("b:delimitMate_apostrophes") && exists("g:delimitMate_apostrophes")
let s:apostrophes = split(g:delimitMate_apostrophes)
else
let s:apostrophes = split(b:delimitMate_apostrophes)
endif
let b:delimitMate_apostrophes_list = s:apostrophes " }}}
" delimitMate_tab2exit {{{ " tab2exit
if !exists("b:delimitMate_tab2exit") && !exists("g:delimitMate_tab2exit") call delimitMate#option_init("tab2exit", 1)
let b:delimitMate_tab2exit = 1
elseif !exists("b:delimitMate_tab2exit") && exists("g:delimitMate_tab2exit")
let b:delimitMate_tab2exit = g:delimitMate_tab2exit
else
" Nothing to do.
endif " }}}
" delimitMate_unbalanced_parens {{{ " unbalanced_parens
if !exists("b:delimitMate_unbalanced_parens") && !exists("g:delimitMate_unbalanced_parens") call delimitMate#option_init("unbalanced_parens", 0)
let b:delimitMate_unbalanced_parens = 0
elseif !exists("b:delimitMate_unbalanced_parens") && exists("g:delimitMate_unbalanced_parens")
let b:delimitMate_unbalanced_parens = g:delimitMate_unbalanced_parens
else
" Nothing to do.
endif " }}}
let b:delimitMate_matchpairs_list = split(s:matchpairs_temp, ',')
let b:delimitMate_left_delims = split(s:matchpairs_temp, ':.,\=')
let b:delimitMate_right_delims = split(s:matchpairs_temp, ',\=.:')
let b:delimitMate_buffer = [] let b:delimitMate_buffer = []
" Set mappings: " }}}
" Set mappings: {{{
call delimitMate#UnMap() call delimitMate#UnMap()
try try
let save_cpo = &cpo let save_cpo = &cpo
let save_keymap = &keymap let save_keymap = &keymap
set keymap= set keymap=
set cpo&vim set cpo&vim
if b:delimitMate_autoclose if b:delimitMate_l_autoclose
call delimitMate#AutoClose() call delimitMate#AutoClose()
else else
call delimitMate#NoAutoClose() call delimitMate#NoAutoClose()
@@ -142,6 +102,8 @@ function! delimitMate#Init() "{{{
let b:loaded_delimitMate = 1 let b:loaded_delimitMate = 1
let b:delimitMate_enabled = 1 let b:delimitMate_enabled = 1
" }}}
endfunction "}}} Init() endfunction "}}} Init()
function! delimitMate#ShouldJump() "{{{ function! delimitMate#ShouldJump() "{{{
@@ -158,7 +120,7 @@ function! delimitMate#ShouldJump() "{{{
endfor endfor
let nchar = getline('.')[col] let nchar = getline('.')[col]
if b:delimitMate_expand_space && char == " " if b:delimitMate_l_expand_space && char == " "
for cdel in b:delimitMate_right_delims + b:delimitMate_quotes_list for cdel in b:delimitMate_right_delims + b:delimitMate_quotes_list
if nchar == cdel if nchar == cdel
" Closing delimiter with space expansion. " Closing delimiter with space expansion.
@@ -168,7 +130,7 @@ function! delimitMate#ShouldJump() "{{{
endif endif
let uchar = getline(line('.') + 1)[0] let uchar = getline(line('.') + 1)[0]
if b:delimitMate_expand_cr && char == "" if b:delimitMate_l_expand_cr && char == ""
for cdel in b:delimitMate_right_delims + b:delimitMate_quotes_list for cdel in b:delimitMate_right_delims + b:delimitMate_quotes_list
if uchar == cdel if uchar == cdel
" Closing delimiter with CR expansion. " Closing delimiter with CR expansion.
@@ -448,7 +410,7 @@ function! delimitMate#ParenDelim(char) " {{{
if delimitMate#IsForbidden(a:char) if delimitMate#IsForbidden(a:char)
return '' return ''
endif endif
if b:delimitMate_unbalanced_parens && if b:delimitMate_l_unbalanced_parens &&
\ delimitMate#BalancedParens(a:char) <= 0 \ delimitMate#BalancedParens(a:char) <= 0
return '' return ''
endif endif
@@ -479,10 +441,10 @@ function! delimitMate#QuoteDelim(char) "{{{
"return delimitMate#WriteBefore(a:char) "return delimitMate#WriteBefore(a:char)
return a:char . delimitMate#Del() return a:char . delimitMate#Del()
elseif (line[col] =~ '[a-zA-Z0-9]' && a:char == "'") || elseif (line[col] =~ '[a-zA-Z0-9]' && a:char == "'") ||
\(line[col] =~ '[a-zA-Z0-9]' && b:delimitMate_smart_quotes) \(line[col] =~ '[a-zA-Z0-9]' && b:delimitMate_l_smart_quotes)
" Seems like an apostrophe or a closing, insert a single quote. " Seems like an apostrophe or a closing, insert a single quote.
return a:char return a:char
elseif (line[col] == a:char && line[col + 1 ] != a:char) && b:delimitMate_smart_quotes elseif (line[col] == a:char && line[col + 1 ] != a:char) && b:delimitMate_l_smart_quotes
" Seems like we have an unbalanced quote, insert one quotation mark and jump to the middle. " Seems like we have an unbalanced quote, insert one quotation mark and jump to the middle.
call insert(b:delimitMate_buffer, a:char) call insert(b:delimitMate_buffer, a:char)
return delimitMate#WriteAfter(a:char) return delimitMate#WriteAfter(a:char)
@@ -668,7 +630,7 @@ endfunction "}}}
function! delimitMate#VisualMaps() " {{{ function! delimitMate#VisualMaps() " {{{
let VMapMsg = "delimitMate: delimitMate is disabled on blockwise visual mode." let VMapMsg = "delimitMate: delimitMate is disabled on blockwise visual mode."
let vleader = b:delimitMate_visual_leader let vleader = b:delimitMate_l_visual_leader
" Wrap the selection with matching pairs, but do nothing if blockwise visual mode is active: " Wrap the selection with matching pairs, but do nothing if blockwise visual mode is active:
for del in b:delimitMate_right_delims + b:delimitMate_left_delims + b:delimitMate_quotes_list for del in b:delimitMate_right_delims + b:delimitMate_left_delims + b:delimitMate_quotes_list
exec "vnoremap <buffer> <expr> " . vleader . del . ' delimitMate#Visual("' . escape(del, '")') . '")' exec "vnoremap <buffer> <expr> " . vleader . del . ' delimitMate#Visual("' . escape(del, '")') . '")'
@@ -683,17 +645,17 @@ function! delimitMate#ExtraMappings() "{{{
inoremap <buffer> <expr> <S-BS> delimitMate#WithinEmptyPair() && !delimitMate#IsForbidden("") ? "\<Del>" : "\<S-BS>" inoremap <buffer> <expr> <S-BS> delimitMate#WithinEmptyPair() && !delimitMate#IsForbidden("") ? "\<Del>" : "\<S-BS>"
" Expand return if inside an empty pair: " Expand return if inside an empty pair:
if b:delimitMate_expand_cr != 0 if b:delimitMate_l_expand_cr != 0
inoremap <buffer> <CR> <C-R>=delimitMate#ExpandReturn()<CR> inoremap <buffer> <CR> <C-R>=delimitMate#ExpandReturn()<CR>
endif endif
" Expand space if inside an empty pair: " Expand space if inside an empty pair:
if b:delimitMate_expand_space != 0 if b:delimitMate_l_expand_space != 0
inoremap <buffer> <Space> <C-R>=delimitMate#ExpandSpace()<CR> inoremap <buffer> <Space> <C-R>=delimitMate#ExpandSpace()<CR>
endif endif
" Jump out ot any empty pair: " Jump out ot any empty pair:
if b:delimitMate_tab2exit if b:delimitMate_l_tab2exit
inoremap <buffer> <S-Tab> <C-R>=delimitMate#JumpAny("\<S-Tab>")<CR> inoremap <buffer> <S-Tab> <C-R>=delimitMate#JumpAny("\<S-Tab>")<CR>
endif endif
@@ -740,10 +702,10 @@ function! delimitMate#UnMap() " {{{
endif endif
endfor endfor
if !exists("b:delimitMate_visual_leader") if !exists("b:delimitMate_l_visual_leader")
let vleader = "" let vleader = ""
else else
let vleader = b:delimitMate_visual_leader let vleader = b:delimitMate_l_visual_leader
endif endif
for map in vmaps for map in vmaps
if maparg(vleader . map, "v") =~? "delimitMate" if maparg(vleader . map, "v") =~? "delimitMate"
@@ -758,19 +720,19 @@ endfunction " }}} delimitMate#UnMap()
" Tools: {{{ " Tools: {{{
function! delimitMate#TestMappings() "{{{ function! delimitMate#TestMappings() "{{{
exec "normal i*b:delimitMate_autoclose = " . b:delimitMate_autoclose . "\<CR>" exec "normal i*b:delimitMate_l_autoclose = " . b:delimitMate_l_autoclose . "\<CR>"
exec "normal i*b:delimitMate_expand_space = " . b:delimitMate_expand_space . "\<CR>" exec "normal i*b:delimitMate_l_expand_space = " . b:delimitMate_l_expand_space . "\<CR>"
exec "normal i*b:delimitMate_expand_cr = " . b:delimitMate_expand_cr . "\<CR>\<CR>" exec "normal i*b:delimitMate_l_expand_cr = " . b:delimitMate_l_expand_cr . "\<CR>\<CR>"
if b:delimitMate_autoclose if b:delimitMate_l_autoclose
for i in range(len(b:delimitMate_left_delims)) for i in range(len(b:delimitMate_left_delims))
exec "normal GGAOpen & close: " . b:delimitMate_left_delims[i]. "|" exec "normal GGAOpen & close: " . b:delimitMate_left_delims[i]. "|"
exec "normal A\<CR>Delete: " . b:delimitMate_left_delims[i] . "\<BS>|" exec "normal A\<CR>Delete: " . b:delimitMate_left_delims[i] . "\<BS>|"
exec "normal A\<CR>Exit: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . "|" exec "normal A\<CR>Exit: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . "|"
exec "normal A\<CR>Space: " . b:delimitMate_left_delims[i] . " |" exec "normal A\<CR>Space: " . b:delimitMate_left_delims[i] . " |"
exec "normal A\<CR>Delete space: " . b:delimitMate_left_delims[i] . " \<BS>|" exec "normal A\<CR>Delete space: " . b:delimitMate_left_delims[i] . " \<BS>|"
exec "normal GGA\<CR>Visual-L: v\<Esc>v" . b:delimitMate_visual_leader . b:delimitMate_left_delims[i] exec "normal GGA\<CR>Visual-L: v\<Esc>v" . b:delimitMate_l_visual_leader . b:delimitMate_left_delims[i]
exec "normal A\<CR>Visual-R: v\<Esc>v" . b:delimitMate_visual_leader . b:delimitMate_right_delims[i] exec "normal A\<CR>Visual-R: v\<Esc>v" . b:delimitMate_l_visual_leader . b:delimitMate_right_delims[i]
exec "normal A\<CR>Car return: " . b:delimitMate_left_delims[i] . "\<CR>|" exec "normal A\<CR>Car return: " . b:delimitMate_left_delims[i] . "\<CR>|"
exec "normal GGA\<CR>Delete car return: " . b:delimitMate_left_delims[i] . "\<CR>\<BS>|\<Esc>GGA\<CR>\<CR>" exec "normal GGA\<CR>Delete car return: " . b:delimitMate_left_delims[i] . "\<CR>\<BS>|\<Esc>GGA\<CR>\<CR>"
endfor endfor
@@ -780,7 +742,7 @@ function! delimitMate#TestMappings() "{{{
exec "normal A\<CR>Exit: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "|" exec "normal A\<CR>Exit: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "|"
exec "normal A\<CR>Space: " . b:delimitMate_quotes_list[i] . " |" exec "normal A\<CR>Space: " . b:delimitMate_quotes_list[i] . " |"
exec "normal A\<CR>Delete space: " . b:delimitMate_quotes_list[i] . " \<BS>|" exec "normal A\<CR>Delete space: " . b:delimitMate_quotes_list[i] . " \<BS>|"
exec "normal GGA\<CR>Visual: v\<Esc>v" . b:delimitMate_visual_leader . b:delimitMate_quotes_list[i] exec "normal GGA\<CR>Visual: v\<Esc>v" . b:delimitMate_l_visual_leader . b:delimitMate_quotes_list[i]
exec "normal A\<CR>Car return: " . b:delimitMate_quotes_list[i] . "\<CR>|" exec "normal A\<CR>Car return: " . b:delimitMate_quotes_list[i] . "\<CR>|"
exec "normal GGA\<CR>Delete car return: " . b:delimitMate_quotes_list[i] . "\<CR>\<BS>|\<Esc>GGA\<CR>\<CR>" exec "normal GGA\<CR>Delete car return: " . b:delimitMate_quotes_list[i] . "\<CR>\<BS>|\<Esc>GGA\<CR>\<CR>"
endfor endfor
@@ -791,8 +753,8 @@ function! delimitMate#TestMappings() "{{{
exec "normal A\<CR>Exit: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . b:delimitMate_right_delims[i] . "|" exec "normal A\<CR>Exit: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . b:delimitMate_right_delims[i] . "|"
exec "normal A\<CR>Space: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . " |" exec "normal A\<CR>Space: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . " |"
exec "normal A\<CR>Delete space: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . " \<BS>|" exec "normal A\<CR>Delete space: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . " \<BS>|"
exec "normal GGA\<CR>Visual-L: v\<Esc>v" . b:delimitMate_visual_leader . b:delimitMate_left_delims[i] exec "normal GGA\<CR>Visual-L: v\<Esc>v" . b:delimitMate_l_visual_leader . b:delimitMate_left_delims[i]
exec "normal A\<CR>Visual-R: v\<Esc>v" . b:delimitMate_visual_leader . b:delimitMate_right_delims[i] exec "normal A\<CR>Visual-R: v\<Esc>v" . b:delimitMate_l_visual_leader . b:delimitMate_right_delims[i]
exec "normal A\<CR>Car return: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . "\<CR>|" exec "normal A\<CR>Car return: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . "\<CR>|"
exec "normal GGA\<CR>Delete car return: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . "\<CR>\<BS>|\<Esc>GGA\<CR>\<CR>" exec "normal GGA\<CR>Delete car return: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . "\<CR>\<BS>|\<Esc>GGA\<CR>\<CR>"
endfor endfor
@@ -802,7 +764,7 @@ function! delimitMate#TestMappings() "{{{
exec "normal A\<CR>Exit: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "|" exec "normal A\<CR>Exit: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "|"
exec "normal A\<CR>Space: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . " |" exec "normal A\<CR>Space: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . " |"
exec "normal A\<CR>Delete space: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . " \<BS>|" exec "normal A\<CR>Delete space: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . " \<BS>|"
exec "normal GGA\<CR>Visual: v\<Esc>v" . b:delimitMate_visual_leader . b:delimitMate_quotes_list[i] exec "normal GGA\<CR>Visual: v\<Esc>v" . b:delimitMate_l_visual_leader . b:delimitMate_quotes_list[i]
exec "normal A\<CR>Car return: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "\<CR>|" exec "normal A\<CR>Car return: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "\<CR>|"
exec "normal GGA\<CR>Delete car return: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "\<CR>\<BS>|\<Esc>GGA\<CR>\<CR>" exec "normal GGA\<CR>Delete car return: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "\<CR>\<BS>|\<Esc>GGA\<CR>\<CR>"
endfor endfor