Files
2017-05-26 17:54:56 +02:00

104 lines
3.7 KiB
VimL

" ingo/plugin/setting.vim: Functions for retrieving plugin settings.
"
" DEPENDENCIES:
"
" Copyright: (C) 2009-2017 Ingo Karkat
" The VIM LICENSE applies to this script; see ':help copyright'.
"
" Maintainer: Ingo Karkat <ingo@karkat.de>
"
" REVISION DATE REMARKS
" 1.030.008 20-Feb-2017 Add ingo#plugin#setting#Default().
" 1.023.007 27-Jan-2015 Add ingo#plugin#setting#GetScope().
" 1.023.006 06-Dec-2014 Add ingo#plugin#setting#GetTabLocal().
" 1.019.005 16-Apr-2014 Add ingo#plugin#setting#BooleanToStringValue().
" 1.010.004 08-Jul-2013 Add prefix to exception thrown from
" ingo#plugin#setting#GetFromScope().
" 1.005.003 10-Apr-2013 Move into ingo-library.
" 002 06-Jul-2010 ENH: Now supporting passing of default value
" instead of throwing exception, like the built-in
" get().
" 001 04-Sep-2009 file creation
function! ingo#plugin#setting#GetScope( variableName, scopeList )
"******************************************************************************
"* PURPOSE:
" Get the scope of a configuration variable that can be defined in multiple
" scopes.
"* ASSUMPTIONS / PRECONDITIONS:
" None.
"* EFFECTS / POSTCONDITIONS:
" None.
"* INPUTS:
" a:variableName Name of the variable.
" a:scopeList List of variable scope prefixes. These are tried in
" sequential order.
"* RETURN VALUES:
" Scope prefix from a:scopeList where a:variableName is defined, or empty if
" it's defined nowhere.
"******************************************************************************
for l:scope in a:scopeList
let l:variable = l:scope . ':' . a:variableName
if exists(l:variable)
return l:scope
endif
endfor
return ''
endfunction
function! ingo#plugin#setting#GetFromScope( variableName, scopeList, ... )
"******************************************************************************
"* PURPOSE:
" Get a configuration variable that can be defined in multiple scopes.
"* ASSUMPTIONS / PRECONDITIONS:
" None.
"* EFFECTS / POSTCONDITIONS:
" None.
"* INPUTS:
" a:variableName Name of the variable.
" a:scopeList List of variable scope prefixes. These are tried in
" sequential order.
" a:defaultValue Optional value to be returned when no a:variableName is
" defined in any of the a:scopeList. If omitted, an exception
" is thrown instead.
"* RETURN VALUES:
" Value of a:variableName from the first scope in a:scopeList where it is
" defined, or a:defaultValue, or exception.
"******************************************************************************
for l:scope in a:scopeList
let l:variable = l:scope . ':' . a:variableName
if exists(l:variable)
execute 'return' l:variable
endif
endfor
if a:0
return a:1
else
throw 'GetFromScope: No variable named "' . a:variableName . '" defined.'
endif
endfunction
function! ingo#plugin#setting#GetBufferLocal( variableName, ... )
return call('ingo#plugin#setting#GetFromScope', [a:variableName, ['b', 'g']] + a:000)
endfunction
function! ingo#plugin#setting#GetWindowLocal( variableName, ... )
return call('ingo#plugin#setting#GetFromScope', [a:variableName, ['w', 'g']] + a:000)
endfunction
function! ingo#plugin#setting#GetTabLocal( variableName, ... )
return call('ingo#plugin#setting#GetFromScope', [a:variableName, ['t', 'g']] + a:000)
endfunction
function! ingo#plugin#setting#BooleanToStringValue( settingName, ... )
if a:0
let l:settingValue = a:1
else
execute 'let l:settingValue = &' . a:settingName
endif
return l:settingValue ? a:settingName : 'no' . a:settingName
endfunction
function! ingo#plugin#setting#Default( value, defaultValue )
return (a:value ==# '' ? a:defaultValue : a:value)
endfunction
" vim: set ts=8 sts=4 sw=4 noexpandtab ff=unix fdm=syntax :