From 28787da1d1fbc5efcb9e382af87af15ce66e8996 Mon Sep 17 00:00:00 2001 From: Bjoern Klaas Date: Thu, 15 Oct 2020 09:56:09 +0200 Subject: [PATCH 1/3] find comments after optional [.*] at \begin{frame} --- autoload/vimtex/fold/envs.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/vimtex/fold/envs.vim b/autoload/vimtex/fold/envs.vim index 143bfdd163..c040d64a05 100644 --- a/autoload/vimtex/fold/envs.vim +++ b/autoload/vimtex/fold/envs.vim @@ -178,7 +178,7 @@ function! s:folder.parse_caption_frame(line) abort dict " {{{1 endwhile " If no caption found, check for a caption comment - return matchstr(a:line,'\\begin\*\?{.*}\s*%\s*\zs.*') + return matchstr(a:line,'\\begin\*\?{.*}\(\[.*\]\)\?\s*%\s*\zs.*') endfunction " }}}1 From 52c2cdcb7659e749b8145b3f7a143d96beb0972e Mon Sep 17 00:00:00 2001 From: Bjoern Klaas Date: Thu, 15 Oct 2020 09:58:50 +0200 Subject: [PATCH 2/3] show frametitle and framesubtitle on folds --- autoload/vimtex/fold/envs.vim | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/autoload/vimtex/fold/envs.vim b/autoload/vimtex/fold/envs.vim index c040d64a05..c68cc3b0d7 100644 --- a/autoload/vimtex/fold/envs.vim +++ b/autoload/vimtex/fold/envs.vim @@ -171,8 +171,14 @@ function! s:folder.parse_caption_frame(line) abort dict " {{{1 let i = v:foldstart while i <= v:foldend if getline(i) =~# '^\s*\\frametitle' - return matchstr(getline(i), + let frametitle = matchstr(getline(i), \ '^\s*\\frametitle\(\[.*\]\)\?{\zs.\{-1,}\ze\(}\s*\)\?$') + if i+1 <= v:foldend && getline(i+1) =~# '^\s*\\framesubtitle' + let framesubtitle = matchstr(getline(i+1), + \ '^\s*\\framesubtitle\(\[.*\]\)\?{\zs.\{-1,}\ze\(}\s*\)\?$') + return printf('%S: %S', frametitle, framesubtitle) + end + return frametitle end let i += 1 endwhile From b51ea215fc0bafb32ab7f12dd47affdda3b8ac83 Mon Sep 17 00:00:00 2001 From: Bjoern Klaas Date: Mon, 8 Feb 2021 00:21:58 +0100 Subject: [PATCH 3/3] add a test for beamer frame folding --- test/test-folding/main.tex | 13 +++++++++++++ test/test-folding/test.vim | 9 +++++++++ 2 files changed, 22 insertions(+) diff --git a/test/test-folding/main.tex b/test/test-folding/main.tex index 103dfcc2df..29f1aa0886 100644 --- a/test/test-folding/main.tex +++ b/test/test-folding/main.tex @@ -201,4 +201,17 @@ \section{test 3} \end{proof} \end{enumerate} +% The frames need to be in this order for the test to pass. This is likely a +% bug in vim, see https://github.com/lervag/vimtex/pull/1830#issuecomment-775527621 +\begin{frame} + \frametitle{Title} + \framesubtitle{Subtitle} + + hello world +\end{frame} + +\begin{frame}[noframenumbering] % Title page + hello world +\end{frame} + \end{document} diff --git a/test/test-folding/test.vim b/test/test-folding/test.vim index f0ce67731f..2946b79e80 100644 --- a/test/test-folding/test.vim +++ b/test/test-folding/test.vim @@ -56,6 +56,15 @@ call vimtex#test#assert_equal(3, foldlevel(186)) call vimtex#test#assert_equal(1, foldlevel(190)) call vimtex#test#assert_equal(2, foldlevel(202)) +call vimtex#test#assert_equal(2, foldlevel(206)) +call vimtex#test#assert_equal( + \ '\begin{frame} Title: Subtitle', + \ foldtextresult(206)) +call vimtex#test#assert_equal(2, foldlevel(213)) +call vimtex#test#assert_equal( + \ '\begin{frame} Title page', + \ foldtextresult(213)) + call vimtex#test#assert_equal(1, foldlevel(line('$')-1)) quit!