Clean & Fix: cycle_bullets bug not defined key in dic: #911

This commit is contained in:
Tinmarino 2020-06-16 13:46:25 -04:00
parent a9f21c6d4a
commit 43951e5851
6 changed files with 219 additions and 55 deletions

View File

@ -180,26 +180,32 @@ endfunction
"Returns: the mainly used data structure in this file "Returns: the mainly used data structure in this file
"An item represents a single list item and is a dictionary with the keys "An item represents a single list item and is a dictionary with the keys
"lnum - the line number of the list item "lnum - the line number of the list item
"type - 1 for bulleted item, 2 for numbered item, 0 for a regular line "type - 1 for bulleted item, 2 for numbered item, 0 for a regular line (default)
"mrkr - the concrete marker, e.g. '**' or 'b)' "mrkr - the concrete marker, e.g. '**' or 'b)' (default '')
"cb - the char in the checkbox or '' if there is no checkbox "cb - the char in the checkbox or '' if there is no checkbox
function! s:get_item(lnum) abort function! s:get_item(lnum) abort
" Init default
let item = {'lnum': a:lnum} let item = {'lnum': a:lnum}
if a:lnum == 0 || a:lnum > line('$')
let item.type = 0 let item.type = 0
let item.mrkr = ''
let item.cb = ''
" Clause: Check lnum argument is in buffer line range
if a:lnum == 0 || a:lnum > line('$')
return item return item
endif endif
" Search for list on current line
let matches = matchlist(getline(a:lnum), vimwiki#vars#get_wikilocal('rxListItem')) let matches = matchlist(getline(a:lnum), vimwiki#vars#get_wikilocal('rxListItem'))
" Clause: If not on a list line => do not work
if matches == [] || if matches == [] ||
\ (matches[1] ==? '' && matches[2] ==? '') || \ (matches[1] ==? '' && matches[2] ==? '') ||
\ (matches[1] !=? '' && matches[2] !=? '') \ (matches[1] !=? '' && matches[2] !=? '')
let item.type = 0
return item return item
endif endif
" Fill item
let item.cb = matches[3] let item.cb = matches[3]
if matches[1] !=? '' if matches[1] !=? ''
let item.type = 1 let item.type = 1
let item.mrkr = matches[1] let item.mrkr = matches[1]
@ -208,6 +214,7 @@ function! s:get_item(lnum) abort
let item.mrkr = matches[2] let item.mrkr = matches[2]
endif endif
" See you on an other stack
return item return item
endfunction endfunction
@ -1257,22 +1264,26 @@ function! s:increase_level(item, by) abort
call s:indent_cycle_bullets(a:item, a:by) call s:indent_cycle_bullets(a:item, a:by)
endfunction endfunction
" s:indent_cycle_bullets cycles through the bullet list markers set in
" Cycle through the bullet list markers set in
" `bullet_types` based on the indentation level " `bullet_types` based on the indentation level
" TODO there is potential to merge this with the change_marker* funcs further " TODO there is potential to merge this with the change_marker* funcs further
" up if we can make them operate on arbitrary lists of characters " up if we can make them operate on arbitrary lists of characters
function! s:indent_cycle_bullets(item, indent_by) abort function! s:indent_cycle_bullets(item, indent_by) abort
if vimwiki#vars#get_syntaxlocal('cycle_bullets') && a:item.type == 1 " Clause: Check if should work
if !vimwiki#vars#get_syntaxlocal('cycle_bullets') || a:item.type != 1
return
endif
let bullets = vimwiki#vars#get_syntaxlocal('bullet_types') let bullets = vimwiki#vars#get_syntaxlocal('bullet_types')
let i = index(bullets, s:first_char(a:item.mrkr)) + a:indent_by let i = index(bullets, s:first_char(a:item.mrkr)) + a:indent_by
" calculate the index in a way that wraps around the end of the list " Calculate the index in a way that wraps around the end of the list
" making it behave like a ring buffer " ... making it behave like a ring buffer
let new_mrkr = bullets[((i % len(bullets) + len(bullets)) % len(bullets))] let new_mrkr = bullets[((i % len(bullets) + len(bullets)) % len(bullets))]
call vimwiki#lst#change_marker(a:item.lnum, a:item.lnum, new_mrkr, 'n') call vimwiki#lst#change_marker(a:item.lnum, a:item.lnum, new_mrkr, 'n')
endif
endfunction endfunction
"adds a:indent_by to the current indent
" Add a:indent_by to the current indent
"a:indent_by can be negative "a:indent_by can be negative
function! s:indent_line_by(lnum, indent_by) abort function! s:indent_line_by(lnum, indent_by) abort
let item = s:get_item(a:lnum) let item = s:get_item(a:lnum)
@ -1285,7 +1296,7 @@ function! s:indent_line_by(lnum, indent_by) abort
endfunction endfunction
"changes lvl of lines in selection " Change lvl of lines in selection
function! s:change_level(from_line, to_line, direction, plus_children) abort function! s:change_level(from_line, to_line, direction, plus_children) abort
let from_item = s:get_corresponding_item(a:from_line) let from_item = s:get_corresponding_item(a:from_line)
if from_item.type == 0 if from_item.type == 0

View File

@ -26,7 +26,23 @@
" variables, not the underlying dicts! " variables, not the underlying dicts!
" ------------------------------------------------------------------------------------------------ " ------------------------------------------------------------------------------------------------
" Script variable
let s:margin_set_by_user = 0
" Helper, Init global and local variables
function! vimwiki#vars#init() abort
call s:populate_global_variables()
call s:populate_wikilocal_options()
endfunction
" ----------------------------------------------------------
" 1. Global
" ----------------------------------------------------------
" Populate global variable <- user & default
" Called: s:vimwiki#vars#init
function! s:populate_global_variables() abort function! s:populate_global_variables() abort
let g:vimwiki_global_vars = {} let g:vimwiki_global_vars = {}
@ -140,6 +156,8 @@ function! s:populate_global_variables() abort
endfunction endfunction
" Read user global settings
" Called: s:populate_global_variables
function! s:read_global_settings_from_user() abort function! s:read_global_settings_from_user() abort
let global_settings = { let global_settings = {
\ 'CJK_length': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, \ 'CJK_length': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
@ -244,6 +262,8 @@ function! s:read_global_settings_from_user() abort
endfunction endfunction
" Normalize user global settings
" Called: s:populate_global_variables
function! s:normalize_global_settings() abort function! s:normalize_global_settings() abort
let keys = keys(g:vimwiki_global_vars.ext2syntax) let keys = keys(g:vimwiki_global_vars.ext2syntax)
for ext in keys for ext in keys
@ -321,8 +341,17 @@ function! s:normalize_global_settings() abort
endfunction endfunction
let s:margin_set_by_user = 0 " ----------------------------------------------------------
" 2. Buffer local
" ----------------------------------------------------------
" Populate local variable <- user & default
" Called: s:vimwiki#vars#init
function! s:populate_wikilocal_options() abort function! s:populate_wikilocal_options() abort
" Init local variable container
let g:vimwiki_wikilocal_vars = []
" Declare default values
let default_values = { let default_values = {
\ 'auto_diary_index': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, \ 'auto_diary_index': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
\ 'auto_export': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, \ 'auto_export': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
@ -356,12 +385,12 @@ function! s:populate_wikilocal_options() abort
\ 'template_path': {'type': type(''), 'default': $HOME . '/vimwiki/templates/'}, \ 'template_path': {'type': type(''), 'default': $HOME . '/vimwiki/templates/'},
\ 'html_filename_parameterization': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, \ 'html_filename_parameterization': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
\ 'bullet_types': {'type': type([]), 'default': []}, \ 'bullet_types': {'type': type([]), 'default': []},
\ 'cycle_bullets': {'type': type(0), 'default': 0},
\ 'listsyms': {'type': type(''), 'default': vimwiki#vars#get_global('listsyms')}, \ 'listsyms': {'type': type(''), 'default': vimwiki#vars#get_global('listsyms')},
\ 'listsym_rejected': {'type': type(''), 'default': vimwiki#vars#get_global('listsym_rejected')}, \ 'listsym_rejected': {'type': type(''), 'default': vimwiki#vars#get_global('listsym_rejected')},
\ } \ }
let g:vimwiki_wikilocal_vars = [] " Fill default setting <- user or plugin values
let default_wiki_settings = {} let default_wiki_settings = {}
for key in keys(default_values) for key in keys(default_values)
if exists('g:vimwiki_'.key) if exists('g:vimwiki_'.key)
@ -372,7 +401,7 @@ function! s:populate_wikilocal_options() abort
endif endif
endfor endfor
" set the wiki-local variables according to g:vimwiki_list (or the default settings) " Set the wiki-local variables according to g:vimwiki_list (or the default settings)
if exists('g:vimwiki_list') if exists('g:vimwiki_list')
for users_wiki_settings in g:vimwiki_list for users_wiki_settings in g:vimwiki_list
let new_wiki_settings = {} let new_wiki_settings = {}
@ -408,10 +437,10 @@ function! s:populate_wikilocal_options() abort
if len(wiki.bullet_types) == 0 if len(wiki.bullet_types) == 0
let wiki.bullet_types = vimwiki#vars#get_syntaxlocal('bullet_types', wiki.syntax) let wiki.bullet_types = vimwiki#vars#get_syntaxlocal('bullet_types', wiki.syntax)
endif endif
call vimwiki#vars#populate_list_vars(wiki) call s:populate_list_vars(wiki)
endfor endfor
" check some values individually " Check some values individually
let key = 'nested_syntaxes' let key = 'nested_syntaxes'
for wiki_settings in g:vimwiki_wikilocal_vars for wiki_settings in g:vimwiki_wikilocal_vars
let users_value = wiki_settings[key] let users_value = wiki_settings[key]
@ -429,6 +458,12 @@ function! s:populate_wikilocal_options() abort
endfunction endfunction
" Helper, Check user setting
" warn user with echo message if not good type
" Param: 1: key <string>: varaible name
" Param: 2: vimwiki_key <obj>: user value
" Param: 3: value_infod <dict>: type and default value
" Param: 4: coming from a global variable <bool>
function! s:check_users_value(key, users_value, value_infos, comes_from_global_variable) abort function! s:check_users_value(key, users_value, value_infos, comes_from_global_variable) abort
let type_code_to_name = { let type_code_to_name = {
\ type(0): 'number', \ type(0): 'number',
@ -487,6 +522,7 @@ function! s:check_users_value(key, users_value, value_infos, comes_from_global_v
endfunction endfunction
" Normalize local settings
function! s:normalize_wikilocal_settings() abort function! s:normalize_wikilocal_settings() abort
for wiki_settings in g:vimwiki_wikilocal_vars for wiki_settings in g:vimwiki_wikilocal_vars
let wiki_settings['path'] = s:normalize_path(wiki_settings['path']) let wiki_settings['path'] = s:normalize_path(wiki_settings['path'])
@ -520,6 +556,7 @@ function! s:normalize_wikilocal_settings() abort
endfunction endfunction
" Helper path
" TODO move to path " TODO move to path
function! s:normalize_path(path) abort function! s:normalize_path(path) abort
" trim trailing / and \ because otherwise resolve() doesn't work quite right " trim trailing / and \ because otherwise resolve() doesn't work quite right
@ -532,20 +569,39 @@ function! s:normalize_path(path) abort
endfunction endfunction
" ----------------------------------------------------------
" 3. Syntax specific
" ----------------------------------------------------------
" Populate syntax variable
" Exported: syntax/vimwiki.vim
function! vimwiki#vars#populate_syntax_vars(syntax) abort function! vimwiki#vars#populate_syntax_vars(syntax) abort
" Create is not exists
if !exists('g:vimwiki_syntax_variables') if !exists('g:vimwiki_syntax_variables')
let g:vimwiki_syntax_variables = {} let g:vimwiki_syntax_variables = {}
endif endif
" Clause: leave if already filled
if has_key(g:vimwiki_syntax_variables, a:syntax) if has_key(g:vimwiki_syntax_variables, a:syntax)
return return
endif endif
" Init syntax variable dictionary
let g:vimwiki_syntax_variables[a:syntax] = {} let g:vimwiki_syntax_variables[a:syntax] = {}
" Autoload default syntax file
execute 'runtime! syntax/vimwiki_'.a:syntax.'.vim' execute 'runtime! syntax/vimwiki_'.a:syntax.'.vim'
" generic stuff " TODO make that clean (i.e clearify what is local to syntax ot to buffer)
" Get from local vars
let bullet_types = vimwiki#vars#get_wikilocal('bullet_types')
if !empty(bullet_types)
let g:vimwiki_syntax_variables[a:syntax]['bullet_types'] = bullet_types
endif
let g:vimwiki_syntax_variables[a:syntax]['cycle_bullets'] =
\ vimwiki#vars#get_wikilocal('cycle_bullets')
" Populate generic stuff
let header_symbol = g:vimwiki_syntax_variables[a:syntax].rxH let header_symbol = g:vimwiki_syntax_variables[a:syntax].rxH
if g:vimwiki_syntax_variables[a:syntax].symH if g:vimwiki_syntax_variables[a:syntax].symH
" symmetric headers " symmetric headers
@ -605,7 +661,7 @@ function! vimwiki#vars#populate_syntax_vars(syntax) abort
let char_to_rx = {'1': '\d\+', 'i': '[ivxlcdm]\+', 'I': '[IVXLCDM]\+', let char_to_rx = {'1': '\d\+', 'i': '[ivxlcdm]\+', 'I': '[IVXLCDM]\+',
\ 'a': '\l\{1,2}', 'A': '\u\{1,2}'} \ 'a': '\l\{1,2}', 'A': '\u\{1,2}'}
"create regexp for bulleted list items " Create regexp for bulleted list items
if !empty(g:vimwiki_syntax_variables[a:syntax].bullet_types) if !empty(g:vimwiki_syntax_variables[a:syntax].bullet_types)
let g:vimwiki_syntax_variables[a:syntax].rxListBullet = let g:vimwiki_syntax_variables[a:syntax].rxListBullet =
\ join( map(copy(g:vimwiki_syntax_variables[a:syntax].bullet_types), \ join( map(copy(g:vimwiki_syntax_variables[a:syntax].bullet_types),
@ -617,7 +673,7 @@ function! vimwiki#vars#populate_syntax_vars(syntax) abort
let g:vimwiki_syntax_variables[a:syntax].rxListBullet = '$^' let g:vimwiki_syntax_variables[a:syntax].rxListBullet = '$^'
endif endif
"create regex for numbered list items " Create regex for numbered list items
if !empty(g:vimwiki_syntax_variables[a:syntax].number_types) if !empty(g:vimwiki_syntax_variables[a:syntax].number_types)
let g:vimwiki_syntax_variables[a:syntax].rxListNumber = '\C\%(' let g:vimwiki_syntax_variables[a:syntax].rxListNumber = '\C\%('
for type in g:vimwiki_syntax_variables[a:syntax].number_types[:-2] for type in g:vimwiki_syntax_variables[a:syntax].number_types[:-2]
@ -674,13 +730,16 @@ function! vimwiki#vars#populate_syntax_vars(syntax) abort
\ . g:vimwiki_global_vars.rxWikiLinkDescr. '\ze\)\?' \ . g:vimwiki_global_vars.rxWikiLinkDescr. '\ze\)\?'
\ . g:vimwiki_global_vars.rx_wikilink_suffix \ . g:vimwiki_global_vars.rx_wikilink_suffix
" Work more if markdown
if a:syntax ==# 'markdown' if a:syntax ==# 'markdown'
call s:populate_extra_markdown_vars() call s:populate_extra_markdown_vars()
endif endif
endfunction endfunction
function! vimwiki#vars#populate_list_vars(wiki) abort " Populate list variable
" or how to search and treat list (ex: *,-, 1.)
function! s:populate_list_vars(wiki) abort
let syntax = a:wiki.syntax let syntax = a:wiki.syntax
let a:wiki.rx_bullet_char = '['.escape(join(a:wiki.bullet_types, ''), ']^-\').']' let a:wiki.rx_bullet_char = '['.escape(join(a:wiki.bullet_types, ''), ']^-\').']'
@ -693,7 +752,7 @@ function! vimwiki#vars#populate_list_vars(wiki) abort
\ recurring_bullets \ recurring_bullets
\ ? a:wiki.bullet_types : [] \ ? a:wiki.bullet_types : []
"create regexp for bulleted list items " Create regexp for bulleted list items
if !empty(a:wiki.bullet_types) if !empty(a:wiki.bullet_types)
let rxListBullet = let rxListBullet =
\ join( map(copy(a:wiki.bullet_types), \ join( map(copy(a:wiki.bullet_types),
@ -737,8 +796,7 @@ function! vimwiki#vars#populate_list_vars(wiki) abort
endfunction endfunction
" Populate markdown specific syntax variables
function! s:populate_extra_markdown_vars() abort function! s:populate_extra_markdown_vars() abort
let mkd_syntax = g:vimwiki_syntax_variables['markdown'] let mkd_syntax = g:vimwiki_syntax_variables['markdown']
@ -908,27 +966,33 @@ function! s:populate_extra_markdown_vars() abort
endfunction endfunction
function! vimwiki#vars#init() abort " ----------------------------------------------------------
call s:populate_global_variables() " 4. Getter, Setter (exported)
call s:populate_wikilocal_options() " ----------------------------------------------------------
endfunction
" Get syntax variable
" Param: 1: key (<string>)
" Param: (2): syntax name (<string> ex:'markdown')
function! vimwiki#vars#get_syntaxlocal(key, ...) abort function! vimwiki#vars#get_syntaxlocal(key, ...) abort
" Retrieve desired syntax name
if a:0 if a:0
let syntax = a:1 let syntax = a:1
else else
let syntax = vimwiki#vars#get_wikilocal('syntax') let syntax = vimwiki#vars#get_wikilocal('syntax')
endif endif
" Create syntax varaible dict if not exists (lazy)
if !exists('g:vimwiki_syntax_variables') || !has_key(g:vimwiki_syntax_variables, syntax) if !exists('g:vimwiki_syntax_variables') || !has_key(g:vimwiki_syntax_variables, syntax)
call vimwiki#vars#populate_syntax_vars(syntax) call vimwiki#vars#populate_syntax_vars(syntax)
endif endif
" Return d_syntax[a:key]
return g:vimwiki_syntax_variables[syntax][a:key] return g:vimwiki_syntax_variables[syntax][a:key]
endfunction endfunction
" Get a variable for the buffer we are currently in or for the given buffer (number or name). " Return: buffer local variable
" for the buffer we are currently in or for the given buffer (number or name).
" Populate the variable, if it doesn't exist. " Populate the variable, if it doesn't exist.
function! vimwiki#vars#get_bufferlocal(key, ...) abort function! vimwiki#vars#get_bufferlocal(key, ...) abort
let buffer = a:0 ? a:1 : '%' let buffer = a:0 ? a:1 : '%'
@ -962,24 +1026,29 @@ function! vimwiki#vars#get_bufferlocal(key, ...) abort
endfunction endfunction
" Set buffer local variable
function! vimwiki#vars#set_bufferlocal(key, value, ...) abort function! vimwiki#vars#set_bufferlocal(key, value, ...) abort
let buffer = a:0 ? a:1 : '%' let buffer = a:0 ? a:1 : '%'
call setbufvar(buffer, 'vimwiki_' . a:key, a:value) call setbufvar(buffer, 'vimwiki_' . a:key, a:value)
endfunction endfunction
" Return: wiki global variable
function! vimwiki#vars#get_global(key) abort function! vimwiki#vars#get_global(key) abort
return g:vimwiki_global_vars[a:key] return g:vimwiki_global_vars[a:key]
endfunction endfunction
" Set global variable
function! vimwiki#vars#set_global(key, value) abort function! vimwiki#vars#set_global(key, value) abort
let g:vimwiki_global_vars[a:key] = a:value let g:vimwiki_global_vars[a:key] = a:value
return g:vimwiki_global_vars[a:key] return g:vimwiki_global_vars[a:key]
endfunction endfunction
" the second argument can be a wiki number. When absent, the wiki of the currently active buffer is " Return: wiki local named varaible
" Param: 1: variable name (alias key, <string>)
" Param: (2): wiki number (<int>). When absent, the wiki of the currently active buffer is
" used " used
function! vimwiki#vars#get_wikilocal(key, ...) abort function! vimwiki#vars#get_wikilocal(key, ...) abort
if a:0 if a:0
@ -990,11 +1059,13 @@ function! vimwiki#vars#get_wikilocal(key, ...) abort
endfunction endfunction
" Return: wiki local variable (of default wiki [index -1])
function! vimwiki#vars#get_wikilocal_default(key) abort function! vimwiki#vars#get_wikilocal_default(key) abort
return g:vimwiki_wikilocal_vars[-1][a:key] return g:vimwiki_wikilocal_vars[-1][a:key]
endfunction endfunction
" Set local variable
function! vimwiki#vars#set_wikilocal(key, value, wiki_nr) abort function! vimwiki#vars#set_wikilocal(key, value, wiki_nr) abort
if a:wiki_nr == len(g:vimwiki_wikilocal_vars) - 1 if a:wiki_nr == len(g:vimwiki_wikilocal_vars) - 1
call insert(g:vimwiki_wikilocal_vars, {}, -1) call insert(g:vimwiki_wikilocal_vars, {}, -1)
@ -1003,6 +1074,7 @@ function! vimwiki#vars#set_wikilocal(key, value, wiki_nr) abort
endfunction endfunction
" Append new wiki to wiki list
function! vimwiki#vars#add_temporary_wiki(settings) abort function! vimwiki#vars#add_temporary_wiki(settings) abort
let new_temp_wiki_settings = copy(g:vimwiki_wikilocal_vars[-1]) let new_temp_wiki_settings = copy(g:vimwiki_wikilocal_vars[-1])
for [key, value] in items(a:settings) for [key, value] in items(a:settings)
@ -1013,7 +1085,7 @@ function! vimwiki#vars#add_temporary_wiki(settings) abort
endfunction endfunction
" number of registered wikis + temporary " Return: number of registered wikis + temporary
function! vimwiki#vars#number_of_wikis() abort function! vimwiki#vars#number_of_wikis() abort
return len(g:vimwiki_wikilocal_vars) - 1 return len(g:vimwiki_wikilocal_vars) - 1
endfunction endfunction

View File

@ -2522,7 +2522,7 @@ Note: if you use Markdown or MediaWiki syntax, you probably would like to set
this option to 0, because every indented line is considered verbatim text. this option to 0, because every indented line is considered verbatim text.
*vimwiki-bullet_types* *vimwiki-option-bullet_types*
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
Key Default value~ Key Default value~
bullet_types ['-', '*', '#'] (default-syntax) bullet_types ['-', '*', '#'] (default-syntax)
@ -2537,6 +2537,15 @@ You can set it to include more fancy symbols like this:
let g:vimwiki_list = [{'path': '~/path/', 'bullet_types' = ['-', '•', '→']}] let g:vimwiki_list = [{'path': '~/path/', 'bullet_types' = ['-', '•', '→']}]
*vimwiki-option-bullet_types*
------------------------------------------------------------------------------
Key Default value~
cycle_bullets 0
If set to 1 (true), cycle through |bullet_types| when changing list element
identation
*vimwiki-listsyms* *vimwiki-listsyms*
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
Key Default value~ Key Default value~
@ -3596,6 +3605,7 @@ http://code.google.com/p/vimwiki/issues/list. They may be accessible from
https://github.com/vimwiki-backup/vimwiki/issues. https://github.com/vimwiki-backup/vimwiki/issues.
New:~ New:~
* PR #907: Cycle bullets
* PR #900: conceallevel is now setted locally for vimwiki buffers * PR #900: conceallevel is now setted locally for vimwiki buffers
2.5 (2020-05-26)~ 2.5 (2020-05-26)~

View File

@ -73,12 +73,11 @@ let s:markdown_syntax.rxHR = '\(^---*$\|^___*$\|^\*\*\**$\)'
let s:markdown_syntax.rxTableSep = '|' let s:markdown_syntax.rxTableSep = '|'
" Lists " Lists
let s:markdown_syntax.bullet_types = ['*', '-', '+']
let s:markdown_syntax.recurring_bullets = 0 let s:markdown_syntax.recurring_bullets = 0
let s:markdown_syntax.cycle_bullets = 1
let s:markdown_syntax.number_types = ['1.'] let s:markdown_syntax.number_types = ['1.']
let s:markdown_syntax.list_markers = ['-', '*', '+', '1.'] let s:markdown_syntax.list_markers = ['-', '*', '+', '1.']
let s:markdown_syntax.rxListDefine = '::\%(\s\|$\)' let s:markdown_syntax.rxListDefine = '::\%(\s\|$\)'
let s:markdown_syntax.bullet_types = ['*', '-', '+']
" Preformatted text (code blocks) " Preformatted text (code blocks)
let s:markdown_syntax.rxPreStart = '\%(`\{3,}\|\~\{3,}\)' let s:markdown_syntax.rxPreStart = '\%(`\{3,}\|\~\{3,}\)'

View File

@ -8,18 +8,6 @@ Execute (Configure: Set vimwiki list to markdown resource):
Log "Let mapleader = ," Log "Let mapleader = ,"
let mapleader = ',' let mapleader = ','
Log "Declare function DestroyVar"
function! DestroyVar(var)
if ! exists(a:var) | return | endif
execute "unlet " . a:var
endfunction
Log "Declare function AssertTab"
function! AssertTab(nr)
" Vader is creating 2 tabs
AssertEqual a:nr + 2, tabpagenr()
endfunction
Log "Destroy vimrc or previous run heritage" Log "Destroy vimrc or previous run heritage"
call DestroyVar('g:vimwiki_list') call DestroyVar('g:vimwiki_list')
call DestroyVar('g:vimwiki_global_vars') call DestroyVar('g:vimwiki_global_vars')
@ -380,6 +368,23 @@ Expect (Renumber):
1. Much 1. Much
3. You 3. You
# New launch
#
Given (Number list):
1. I
1. Relly
2. Love
1. Very
1. Much
3. You
Execute (file .md):
file toto.md
edit!
AssertEqual 'vimwiki', &ft
set sw=2
Do (gl*): Do (gl*):
gl* gl*
@ -402,6 +407,8 @@ Expect (list -> *):
1. Much 1. Much
* You * You
# New launch
#
Given (Bulleted list): Given (Bulleted list):
* I * I
- Relly - Relly
@ -411,12 +418,14 @@ Given (Bulleted list):
* You * You
Execute (file .md): Execute (file .md):
set sw=2
file toto.md file toto.md
edit! edit!
let g:vimwiki_syntax_variables['markdown']['cycle_bullets'] = 1
let g:vimwiki_syntax_variables['markdown']['bullet_types'] = ['*', '-', '+']
AssertEqual 'vimwiki', &ft AssertEqual 'vimwiki', &ft
set sw=2
Do (2gll): Do (gLl):
gLl gLl
Expect (Increase): Expect (Increase):
@ -452,6 +461,57 @@ Expect (New item):
- Much - Much
- -
# New launch
#
Given (List ->):
* Item1
Execute (file toto.md):
" Note: let s:markdown_syntax.bullet_types = ['*', '-', '+']
file toto.md
edit!
Log "Cycle bullets"
let g:vimwiki_syntax_variables['bullet_types'] = ['*', '-']
let g:vimwiki_syntax_variables['markdown']['cycle_bullets'] = 1
AssertEqual g:vimwiki_syntax_variables['markdown']['cycle_bullets'], 1
AssertEqual 'vimwiki', &ft
set sw=2
set expandtab " Otherwise, getting some tab before some items, when enought space
Do (o):
oItem2
Expect (Good bullet type):
* Item1
* Item2
# TODO test more, (see real cycle, but do not work with low vim)
Do (o + <C-t>):
o2
\<C-t>\<Esc>
o3
\<C-t>\<Esc>
Expect (Good bullet type):
* Item1
- 2
+ 3
Do (o + <Cr>):
A1\<Cr>
2\<C-t>\<Cr>
3\<C-t>
Expect (Good nested bullet type):
* Item11
- 2
+ 3
# TODO test: let g:vimwiki_bullet_types = ['-', '•', '→', '*']
# 3 Text Object {{{1 # 3 Text Object {{{1
#################### ####################

View File

@ -74,7 +74,7 @@ Before (Define functions):
write % write %
endfunction endfunction
" print a command output to the buffer " Print a command output to the buffer
function! PrintCommand(cmd) function! PrintCommand(cmd)
redir => message redir => message
silent execute a:cmd silent execute a:cmd
@ -86,4 +86,16 @@ Before (Define functions):
endif endif
endfunction endfunction
" Destroy a variable is exists (unlet)
function! DestroyVar(var)
if ! exists(a:var) | return | endif
execute "unlet " . a:var
endfunction
" Assert current tab is desired tab
function! AssertTab(nr)
" Vader is creating 2 tabs
AssertEqual a:nr + 2, tabpagenr()
endfunction
# vim: ft=vim # vim: ft=vim