]> git.r.bdr.sh - rbdr/dotfiles/blame - vim/autoload/Pl/Mod.vim
Add simplified modules
[rbdr/dotfiles] / vim / autoload / Pl / Mod.vim
CommitLineData
321ecaca
BB
1let s:segment_mods = []
2
3function! Pl#Mod#AddSegmentMod(action, properties) " {{{
4 call add(s:segment_mods, [a:action, a:properties])
5endfunction " }}}
6function! Pl#Mod#ApplySegmentMods(theme) " {{{
7 let theme = deepcopy(a:theme)
8
9 for mod in s:segment_mods
10 let [action, properties] = mod
11
12 " We have to loop through the segments instead of using index() because some
13 " segments are lists!
14 let target_seg_idx = -1
15
16 for i in range(0, len(theme) - 1)
17 unlet! segment
18 let segment = theme[i]
19
20 if type(segment) == type(properties.target_segment) && segment == properties.target_segment
21 let target_seg_idx = i
22 break
23 endif
24 endfor
25
26 if action == 'insert_segment'
27 " Insert segment
28 if target_seg_idx != -1
29 call insert(theme, properties.new_segment, (properties.where == 'before' ? target_seg_idx : target_seg_idx + 1))
30 endif
31 elseif action == 'remove_segment'
32 " Remove segment
33 if target_seg_idx != -1
34 call remove(theme, target_seg_idx)
35 endif
36 endif
37 endfor
38
39 return theme
40endfunction " }}}