Skip to content

Commit a50f407

Browse files
committed
feat: include second arg for envs in foldtext
refer: #3247
1 parent f5c3746 commit a50f407

File tree

3 files changed

+42
-8
lines changed

3 files changed

+42
-8
lines changed

autoload/vimtex/fold/envs.vim

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ endfunction
1414
let s:folder = {
1515
\ 'name' : 'environments',
1616
\ 're' : {
17-
\ 'start' : g:vimtex#re#not_comment . '\\begin\s*\{.{-}\}',
18-
\ 'end' : g:vimtex#re#not_comment . '\\end\s*\{.{-}\}',
19-
\ 'name' : g:vimtex#re#not_comment . '\\%(begin|end)\s*\{\zs.{-}\ze\}'
17+
\ 'start' : g:vimtex#re#not_comment .. '\\begin\s*\{.{-}\}',
18+
\ 'end' : g:vimtex#re#not_comment .. '\\end\s*\{.{-}\}',
19+
\ 'name' : g:vimtex#re#not_comment
20+
\ .. '\\%(begin|end)\s*\{(.{-})\}(\s*\{.*\})?'
2021
\ },
2122
\ 'whitelist' : [],
2223
\ 'blacklist' : [],
@@ -46,7 +47,7 @@ endfunction
4647

4748
" }}}1
4849
function! s:folder.level(line, lnum) abort dict " {{{1
49-
let l:env = matchstr(a:line, self.re.name)
50+
let l:env = matchlist(a:line, self.re.name)[1]
5051

5152
if !empty(l:env) && self.validate(l:env)
5253
if a:line =~# self.re.start
@@ -63,7 +64,8 @@ endfunction
6364

6465
" }}}1
6566
function! s:folder.text(line, level) abort dict " {{{1
66-
let env = matchstr(a:line, self.re.name)
67+
let match = matchlist(a:line, self.re.name)
68+
let env = match[1]
6769
if !self.validate(env) | return | endif
6870

6971
" Set caption/label based on type of environment
@@ -84,7 +86,7 @@ function! s:folder.text(line, level) abort dict " {{{1
8486
" Always make room for the label
8587
let width_rhs = 0
8688
if !empty(label)
87-
let label = '(' . label . ')'
89+
let label = '(' .. label .. ')'
8890
let width_rhs += len(label)
8991
endif
9092

@@ -96,7 +98,7 @@ function! s:folder.text(line, level) abort dict " {{{1
9698
if len(env) > width_lhs - width_ind - 8
9799
let env = strpart(env, 0, width_lhs - width_ind - 8)
98100
endif
99-
let title = repeat(' ', width_ind) . '\begin{' . env . '}'
101+
let title = repeat(' ', width_ind) .. '\begin{' .. env .. '}' .. match[2]
100102

101103
" Add option group text
102104
if !empty(option)
@@ -116,7 +118,7 @@ function! s:folder.text(line, level) abort dict " {{{1
116118

117119
if width_available >= 5
118120
if strchars(caption) > width_available
119-
let caption = strpart(caption, 0, width_available - 1) . ''
121+
let caption = strpart(caption, 0, width_available - 1) .. ''
120122
endif
121123
let title .= caption
122124
endif

test/test-folding/test-envs.tex

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
\documentclass{article}
2+
\begin{document}
3+
4+
Hello World
5+
6+
\begin{foo}{bar}
7+
8+
\end{foo}
9+
10+
\end{document}

test/test-folding/test-envs.vim

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
set nocompatible
2+
let &rtp = '../..,' . &rtp
3+
filetype plugin on
4+
5+
set fillchars=fold:\
6+
set number
7+
set foldcolumn=4
8+
9+
nnoremap q :qall!<cr>
10+
11+
call vimtex#log#set_silent()
12+
13+
let g:vimtex_fold_enabled = 1
14+
15+
silent edit test-envs.tex
16+
17+
if empty($INMAKE) | finish | endif
18+
19+
call assert_equal(1, foldlevel(7))
20+
call assert_match('\\begin{foo}{bar}', foldtextresult(6))
21+
22+
call vimtex#test#finished()

0 commit comments

Comments
 (0)