1624
|
1 " Vim filetype plugin file (GUI menu and folding)
|
2152
|
2 " Language: Debian control files
|
13231
|
3 " Maintainer: Debian Vim Maintainers
|
2152
|
4 " Former Maintainer: Pierre Habouzit <madcoder@debian.org>
|
13857
|
5 " Last Change: 2018-01-28
|
13231
|
6 " URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/ftplugin/debcontrol.vim
|
1624
|
7
|
|
8 " Do these settings once per buffer
|
13857
|
9 if exists('b:did_ftplugin')
|
1624
|
10 finish
|
|
11 endif
|
|
12 let b:did_ftplugin=1
|
|
13
|
|
14 " {{{1 Local settings (do on every load)
|
13857
|
15 if exists('g:debcontrol_fold_enable')
|
1624
|
16 setlocal foldmethod=expr
|
|
17 setlocal foldexpr=DebControlFold(v:lnum)
|
|
18 setlocal foldtext=DebControlFoldText()
|
|
19 endif
|
|
20 setlocal textwidth=0
|
|
21
|
|
22 " Clean unloading
|
13857
|
23 let b:undo_ftplugin = 'setlocal tw< foldmethod< foldexpr< foldtext<'
|
1624
|
24
|
|
25 " }}}1
|
|
26
|
|
27 " {{{1 folding
|
|
28
|
|
29 function! s:getField(f, lnum)
|
|
30 let line = getline(a:lnum)
|
|
31 let fwdsteps = 0
|
|
32 while line !~ '^'.a:f.':'
|
|
33 let fwdsteps += 1
|
|
34 let line = getline(a:lnum + fwdsteps)
|
13857
|
35 if line ==# ''
|
1624
|
36 return 'unknown'
|
|
37 endif
|
|
38 endwhile
|
|
39 return substitute(line, '^'.a:f.': *', '', '')
|
|
40 endfunction
|
|
41
|
|
42 function! DebControlFoldText()
|
13857
|
43 if v:folddashes ==# '-' " debcontrol entry fold
|
1624
|
44 let type = substitute(getline(v:foldstart), ':.*', '', '')
|
13857
|
45 if type ==# 'Source'
|
1624
|
46 let ftext = substitute(foldtext(), ' *Source: *', ' ', '')
|
|
47 return ftext . ' -- ' . s:getField('Maintainer', v:foldstart) . ' '
|
|
48 endif
|
|
49 let arch = s:getField('Architecture', v:foldstart)
|
|
50 let ftext = substitute(foldtext(), ' *Package: *', ' [' . arch . '] ', '')
|
|
51 return ftext . ': ' . s:getField('Description', v:foldstart) . ' '
|
|
52 endif
|
|
53 return foldtext()
|
|
54 endfunction
|
|
55
|
|
56 function! DebControlFold(l)
|
|
57
|
|
58 " This is for not merging blank lines around folds to them
|
13857
|
59 if getline(a:l) =~# '^Source:'
|
1624
|
60 return '>1'
|
|
61 endif
|
|
62
|
13857
|
63 if getline(a:l) =~# '^Package:'
|
1624
|
64 return '>1'
|
|
65 endif
|
|
66
|
|
67 return '='
|
|
68 endfunction
|
|
69
|
|
70 " }}}1
|