diff --git a/autoload/wordy.vim b/autoload/wordy.vim index d519ff5..a5c1481 100644 --- a/autoload/wordy.vim +++ b/autoload/wordy.vim @@ -24,43 +24,44 @@ function! wordy#init(...) abort " switch to usage dictionaries, building if needed let l:d = get(l:args, 'd', []) " may be string or list let l:dicts = (type(l:d) == type([])) ? l:d : [l:d] - if len(l:dicts) - let l:dst_paths = [] - " TODO &spelllang) - let l:lang = get(l:args, 'lang', 'en') - " TODO &encoding) - let l:encoding = get(l:args, 'encoding', 'utf-8') - for l:dict in l:dicts - let l:data_dir = g:wordy_dir . '/data' - let l:src_path = l:data_dir . '/' . l:lang . '/' . l:dict . '.dic' - if filereadable(l:src_path) - let l:spell_dir = g:wordy_dir . '/spell' - if !isdirectory(l:spell_dir) - call mkdir(expand(l:spell_dir), "p") - endif - let l:dst_path = l:spell_dir . '/' . l:dict . '.' . l:lang . '.' . l:encoding . '.spl' - if get(l:args, 'force', 0) || - \ !filereadable(l:dst_path) || - \ getftime(l:dst_path) < getftime(l:src_path) - " attempt to (re)build the spell file - exe 'mkspell! ' . l:dst_path . ' ' . l:src_path - endif - if filereadable(l:dst_path) - call add(l:dst_paths, l:dst_path) - else - echohl WarningMsg | echo 'Unable to read target: ' . l:dst_path | echohl NONE - endif - else - echohl WarningMsg | echo 'Unable to read source: ' . l:src_path | echohl NONE + let l:dst_paths = [] + " TODO &spelllang) + let l:lang = get(l:args, 'lang', 'en') + " TODO &encoding) + let l:encoding = get(l:args, 'encoding', 'utf-8') + for l:dict in l:dicts + let l:data_dir = g:wordy_dir . '/data' + let l:src_path = l:data_dir . '/' . l:lang . '/' . l:dict . '.dic' + if filereadable(l:src_path) + let l:spell_dir = g:wordy_dir . '/spell' + if !isdirectory(l:spell_dir) + call mkdir(expand(l:spell_dir), "p") endif - endfor - if len(l:dst_paths) > 0 - let b:original_spl = &spelllang - exe 'setlocal spelllang=' . l:lang . ',' . join(l:dst_paths, ',') - setlocal spell + let l:dst_path = l:spell_dir . '/' . l:dict . '.' . l:lang . '.' . l:encoding . '.spl' + if get(l:args, 'force', 0) || + \ !filereadable(l:dst_path) || + \ getftime(l:dst_path) < getftime(l:src_path) + " attempt to (re)build the spell file + exe 'mkspell! ' . l:dst_path . ' ' . l:src_path + endif + if filereadable(l:dst_path) + call add(l:dst_paths, l:dst_path) + else + let l:msg = 'Unable to read target: ' . l:dst_path + endif + else + let l:msg = 'Unable to read source: ' . l:src_path endif - echohl ModeMsg | echo 'wordy: ' . join(l:dicts, ', ') | echohl NONE + endfor + if len(l:dst_paths) > 0 + let b:original_spl = &spelllang + exe 'setlocal spelllang=' . l:lang . ',' . join(l:dst_paths, ',') + setlocal spell + let l:msg = join(l:dicts, ', ') + else + let l:msg = 'off' endif + echohl ModeMsg | echo 'wordy: ' . l:msg | echohl NONE endfunction function! wordy#jump(mode) @@ -68,16 +69,24 @@ function! wordy#jump(mode) " mode=-1 prev in ring let l:avail_count = len(g:wordy#ring) if l:avail_count == 0 | return | endif - if g:wordy_ring_index < 0 - " ring navigation not initialized; start at begin or end - let g:wordy_ring_index = - \ a:mode == 1 - \ ? 0 - \ : (l:avail_count - 1) + " if -1, ring navigation not initialized; start at begin or end + " Example with avail_count=3 + " ((-1 + 3 + 1 + 2) % 4) - 1 => 0 + " (( 0 + 3 + 1 + 2) % 4) - 1 => 1 + " (( 1 + 3 + 1 + 2) % 4) - 1 => 2 + " (( 2 + 3 + 1 + 2) % 4) - 1 => -1 NoWordy + " ((-1 + 3 - 1 + 2) % 4) - 1 => 2 + " (( 0 + 3 - 1 + 2) % 4) - 1 => -1 NoWordy + " (( 1 + 3 - 1 + 2) % 4) - 1 => 0 + " (( 2 + 3 - 1 + 2) % 4) - 1 => 1 + let g:wordy_ring_index = + \ ((g:wordy_ring_index + l:avail_count + a:mode + 2) + \ % (l:avail_count + 1)) - 1 + if g:wordy_ring_index == -1 + call wordy#init({}) " NoWordy else - let g:wordy_ring_index = (g:wordy_ring_index + l:avail_count + a:mode) % l:avail_count + call wordy#init({ 'd': g:wordy#ring[ g:wordy_ring_index ]}) endif - call wordy#init({ 'd': g:wordy#ring[ g:wordy_ring_index ]}) endfunction " vim:ts=2:sw=2:sts=2