Added Perforce plugin.
[profile.git] / .vim / perforce / perforcemenu.vim
1 " perforcemenu.vim: Create a menu for perforce plugin.
2 " Author: Hari Krishna (hari_vim at yahoo dot com)
3 " Last Change: 28-Aug-2006 @ 22:50
4 " Created:     07-Nov-2003
5 " Requires:    Vim-6.2, perforce.vim(4.0)
6 " Version:     2.1.0
7 " Licence: This program is free software; you can redistribute it and/or
8 "          modify it under the terms of the GNU General Public License.
9 "          See http://www.gnu.org/copyleft/gpl.txt 
10
11 if !exists("loaded_perforce")
12   runtime plugin/perforce.vim
13 endif
14 if !exists("loaded_perforce") || loaded_perforce < 400
15   echomsg "perforcemenu: You need a newer version of perforce.vim plugin"
16   finish
17 endif
18
19 " Make sure line-continuations won't cause any problem. This will be restored
20 "   at the end
21 let s:save_cpo = &cpo
22 set cpo&vim
23
24 function! s:Get(setting, ...)
25   if exists('g:p4'.a:setting)
26     return g:p4{a:setting}
27   endif
28
29   if exists('*perforce#PFCall')
30     let val = perforce#PFCall('s:_', a:setting)
31     if val == '' && a:0 > 0
32       let val = a:1
33     endif
34     return val
35   endif
36   return 0
37 endfunction
38
39 function! s:PFExecCmd(cmd) " {{{
40   if exists(':'.a:cmd) == 2
41     exec a:cmd
42   else
43     call perforce#PFCall("s:EchoMessage", 'The command: ' . a:cmd .
44           \ ' is not defined for this buffer.', 'WarningMsg')
45   endif
46 endfunction
47 command! -nargs=1 PFExecCmd :call <SID>PFExecCmd(<q-args>) " }}}
48 let s:loaded_perforcemenu = 1
49
50 " CreateMenu {{{
51 if s:Get('EnableMenu') || s:Get('EnablePopupMenu') " [-2f]
52 function! s:CreateMenu(sub, expanded)
53   if ! a:expanded
54     let fileGroup = '.'
55   else
56     let fileGroup = '.&File.'
57   endif
58   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . '&Add :PAdd<CR>'
59   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . 'S&ync :PSync<CR>'
60   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . '&Edit :PEdit<CR>'
61   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . '-Sep1- :'
62   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup .
63         \ '&Delete :PDelete<CR>'
64   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . '&Revert :PRevert<CR>'
65   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . '-Sep2- :'
66   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . 'Loc&k :PLock<CR>'
67   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup .
68         \ 'U&nlock :PUnlock<CR>'
69   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . '-Sep3- :'
70   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . '&Diff :PDiff<CR>'
71   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . 'Diff&2 :PDiff2<CR>'
72   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup .
73         \ 'Revision\ &History :PFilelog<CR>'
74   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . 'Propert&ies ' .
75         \ ':PFstat -C<CR>'
76   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . '&Print :PPrint<CR>'
77   exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . '-Sep4- :'
78   if a:expanded
79     exec 'amenu <silent> ' . a:sub . '&Perforce.&File.' .
80           \ 'Resol&ve.Accept\ &Their\ Changes<Tab>resolve\ -at ' .
81           \ ':PResolve -at<CR>'
82     exec 'amenu <silent> ' . a:sub . '&Perforce.&File.' .
83           \ 'Resol&ve.Accept\ &Your\ Changes<Tab>resolve\ -ay :PResolve -ay<CR>'
84     exec 'amenu <silent> ' . a:sub . '&Perforce.&File.' .
85           \ 'Resol&ve.&Automatic\ Resolve<Tab>resolve\ -am :PResolve -am<CR>'
86     exec 'amenu <silent> ' . a:sub . '&Perforce.&File.' .
87           \ 'Resol&ve.&Safe\ Resolve<Tab>resolve\ -as :PResolve -as<CR>'
88     exec 'amenu <silent> ' . a:sub . '&Perforce.&File.' .
89           \ 'Resol&ve.&Force\ Resolve<Tab>resolve\ -af :PResolve -af<CR>'
90     exec 'amenu <silent> ' . a:sub . '&Perforce.&File.' .
91           \ 'Resol&ve.S&how\ Integrations<Tab>resolve\ -n :PResolve -n<CR>'
92     exec 'amenu <silent> ' . a:sub . '&Perforce.&File.-Sep5- :'
93     exec 'amenu <silent> ' . a:sub . '&Perforce.&File.Sa&ve\ Current\ Spec ' .
94           \':PFExecCmd W<CR>'
95     exec 'amenu <silent> ' . a:sub . '&Perforce.&File.Save\ and\ &Quit\ ' .
96           \'Current\ Spec :PFExecCmd WQ<CR>'
97   endif
98
99   if ! a:expanded
100     exec 'amenu <silent> ' . a:sub . '&Perforce.&Opened\ Files :POpened<CR>'
101     exec 'amenu <silent> ' . a:sub . '&Perforce.&Refresh\ Active\ Pane ' .
102           \ ':PRefreshActivePane<CR>'
103     exec 'amenu <silent> ' . a:sub . '&Perforce.-Sep6- :'
104   else
105     exec 'amenu <silent> ' . a:sub .
106           \ '&Perforce.&View.&BranchSpecs :PBranches<CR>'
107     exec 'amenu <silent> ' . a:sub . '&Perforce.&View.&Changelist.' .
108           \ '&Pending\ Changelists :PChanges -s pending<CR>'
109     exec 'amenu <silent> ' . a:sub . '&Perforce.&View.&Changelist.' .
110           \ '&Submitted\ Changelists :PChanges -s submitted<CR>'
111     exec 'amenu <silent> ' . a:sub .
112           \ '&Perforce.&View.Cl&ientSpecs :PClients<CR>'
113     exec 'amenu <silent> ' . a:sub . '&Perforce.&View.&Jobs :PJobs<CR>'
114     exec 'amenu <silent> ' . a:sub . '&Perforce.&View.&Labels :PLabels<CR>'
115     exec 'amenu <silent> ' . a:sub . '&Perforce.&View.&Users :PUsers<CR>'
116     exec 'amenu <silent> ' . a:sub . '&Perforce.&View.&Depots :PDepots<CR>'
117     exec 'amenu <silent> ' . a:sub . '&Perforce.&View.&Opened\ Files :POpened<CR>'
118     exec 'amenu <silent> ' . a:sub . '&Perforce.&View.&Refresh\ Active\ Pane ' .
119           \ ':PRefreshActivePane<CR>'
120   endif
121
122   if a:expanded
123     exec 'amenu <silent> ' . a:sub . '&Perforce.&Settings.' .
124           \ '&Switch\ Port\ Client\ User '.
125           \ ':call perforce#PFCall("s:SwitchPortClientUser")<CR>'
126     let p4Presets = split(perforce#PFGet('s:p4Presets'), ',')
127     if len(p4Presets) > 0
128       let index = 0
129       while index < len(p4Presets)
130         exec 'amenu <silent>' a:sub.'&Perforce.&Settings.&'.index.'\ '
131               \ .escape(p4Presets[index], ' .') ':PFSwitch' index.'<CR>'
132         let index = index + 1
133       endwhile
134     endif
135   endif
136
137   if ! a:expanded
138     exec 'amenu <silent> ' . a:sub .
139           \ '&Perforce.New\ &Submission\ Template :PSubmit<CR>'
140   else
141     exec 'amenu <silent> ' . a:sub . '&Perforce.&Changelist.&New :PChange<CR>'
142     exec 'amenu <silent> ' . a:sub . '&Perforce.&Changelist.' .
143           \ '&Edit\ Current\ Changelist :PFExecCmd PItemOpen<CR>'
144     exec 'amenu <silent> ' . a:sub . '&Perforce.&Changelist.' .
145           \ 'Descri&be\ Current\ Changelist :PFExecCmd PItemDescribe<CR>'
146     exec 'amenu <silent> ' . a:sub . '&Perforce.&Changelist.' .
147           \ '&Delete\ Current\ Changelist :PFExecCmd PItemDelete<CR>'
148     exec 'amenu <silent> ' . a:sub . '&Perforce.&Changelist.' .
149           \ 'New\ &Submission\ Template :PSubmit<CR>'
150     exec 'amenu <silent> ' . a:sub . '&Perforce.&Changelist.-Sep- :'
151     exec 'amenu <silent> ' . a:sub . '&Perforce.&Changelist.' .
152           \ 'View\ &Pending\ Changelists :PChanges -s pending<CR>'
153     exec 'amenu <silent> ' . a:sub . '&Perforce.&Changelist.' .
154           \ '&View\ Submitted\ Changelists :PChanges -s submitted<CR>'
155   endif
156
157   if ! a:expanded
158     exec 'amenu <silent> ' . a:sub . '&Perforce.&Branch :PBranch<CR>'
159   else
160     exec 'amenu <silent> ' . a:sub . '&Perforce.&Branch.&New :PBranch<CR>'
161     exec 'amenu <silent> ' . a:sub . '&Perforce.&Branch.' .
162           \ '&Edit\ Current\ BranchSpec :PFExecCmd PItemOpen<CR>'
163     exec 'amenu <silent> ' . a:sub . '&Perforce.&Branch.' .
164           \ 'Descri&be\ Current\ BranchSpec :PFExecCmd PItemDescribe<CR>'
165     exec 'amenu <silent> ' . a:sub . '&Perforce.&Branch.' .
166           \ '&Delete\ Current\ BranchSpec :PFExecCmd PItemDelete<CR>'
167     exec 'amenu <silent> ' . a:sub . '&Perforce.&Branch.-Sep- :'
168     exec 'amenu <silent> ' . a:sub .
169           \ '&Perforce.&Branch.&View\ BranchSpecs :PBranches<CR>'
170   endif
171
172   if ! a:expanded
173     exec 'amenu <silent> ' . a:sub . '&Perforce.&Label :PLabel<CR>'
174   else
175     exec 'amenu <silent> ' . a:sub . '&Perforce.&Label.&New :PLabel<CR>'
176     exec 'amenu <silent> ' . a:sub . '&Perforce.&Label.' .
177           \ '&Edit\ Current\ LabelSpec :PFExecCmd PItemOpen<CR>'
178     exec 'amenu <silent> ' . a:sub . '&Perforce.&Label.' .
179           \ 'Descri&be\ Current\ LabelSpec :PFExecCmd PItemDescribe<CR>'
180     exec 'amenu <silent> ' . a:sub . '&Perforce.&Label.' .
181           \ '&Delete\ Current\ LabelSpec :PFExecCmd PItemDelete<CR>'
182     exec 'amenu <silent> ' . a:sub . '&Perforce.&Label.-Sep1- :'
183     exec 'amenu <silent> ' . a:sub . '&Perforce.&Label.' .
184           \ '&Sync\ Client\ ' . s:Get('Client') . '\ to\ Current\ Label ' .
185           \ ':PFExecCmd PLabelsSyncClient<CR>'
186     exec 'amenu <silent> ' . a:sub . '&Perforce.&Label.' .
187           \ '&Replace\ Files\ in\ Current\ Label\ with\ Client\ ' .
188           \ s:Get('Client') . '\ files ' . ':PFExecCmd PLabelsSyncLabel<CR>'
189     exec 'amenu <silent> ' . a:sub . '&Perforce.&Label.-Sep2- :'
190     exec 'amenu <silent> ' . a:sub .
191           \ '&Perforce.&Label.&View\ Labels :PLabels<CR>'
192   endif
193
194   if ! a:expanded
195     exec 'amenu <silent> ' . a:sub . '&Perforce.Cl&ient :PClient<CR>'
196   else
197     exec 'amenu <silent> ' . a:sub .
198           \ '&Perforce.Cl&ient.&New :PClient +P<CR>'
199     exec 'amenu <silent> ' . a:sub . '&Perforce.Cl&ient.' .
200           \ '&Edit\ Current\ ClientSpec :PFExecCmd PItemOpen<CR>'
201     exec 'amenu <silent> ' . a:sub . '&Perforce.Cl&ient.' .
202           \ 'Descri&be\ Current\ ClientSpec :PFExecCmd PItemDescribe<CR>'
203     exec 'amenu <silent> ' . a:sub . '&Perforce.Cl&ient.' .
204           \ '&Delete\ Current\ ClientSpec :PFExecCmd PItemDelete<CR>'
205     exec 'amenu <silent> ' . a:sub . '&Perforce.' .
206           \ 'Cl&ient.&Edit\ ' . escape(s:Get('Client', 'Current Client'), ' ') .
207           \ ' :PClient<CR>'
208     exec 'amenu <silent> ' . a:sub . '&Perforce.Cl&ient.-Sep- :'
209     exec 'amenu <silent> ' . a:sub . '&Perforce.Cl&ient.&Switch\ to\ Current' .
210           \ '\ Client :exec "PFSwitch ' . s:Get('Port') .
211           \ ' " . perforce#PFCall("s:GetCurrentItem")<CR>'
212     exec 'amenu <silent> ' . a:sub .
213           \ '&Perforce.Cl&ient.&View\ ClientSpecs :PClients<CR>'
214   endif
215
216   if ! a:expanded
217     exec 'amenu <silent> ' . a:sub . '&Perforce.&User :PUser<CR>'
218   else
219     exec 'amenu <silent> ' . a:sub .
220           \ '&Perforce.&User.&New :PUser +P<CR>'
221     exec 'amenu <silent> ' . a:sub . '&Perforce.&User.' .
222           \ '&Edit\ Current\ UserSpec :PFExecCmd PItemOpen<CR>'
223     exec 'amenu <silent> ' . a:sub . '&Perforce.&User.' .
224           \ 'Descri&be\ Current\ UserSpec :PFExecCmd PItemDescribe<CR>'
225     exec 'amenu <silent> ' . a:sub . '&Perforce.&User.' .
226           \ '&Delete\ Current\ UserSpec :PFExecCmd PItemDelete<CR>'
227     exec 'amenu <silent> ' . a:sub .
228           \ '&Perforce.&User.&Edit\ ' .
229           \ escape(s:Get('User', 'Current User'), ' ') . ' :PUser<CR>'
230     exec 'amenu <silent> ' . a:sub . '&Perforce.&User.-Sep- :'
231     exec 'amenu <silent> ' . a:sub . '&Perforce.&User.&Switch\ to\ Current' .
232           \ '\ User :exec "PFSwitch ' . s:Get('Port') . ' ' .
233           \ s:Get('Client') . ' " . perforce#PFCall("s:GetCurrentItem")<CR>'
234     exec 'amenu <silent> ' . a:sub .
235           \ '&Perforce.&User.&View\ Users :PUsers<CR>'
236   endif
237
238   if ! a:expanded
239     exec 'amenu <silent> ' . a:sub . '&Perforce.&Job :PJob<CR>'
240   else
241     exec 'amenu <silent> ' . a:sub . '&Perforce.&Job.&New :PJob<CR>'
242     exec 'amenu <silent> ' . a:sub . '&Perforce.&Job.' .
243           \ '&Edit\ Current\ JobSpec :PFExecCmd PItemOpen<CR>'
244     exec 'amenu <silent> ' . a:sub . '&Perforce.&Job.' .
245           \ 'Descri&be\ Current\ JobSpec :PFExecCmd PItemDescribe<CR>'
246     exec 'amenu <silent> ' . a:sub . '&Perforce.&Job.' .
247           \ '&Delete\ Current\ JobSpec :PFExecCmd PItemDelete<CR>'
248     exec 'amenu <silent> ' . a:sub . '&Perforce.&Job.-Sep1- :'
249     exec 'amenu <silent> ' . a:sub . '&Perforce.&Job.&Edit\ Job&Spec ' .
250           \ ':PJobspec<CR>'
251     exec 'amenu <silent> ' . a:sub . '&Perforce.&Job.-Sep2- :'
252     exec 'amenu <silent> ' . a:sub . '&Perforce.&Job.&View\ Jobs :PJobs<CR>'
253   endif
254
255   if a:expanded
256     exec 'amenu <silent> ' . a:sub . '&Perforce.&Depot.&New :PDepot<CR>'
257     exec 'amenu <silent> ' . a:sub . '&Perforce.&Depot.' .
258           \ '&Edit\ Current\ DepotSpec :PFExecCmd PItemOpen<CR>'
259     exec 'amenu <silent> ' . a:sub . '&Perforce.&Depot.' .
260           \ 'Descri&be\ Current\ DepotSpec :PFExecCmd PItemDescribe<CR>'
261     exec 'amenu <silent> ' . a:sub . '&Perforce.&Depot.' .
262           \ '&Delete\ Current\ DepotSpec :PFExecCmd PItemDelete<CR>'
263     exec 'amenu <silent> ' . a:sub . '&Perforce.&Depot.-Sep- :'
264     exec 'amenu <silent> ' . a:sub .
265           \ '&Perforce.&Depot.&View\ Depots :PDepots<CR>'
266   endif
267
268   if ! a:expanded
269     exec 'amenu <silent> ' . a:sub .
270           \ '&Perforce.Open\ Current\ File\ From\ A&nother\ Branch :E<CR>'
271   else
272     exec 'amenu <silent> ' . a:sub .
273           \ '&Perforce.&Tools.Open\ Current\ File\ From\ A&nother\ Branch ' .
274           \ ':E<CR>'
275   endif
276
277   if ! a:expanded
278     exec 'amenu <silent> ' . a:sub . '&Perforce.-Sep7- :'
279     exec 'amenu <silent> ' . a:sub . '&Perforce.Sa&ve\ Current\ Spec ' .
280           \':PFExecCmd W<CR>'
281     exec 'amenu <silent> ' . a:sub . '&Perforce.Save\ and\ &Quit\ ' .
282           \'Current\ Spec :PFExecCmd WQ<CR>'
283   endif
284
285   exec 'amenu <silent> ' . a:sub . '&Perforce.-Sep8- :'
286   exec 'amenu <silent> ' . a:sub . '&Perforce.Re-Initial&ze :PFInitialize<CR>'
287   if ! a:expanded
288     exec 'amenu <silent> ' . a:sub . '&Perforce.&Help :PHelp<CR>'
289   else
290     exec 'amenu <silent> ' . a:sub . '&Perforce.&Help.&General :PHelp<CR>'
291     exec 'amenu <silent> ' . a:sub . '&Perforce.&Help.&Simple :PHelp simple<CR>'
292     exec 'amenu <silent> ' . a:sub .
293           \ '&Perforce.&Help.&Commands :PHelp commands<CR>'
294     exec 'amenu <silent> ' . a:sub .
295           \ '&Perforce.&Help.&Environment :PHelp environment<CR>'
296     exec 'amenu <silent> ' . a:sub .
297           \ '&Perforce.&Help.&Filetypes :PHelp filetypes<CR>'
298     exec 'amenu <silent> ' . a:sub . '&Perforce.&Help.&Jobview :PHelp jobview<CR>'
299     exec 'amenu <silent> ' . a:sub .
300           \ '&Perforce.&Help.&Revisions :PHelp revisions<CR>'
301     exec 'amenu <silent> ' . a:sub . '&Perforce.&Help.&Usage :PHelp usage<CR>'
302     exec 'amenu <silent> ' . a:sub . '&Perforce.&Help.&Views :PHelp views<CR>'
303   endif
304 endfunction
305 endif
306 " }}}
307
308 "
309 " Add menu entries if user wants.
310 "
311
312 silent! unmenu Perforce
313 silent! unmenu! Perforce
314 if s:Get('EnableMenu')
315   call s:CreateMenu('', s:Get('UseExpandedMenu'))
316 endif
317
318 silent! unmenu PopUp.Perforce
319 silent! unmenu! PopUp.Perforce
320 if s:Get('EnablePopupMenu')
321   call s:CreateMenu('PopUp.', s:Get('UseExpandedPopupMenu'))
322 endif
323
324 " We no longer need this.
325 silent! delf s:CreateMenu
326 silent! delf s:Get
327
328 let v:errmsg = ''
329
330 " Make sure line-continuations won't cause any problem. This will be restored
331 "   at the end
332 let s:save_cpo = &cpo
333 set cpo&vim
334
335 " vim6:fdm=marker et sw=2