108 lines
3.5 KiB
VimL
108 lines
3.5 KiB
VimL
|
"=============================================================================
|
||
|
" $Id: option.vim 246 2010-09-19 22:40:58Z luc.hermitte $
|
||
|
" File: autoload/lh/option.vim {{{1
|
||
|
" Author: Luc Hermitte <EMAIL:hermitte {at} free {dot} fr>
|
||
|
" <URL:http://code.google.com/p/lh-vim/>
|
||
|
" Version: 2.2.1
|
||
|
" Created: 24th Jul 2004
|
||
|
" Last Update: $Date: 2010-09-19 18:40:58 -0400 (Sun, 19 Sep 2010) $ (07th Oct 2006)
|
||
|
"------------------------------------------------------------------------
|
||
|
" Description:
|
||
|
" Defines the global function lh#option#get().
|
||
|
" Aimed at (ft)plugin writers.
|
||
|
"
|
||
|
"------------------------------------------------------------------------
|
||
|
" Installation:
|
||
|
" Drop this file into {rtp}/autoload/lh/
|
||
|
" Requires Vim 7+
|
||
|
" History:
|
||
|
" v2.0.5
|
||
|
" (*) lh#option#get_non_empty() manages Lists and Dictionaries
|
||
|
" (*) lh#option#get() doesn't test emptyness anymore
|
||
|
" v2.0.0
|
||
|
" Code moved from {rtp}/macros/
|
||
|
" }}}1
|
||
|
"=============================================================================
|
||
|
|
||
|
|
||
|
"=============================================================================
|
||
|
let s:cpo_save=&cpo
|
||
|
set cpo&vim
|
||
|
|
||
|
"------------------------------------------------------------------------
|
||
|
" ## Functions {{{1
|
||
|
" # Debug {{{2
|
||
|
function! lh#option#verbose(level)
|
||
|
let s:verbose = a:level
|
||
|
endfunction
|
||
|
|
||
|
function! s:Verbose(expr)
|
||
|
if exists('s:verbose') && s:verbose
|
||
|
echomsg a:expr
|
||
|
endif
|
||
|
endfunction
|
||
|
|
||
|
function! lh#option#debug(expr)
|
||
|
return eval(a:expr)
|
||
|
endfunction
|
||
|
|
||
|
" # Public {{{2
|
||
|
" Function: lh#option#get(name, default [, scope]) {{{3
|
||
|
" @return b:{name} if it exists, or g:{name} if it exists, or {default}
|
||
|
" otherwise
|
||
|
" The order of the variables checked can be specified through the optional
|
||
|
" argument {scope}
|
||
|
function! lh#option#get(name,default,...)
|
||
|
let scope = (a:0 == 1) ? a:1 : 'bg'
|
||
|
let name = a:name
|
||
|
let i = 0
|
||
|
while i != strlen(scope)
|
||
|
if exists(scope[i].':'.name)
|
||
|
" \ && (0 != strlen({scope[i]}:{name}))
|
||
|
return {scope[i]}:{name}
|
||
|
endif
|
||
|
let i += 1
|
||
|
endwhile
|
||
|
return a:default
|
||
|
endfunction
|
||
|
function! lh#option#Get(name,default,...)
|
||
|
let scope = (a:0 == 1) ? a:1 : 'bg'
|
||
|
return lh#option#get(a:name, a:default, scope)
|
||
|
endfunction
|
||
|
|
||
|
function! s:IsEmpty(variable)
|
||
|
if type(a:variable) == type('string') | return 0 == strlen(a:variable)
|
||
|
elseif type(a:variable) == type(42) | return 0 == a:variable
|
||
|
elseif type(a:variable) == type([]) | return 0 == len(a:variable)
|
||
|
elseif type(a:variable) == type({}) | return 0 == len(a:variable)
|
||
|
else | return false
|
||
|
endif
|
||
|
endfunction
|
||
|
|
||
|
" Function: lh#option#get_non_empty(name, default [, scope]) {{{3
|
||
|
" @return of b:{name}, g:{name}, or {default} the first which exists and is not empty
|
||
|
" The order of the variables checked can be specified through the optional
|
||
|
" argument {scope}
|
||
|
function! lh#option#get_non_empty(name,default,...)
|
||
|
let scope = (a:0 == 1) ? a:1 : 'bg'
|
||
|
let name = a:name
|
||
|
let i = 0
|
||
|
while i != strlen(scope)
|
||
|
if exists(scope[i].':'.name) && !s:IsEmpty({scope[i]}:{name})
|
||
|
return {scope[i]}:{name}
|
||
|
endif
|
||
|
let i += 1
|
||
|
endwhile
|
||
|
return a:default
|
||
|
endfunction
|
||
|
function! lh#option#GetNonEmpty(name,default,...)
|
||
|
let scope = (a:0 == 1) ? a:1 : 'bg'
|
||
|
return lh#option#get_non_empty(a:name, a:default, scope)
|
||
|
endfunction
|
||
|
|
||
|
" Functions }}}1
|
||
|
"------------------------------------------------------------------------
|
||
|
let &cpo=s:cpo_save
|
||
|
"=============================================================================
|
||
|
" vim600: set fdm=marker:
|