Anton Lindqvist wrote:

> Hi,
> This patch adds a function with the declaration optiontype({option})
> which returns the type of the given option. I'm currently using it to
> achieve the following option toggle mapping:
> 
>   " :NMapChangeOption[!] {letter} {option} [enable]
>   "
>   " Create a normal mode option toggle mapping for {option}. The mapping key
>   " sequence will be prefixed with 'co' followed by {letter}.
>   "
>   " By default the option will only be changed in the current buffer. Using 
> [!]
>   " will change the option globally.
>   "
>   " Boolean option example:
>   "
>   "   :NMapChangeOption s spell
>   "
>   " Pressing 'cos' will toggle the spell option on and off.
>   "
>   " Non boolean option example:
>   "
>   "   :NMapChangeOption y syntax ON
>   "
>   " The optional [enable] argument can be used for string and comma separated
>   " list options. Pressing 'coy' will add/remove 'ON' from the syntax option.
>   "
>   " This functionality is borrowed from Tim Pope's unimpaired.vim plugin.
>   command! -bang -complete=option -nargs=+ NMapChangeOption
>     \ call s:NMapChangeOption(<bang>0, <f-args>)
>   func! s:NMapChangeOption(global, letter, option, ...) abort
>     let set = a:global ? 'set' : 'setlocal'
>     let type = optiontype(a:option)
>     if type == 0 " boolean
>       let rhs = printf(':%s <C-R>=&%s ? "no" : ""<CR>%s<CR>',
>         \ set, a:option, a:option)
>     elseif type == 2 " comma separated list
>       let rhs = printf(':%s %s<C-R>=&%s !~# "%s" ? "+=" : "-="<CR>%s<CR>',
>         \ set, a:option, a:option, a:1, a:1)
>     elseif type == 4 " string
>       let rhs = printf(':%s %s<C-R>=&%s == "%s" ? "&" : "=%s"<CR><CR>',
>         \ set, a:option, a:option, a:1, a:1)
>     endif
>     exe 'nnoremap co' . a:letter rhs
>   endfunc
> 
>   NMapChangeOption  c colorcolumn +1
>   NMapChangeOption! h hlsearch
>   NMapChangeOption  l list
>   NMapChangeOption! p paste
>   NMapChangeOption  s spell
>   NMapChangeOption  w wrap
>   NMapChangeOption  y syntax ON
> 
> The patch includes tests and docs.

I can see how this would be useful.  But returning just a number is
limited.  There are many more properties of an option, such as whether
it is window-local, was set or not, can be set from a modeline, etc.
Not that we need to add all those properties now, but I'm sure someone
will want to add them later.  Perhaps using "optionproperties()" and
returning a Dictionary?

-- 
hundred-and-one symptoms of being an internet addict:
111. You and your friends get together regularly on IRC, even though
     all of you live in the same city.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui