From 4d73dfda9852deec732f84ce98f48137ab8efac1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Yngve=20Lerv=C3=A5g?= Date: Wed, 23 Oct 2013 20:47:03 +0200 Subject: [PATCH] Fixed bug where toc did not find input file --- ftplugin/latextoc.vim | 158 ++++++++++++++++++++++++------------------ 1 file changed, 91 insertions(+), 67 deletions(-) diff --git a/ftplugin/latextoc.vim b/ftplugin/latextoc.vim index 918c539..cde6565 100644 --- a/ftplugin/latextoc.vim +++ b/ftplugin/latextoc.vim @@ -23,9 +23,9 @@ setlocal tabstop=8 setlocal cole=0 setlocal cocu=nvic if g:latex_toc_fold - setlocal foldmethod=expr - setlocal foldexpr=toc#fold(v:lnum) - setlocal foldtext=toc#fold_tex() + setlocal foldmethod=expr + setlocal foldexpr=toc#fold(v:lnum) + setlocal foldtext=toc#fold_tex() endif " Define mappings @@ -44,90 +44,114 @@ nnoremap <2-leftmouse> :call toc_activate(1) " {{{1 s:toc_activate function! s:toc_activate(close) - let n = getpos('.')[1] - 1 + let n = getpos('.')[1] - 1 - if n >= len(b:toc) - return + if n >= len(b:toc) + return + endif + + let entry = b:toc[n] + + let titlestr = s:toc_escape_title(entry['text']) + + " Search for duplicates + let i=0 + let entry_hash = entry['level'].titlestr + let duplicates = 0 + while i 0 - if search('\\' . entry['level'] . '\_\s*{' . titlestr . '}', 'ws') - let duplicates -= 1 - endif - endwhile - - if search('\\' . entry['level'] . '\_\s*{' . titlestr . '}', 'ws') - normal! zv - endif - - if a:close - if g:latex_toc_resize - silent exe "set columns-=" . g:latex_toc_width - endif - execute 'bwipeout ' . toc_bnr - else - execute toc_wnr . 'wincmd w' + if a:close + if g:latex_toc_resize + silent exe "set columns-=" . g:latex_toc_width endif + execute 'bwipeout ' . toc_bnr + else + execute toc_wnr . 'wincmd w' + endif endfunction " {{{1 s:toc_close function! s:toc_close() - if g:latex_toc_resize - silent exe "set columns-=" . g:latex_toc_width - endif - bwipeout + if g:latex_toc_resize + silent exe "set columns-=" . g:latex_toc_width + endif + bwipeout endfunction " {{{1 s:toc_escape_title function! s:toc_escape_title(titlestr) - " Credit goes to Marcin Szamotulski for the following fix. It allows to - " match through commands added by TeX. + " Credit goes to Marcin Szamotulski for the following fix. It allows to + " match through commands added by TeX. + + let titlestr = substitute(a:titlestr, '\\\w*\>\s*\%({[^}]*}\)\?', '.*', 'g') + let titlestr = escape(titlestr, '\') + return substitute(titlestr, ' ', '\\_\\s\\+', 'g') +endfunction + +" {{{1 s:toc_find_match +function! s:toc_find_match(strsearch,duplicates,files) + + call s:toc_open_buf(a:files[0]) + let dups = a:duplicates + + " Skip duplicates + while dups > 0 + if search(a:strsearch, 'w') + let dups -= 1 + else + break + endif + endwhile + + if search(a:strsearch, 'w') + normal! zv + return + endif + + call s:toc_find_match(a:strsearch,dups,a:files[1:]) + +endfunction + +" {{{1 s:toc_open_buf +function! s:toc_open_buf(file) + + let bnr = bufnr(a:file) + if bnr == -1 + execute 'badd ' . a:file + let bnr = bufnr(a:file) + endif + execute 'buffer! ' . bnr - let titlestr = substitute(a:titlestr, '\\\w*\>\s*\%({[^}]*}\)\?', '.*', 'g') - let titlestr = escape(titlestr, '\') - return substitute(titlestr, ' ', '\\_\\s\\+', 'g') endfunction " {{{1 s:toc_toggle_numbers function! s:toc_toggle_numbers() - if b:toc_numbers - setlocal conceallevel=3 - let b:toc_numbers = 0 - else - setlocal conceallevel=0 - let b:toc_numbers = 1 - endif + if b:toc_numbers + setlocal conceallevel=3 + let b:toc_numbers = 0 + else + setlocal conceallevel=0 + let b:toc_numbers = 1 + endif endfunction " }}}1