annotate autoload/lawrencium/diff.vim @ 141:4d5f4233b04e

Only set `v:errmsg` for real errors, not exceptions.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 07 Dec 2016 21:33:18 -0800
parents 065625e1bb31
children 5e72afea669c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
139
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 function! lawrencium#diff#init() abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 call lawrencium#add_command("-nargs=* Hgdiff :call lawrencium#diff#HgDiff('%:p', 0, <f-args>)")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 call lawrencium#add_command("-nargs=* Hgvdiff :call lawrencium#diff#HgDiff('%:p', 1, <f-args>)")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 call lawrencium#add_command("-nargs=* Hgtabdiff :call lawrencium#diff#HgDiff('%:p', 2, <f-args>)")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 call lawrencium#add_command("-nargs=* Hgdiffsum :call lawrencium#diff#HgDiffSummary('%:p', 0, <f-args>)")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 call lawrencium#add_command("-nargs=* Hgdiffsumsplit :call lawrencium#diff#HgDiffSummary('%:p', 1, <f-args>)")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 call lawrencium#add_command("-nargs=* Hgvdiffsumsplit :call lawrencium#diff#HgDiffSummary('%:p', 2, <f-args>)")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 call lawrencium#add_command("-nargs=* Hgtabdiffsum :call lawrencium#diff#HgDiffSummary('%:p', 3, <f-args>)")
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 call lawrencium#add_reader('diff', 'lawrencium#diff#read')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 function! lawrencium#diff#read(repo, path_parts, full_path) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 let l:diffargs = []
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 let l:commaidx = stridx(a:path_parts['value'], ',')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 if l:commaidx > 0
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 let l:rev1 = strpart(a:path_parts['value'], 0, l:commaidx)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 let l:rev2 = strpart(a:path_parts['value'], l:commaidx + 1)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 if l:rev1 == '-'
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 let l:diffargs = [ '-r', l:rev2 ]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 elseif l:rev2 == '-'
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 let l:diffargs = [ '-r', l:rev1 ]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 let l:diffargs = [ '-r', l:rev1, '-r', l:rev2 ]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 elseif a:path_parts['value'] != ''
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 let l:diffargs = [ '-c', a:path_parts['value'] ]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 let l:diffargs = []
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 if a:path_parts['path'] != '' && a:path_parts['path'] != '.'
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 call add(l:diffargs, a:full_path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36 call a:repo.ReadCommandOutput('diff', l:diffargs)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 setlocal filetype=diff
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 setlocal nofoldenable
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 function! lawrencium#diff#HgDiff(filename, split, ...) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42 " Default revisions to diff: the working directory (null string)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 " and the parent of the working directory (using Mercurial's revsets syntax).
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 " Otherwise, use the 1 or 2 revisions specified as extra parameters.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45 let l:rev1 = 'p1()'
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 let l:rev2 = ''
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 if a:0 == 1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 if type(a:1) == type([])
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 if len(a:1) >= 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 let l:rev1 = a:1[0]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51 let l:rev2 = a:1[1]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 elseif len(a:1) == 1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 let l:rev1 = a:1[0]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 let l:rev1 = a:1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 elseif a:0 == 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 let l:rev1 = a:1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 let l:rev2 = a:2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 " Get the current repo, and expand the given filename in case it contains
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 " fancy filename modifiers.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 let l:repo = lawrencium#hg_repo()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 let l:path = expand(a:filename)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67 let l:diff_id = localtime()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 call lawrencium#trace("Diff'ing '".l:rev1."' and '".l:rev2."' on file: ".l:path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 " Get the first file and open it.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71 let l:cleanupbufnr = -1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72 if l:rev1 == ''
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73 if a:split == 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74 " Don't use `tabedit` here because if `l:path` is the same as
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75 " the current path, it will also reload the buffer in the current
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76 " tab/window for some reason, which causes all state to be lost
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77 " (all folds get collapsed again, cursor is moved to start, etc.)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
78 tabnew
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79 let l:cleanupbufnr = bufnr('%')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80 execute 'edit ' . fnameescape(l:path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
81 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82 if bufexists(l:path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83 execute 'buffer ' . fnameescape(l:path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85 execute 'edit ' . fnameescape(l:path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 " Make it part of the diff group.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 call s:HgDiff_DiffThis(l:diff_id)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
90 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
91 let l:rev_path = l:repo.GetLawrenciumPath(l:path, 'rev', l:rev1)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
92 if a:split == 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
93 " See comments above about avoiding `tabedit`.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94 tabnew
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
95 let l:cleanupbufnr = bufnr('%')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97 execute 'edit ' . fnameescape(l:rev_path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 " Make it part of the diff group.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99 call s:HgDiff_DiffThis(l:diff_id)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101 if l:cleanupbufnr >= 0 && bufloaded(l:cleanupbufnr)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102 execute 'bdelete ' . l:cleanupbufnr
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
105 " Get the second file and open it too.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
106 " Don't use `diffsplit` because it will set `&diff` before we get a chance
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107 " to save a bunch of local settings that we will want to restore later.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
108 let l:diffsplit = 'split'
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
109 if a:split >= 1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
110 let l:diffsplit = 'vsplit'
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
111 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
112 if l:rev2 == ''
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
113 execute l:diffsplit . ' ' . fnameescape(l:path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
114 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
115 let l:rev_path = l:repo.GetLawrenciumPath(l:path, 'rev', l:rev2)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116 execute l:diffsplit . ' ' . fnameescape(l:rev_path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
117 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
118 call s:HgDiff_DiffThis(l:diff_id)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
120
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
121 function! lawrencium#diff#HgDiffThis(diff_id)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
122 call s:HgDiff_DiffThis(a:diff_id)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
123 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
124
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
125 function! s:HgDiff_DiffThis(diff_id) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
126 " Store some commands to run when we exit diff mode.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
127 " It's needed because `diffoff` reverts those settings to their default
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
128 " values, instead of their previous ones.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
129 if &diff
141
4d5f4233b04e Only set `v:errmsg` for real errors, not exceptions.
Ludovic Chabant <ludovic@chabant.com>
parents: 139
diff changeset
130 call lawrencium#throwerr("Calling diffthis too late on a buffer!")
139
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
131 return
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
132 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
133 call lawrencium#trace('Enabling diff mode on ' . bufname('%'))
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
134 let w:lawrencium_diffoff = {}
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
135 let w:lawrencium_diffoff['&diff'] = 0
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
136 let w:lawrencium_diffoff['&wrap'] = &l:wrap
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
137 let w:lawrencium_diffoff['&scrollopt'] = &l:scrollopt
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
138 let w:lawrencium_diffoff['&scrollbind'] = &l:scrollbind
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
139 let w:lawrencium_diffoff['&cursorbind'] = &l:cursorbind
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
140 let w:lawrencium_diffoff['&foldmethod'] = &l:foldmethod
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
141 let w:lawrencium_diffoff['&foldcolumn'] = &l:foldcolumn
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
142 let w:lawrencium_diffoff['&foldenable'] = &l:foldenable
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
143 let w:lawrencium_diff_id = a:diff_id
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
144 diffthis
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
145 autocmd BufWinLeave <buffer> call s:HgDiff_CleanUp()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
146 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
147
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
148 function! s:HgDiff_DiffOff(...) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
149 " Get the window name (given as a paramter, or current window).
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
150 let l:nr = a:0 ? a:1 : winnr()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
151
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
152 " Run the commands we saved in `HgDiff_DiffThis`, or just run `diffoff`.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
153 let l:backup = getwinvar(l:nr, 'lawrencium_diffoff')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
154 if type(l:backup) == type({}) && len(l:backup) > 0
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
155 call lawrencium#trace('Disabling diff mode on ' . l:nr)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
156 for key in keys(l:backup)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
157 call setwinvar(l:nr, key, l:backup[key])
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
158 endfor
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
159 call setwinvar(l:nr, 'lawrencium_diffoff', {})
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
160 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
161 call lawrencium#trace('Disabling diff mode on ' . l:nr . ' (but no true restore)')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
162 diffoff
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
163 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
164 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
165
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
166 function! s:HgDiff_GetDiffWindows(diff_id) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
167 let l:result = []
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
168 for nr in range(1, winnr('$'))
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
169 if getwinvar(nr, '&diff') && getwinvar(nr, 'lawrencium_diff_id') == a:diff_id
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
170 call add(l:result, nr)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
171 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
172 endfor
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
173 return l:result
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
174 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
175
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
176 function! s:HgDiff_CleanUp() abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
177 " If we're not leaving one of our diff window, do nothing.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
178 if !&diff || !exists('w:lawrencium_diff_id')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
179 return
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
180 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
181
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
182 " If there will be only one diff window left (plus the one we're leaving),
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
183 " turn off diff in it and restore its local settings.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
184 let l:nrs = s:HgDiff_GetDiffWindows(w:lawrencium_diff_id)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
185 if len(l:nrs) <= 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
186 call lawrencium#trace('Disabling diff mode in ' . len(l:nrs) . ' windows.')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
187 for nr in l:nrs
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
188 if getwinvar(nr, '&diff')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
189 call s:HgDiff_DiffOff(nr)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
190 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
191 endfor
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
192 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
193 call lawrencium#trace('Still ' . len(l:nrs) . ' diff windows open.')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
194 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
195 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
196
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
197 function! lawrencium#diff#HgDiffSummary(filename, present_args, ...) abort
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
198 " Default revisions to diff: the working directory (null string)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
199 " and the parent of the working directory (using Mercurial's revsets syntax).
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
200 " Otherwise, use the 1 or 2 revisions specified as extra parameters.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
201 let l:revs = ''
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
202 if a:0 == 1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
203 if type(a:1) == type([])
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
204 if len(a:1) >= 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
205 let l:revs = a:1[0] . ',' . a:1[1]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
206 elseif len(a:1) == 1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
207 let l:revs = a:1[0]
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
208 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
209 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
210 let l:revs = a:1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
211 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
212 elseif a:0 >= 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
213 let l:revs = a:1 . ',' . a:2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
214 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
215
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
216 " Get the current repo, and expand the given filename in case it contains
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
217 " fancy filename modifiers.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
218 let l:repo = lawrencium#hg_repo()
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
219 let l:path = expand(a:filename)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
220 call lawrencium#trace("Diff'ing revisions: '".l:revs."' on file: ".l:path)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
221 let l:special = l:repo.GetLawrenciumPath(l:path, 'diff', l:revs)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
222
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
223 " Build the correct edit command, and switch to the correct window, based
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
224 " on the presentation arguments we got.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
225 if type(a:present_args) == type(0)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
226 " Just got a split mode.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
227 let l:valid_args = {'split_mode': a:present_args}
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
228 else
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
229 " Got complex args.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
230 let l:valid_args = a:present_args
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
231 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
232
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
233 " First, see if we should reuse an existing window based on some buffer
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
234 " variable.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
235 let l:target_winnr = -1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
236 let l:split = get(l:valid_args, 'split_mode', 0)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
237 let l:reuse_id = get(l:valid_args, 'reuse_id', '')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
238 let l:avoid_id = get(l:valid_args, 'avoid_win', -1)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
239 if l:reuse_id != ''
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
240 let l:target_winnr = lawrencium#find_buffer_window(l:reuse_id, 1)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
241 if l:target_winnr > 0 && l:split != 3
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
242 " Unless we'll be opening in a new tab, don't split anymore, since
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
243 " we found the exact window we wanted.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
244 let l:split = 0
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
245 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
246 call lawrencium#trace("Looking for window with '".l:reuse_id."', found: ".l:target_winnr)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
247 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
248 " If we didn't find anything, see if we should use the current or previous
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
249 " window.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
250 if l:target_winnr <= 0
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
251 let l:use_prev_win = get(l:valid_args, 'use_prev_win', 0)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
252 if l:use_prev_win
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
253 let l:target_winnr = winnr('#')
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
254 call lawrencium#trace("Will use previous window: ".l:target_winnr)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
255 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
256 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
257 " And let's see if we have a window we should actually avoid.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
258 if l:avoid_id >= 0 &&
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
259 \(l:target_winnr == l:avoid_id ||
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
260 \(l:target_winnr <= 0 && winnr() == l:avoid_id))
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
261 for wnr in range(1, winnr('$'))
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
262 if wnr != l:avoid_id
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
263 call lawrencium#trace("Avoiding using window ".l:avoid_id.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
264 \", now using: ".wnr)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
265 let l:target_winnr = wnr
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
266 break
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
267 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
268 endfor
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
269 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
270 " Now let's see what kind of split we want to use, if any.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
271 let l:cmd = 'edit '
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
272 if l:split == 1
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
273 let l:cmd = 'rightbelow split '
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
274 elseif l:split == 2
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
275 let l:cmd = 'rightbelow vsplit '
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
276 elseif l:split == 3
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
277 let l:cmd = 'tabedit '
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
278 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
279
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
280 " All good now, proceed.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
281 if l:target_winnr > 0
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
282 execute l:target_winnr . "wincmd w"
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
283 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
284 execute 'keepalt ' . l:cmd . fnameescape(l:special)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
285
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
286 " Set the reuse ID if we had one.
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
287 if l:reuse_id != ''
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
288 call lawrencium#trace("Setting reuse ID '".l:reuse_id."' on buffer: ".bufnr('%'))
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
289 call setbufvar('%', l:reuse_id, 1)
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
290 endif
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
291 endfunction
065625e1bb31 Split plugin file into multiple extensions.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
292