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
5 " Requires: Vim-6.2, perforce.vim(4.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
11 if !exists("loaded_perforce")
12 runtime plugin/perforce.vim
14 if !exists("loaded_perforce") || loaded_perforce < 400
15 echomsg "perforcemenu: You need a newer version of perforce.vim plugin"
19 " Make sure line-continuations won't cause any problem. This will be restored
24 function! s:Get(setting, ...)
25 if exists('g:p4'.a:setting)
26 return g:p4{a:setting}
29 if exists('*perforce#PFCall')
30 let val = perforce#PFCall('s:_', a:setting)
31 if val == '' && a:0 > 0
39 function! s:PFExecCmd(cmd) " {{{
40 if exists(':'.a:cmd) == 2
43 call perforce#PFCall("s:EchoMessage", 'The command: ' . a:cmd .
44 \ ' is not defined for this buffer.', 'WarningMsg')
47 command! -nargs=1 PFExecCmd :call <SID>PFExecCmd(<q-args>) " }}}
48 let s:loaded_perforcemenu = 1
51 if s:Get('EnableMenu') || s:Get('EnablePopupMenu') " [-2f]
52 function! s:CreateMenu(sub, expanded)
56 let fileGroup = '.&File.'
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 ' .
76 exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . '&Print :PPrint<CR>'
77 exec 'amenu <silent> ' . a:sub . '&Perforce' . fileGroup . '-Sep4- :'
79 exec 'amenu <silent> ' . a:sub . '&Perforce.&File.' .
80 \ 'Resol&ve.Accept\ &Their\ Changes<Tab>resolve\ -at ' .
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 ' .
95 exec 'amenu <silent> ' . a:sub . '&Perforce.&File.Save\ and\ &Quit\ ' .
96 \'Current\ Spec :PFExecCmd WQ<CR>'
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- :'
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>'
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
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
138 exec 'amenu <silent> ' . a:sub .
139 \ '&Perforce.New\ &Submission\ Template :PSubmit<CR>'
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>'
158 exec 'amenu <silent> ' . a:sub . '&Perforce.&Branch :PBranch<CR>'
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>'
173 exec 'amenu <silent> ' . a:sub . '&Perforce.&Label :PLabel<CR>'
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>'
195 exec 'amenu <silent> ' . a:sub . '&Perforce.Cl&ient :PClient<CR>'
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'), ' ') .
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>'
217 exec 'amenu <silent> ' . a:sub . '&Perforce.&User :PUser<CR>'
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>'
239 exec 'amenu <silent> ' . a:sub . '&Perforce.&Job :PJob<CR>'
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 ' .
251 exec 'amenu <silent> ' . a:sub . '&Perforce.&Job.-Sep2- :'
252 exec 'amenu <silent> ' . a:sub . '&Perforce.&Job.&View\ Jobs :PJobs<CR>'
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>'
269 exec 'amenu <silent> ' . a:sub .
270 \ '&Perforce.Open\ Current\ File\ From\ A¬her\ Branch :E<CR>'
272 exec 'amenu <silent> ' . a:sub .
273 \ '&Perforce.&Tools.Open\ Current\ File\ From\ A¬her\ Branch ' .
278 exec 'amenu <silent> ' . a:sub . '&Perforce.-Sep7- :'
279 exec 'amenu <silent> ' . a:sub . '&Perforce.Sa&ve\ Current\ Spec ' .
281 exec 'amenu <silent> ' . a:sub . '&Perforce.Save\ and\ &Quit\ ' .
282 \'Current\ Spec :PFExecCmd WQ<CR>'
285 exec 'amenu <silent> ' . a:sub . '&Perforce.-Sep8- :'
286 exec 'amenu <silent> ' . a:sub . '&Perforce.Re-Initial&ze :PFInitialize<CR>'
288 exec 'amenu <silent> ' . a:sub . '&Perforce.&Help :PHelp<CR>'
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>'
309 " Add menu entries if user wants.
312 silent! unmenu Perforce
313 silent! unmenu! Perforce
314 if s:Get('EnableMenu')
315 call s:CreateMenu('', s:Get('UseExpandedMenu'))
318 silent! unmenu PopUp.Perforce
319 silent! unmenu! PopUp.Perforce
320 if s:Get('EnablePopupMenu')
321 call s:CreateMenu('PopUp.', s:Get('UseExpandedPopupMenu'))
324 " We no longer need this.
325 silent! delf s:CreateMenu
330 " Make sure line-continuations won't cause any problem. This will be restored
332 let s:save_cpo = &cpo
335 " vim6:fdm=marker et sw=2