blob: b504ff82cc1f9f0d95f10a2cb72839ff04089787 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim support file to define the default menus
2" You can also use this as a start for your own set of menus.
3"
4" Maintainer: Bram Moolenaar <Bram@vim.org>
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00005" Last Change: 2004 Sep 16
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7" Note that ":an" (short for ":anoremenu") is often used to make a menu work
8" in all modes and avoid side effects from mappings defined by the user.
9
10" Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise
11" <CR> would not be recognized. See ":help 'cpoptions'".
12let s:cpo_save = &cpo
13set cpo&vim
14
15" Avoid installing the menus twice
16if !exists("did_install_default_menus")
17let did_install_default_menus = 1
18
19
20if exists("v:lang") || &langmenu != ""
21 " Try to find a menu translation file for the current language.
22 if &langmenu != ""
23 if &langmenu =~ "none"
24 let s:lang = ""
25 else
26 let s:lang = &langmenu
27 endif
28 else
29 let s:lang = v:lang
30 endif
31 " A language name must be at least two characters, don't accept "C"
32 if strlen(s:lang) > 1
33 " When the language does not include the charset add 'encoding'
34 if s:lang =~ '^\a\a$\|^\a\a_\a\a$'
35 let s:lang = s:lang . '.' . &enc
36 endif
37
38 " We always use a lowercase name.
39 " Change "iso-8859" to "iso_8859" and "iso8859" to "iso_8859", some
40 " systems appear to use this.
41 " Change spaces to underscores.
42 let s:lang = substitute(tolower(s:lang), '\.iso-', ".iso_", "")
43 let s:lang = substitute(s:lang, '\.iso8859', ".iso_8859", "")
44 let s:lang = substitute(s:lang, " ", "_", "g")
45 " Remove "@euro", otherwise "LC_ALL=de_DE@euro gvim" will show English menus
46 let s:lang = substitute(s:lang, "@euro", "", "")
47 " Change "iso_8859-1" and "iso_8859-15" to "latin1", we always use the
48 " same menu file for them.
49 let s:lang = substitute(s:lang, 'iso_8859-15\=$', "latin1", "")
50 menutrans clear
51 exe "runtime! lang/menu_" . s:lang . ".vim"
52
53 if !exists("did_menu_trans")
54 " There is no exact match, try matching with a wildcard added
55 " (e.g. find menu_de_de.iso_8859-1.vim if s:lang == de_DE).
56 let s:lang = substitute(s:lang, '\.[^.]*', "", "")
57 exe "runtime! lang/menu_" . s:lang . "*.vim"
58
59 if !exists("did_menu_trans") && strlen($LANG) > 1
60 " On windows locale names are complicated, try using $LANG, it might
61 " have been set by set_init_1().
62 exe "runtime! lang/menu_" . tolower($LANG) . "*.vim"
63 endif
64 endif
65 endif
66endif
67
68
69" Help menu
70an 9999.10 &Help.&Overview<Tab><F1> :help<CR>
71an 9999.20 &Help.&User\ Manual :help usr_toc<CR>
72an 9999.30 &Help.&How-to\ links :help how-to<CR>
73an <silent> 9999.40 &Help.&Find\.\.\. :call <SID>Helpfind()<CR>
74an 9999.45 &Help.-sep1- <Nop>
75an 9999.50 &Help.&Credits :help credits<CR>
76an 9999.60 &Help.Co&pying :help copying<CR>
77an 9999.70 &Help.&Sponsor/Register :help sponsor<CR>
78an 9999.70 &Help.O&rphans :help kcc<CR>
79an 9999.75 &Help.-sep2- <Nop>
80an 9999.80 &Help.&Version :version<CR>
81an 9999.90 &Help.&About :intro<CR>
82
83fun! s:Helpfind()
84 if !exists("g:menutrans_help_dialog")
85 let g:menutrans_help_dialog = "Enter a command or word to find help on:\n\nPrepend i_ for Input mode commands (e.g.: i_CTRL-X)\nPrepend c_ for command-line editing commands (e.g.: c_<Del>)\nPrepend ' for an option name (e.g.: 'shiftwidth')"
86 endif
87 let h = inputdialog(g:menutrans_help_dialog)
88 if h != ""
89 let v:errmsg = ""
90 silent! exe "help " . h
91 if v:errmsg != ""
92 echo v:errmsg
93 endif
94 endif
95endfun
96
97" File menu
98an 10.310 &File.&Open\.\.\.<Tab>:e :browse confirm e<CR>
99an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp :browse sp<CR>
100an 10.325 &File.&New<Tab>:enew :confirm enew<CR>
101an <silent> 10.330 &File.&Close<Tab>:close
102 \ :if winheight(2) < 0 <Bar>
103 \ confirm enew <Bar>
104 \ else <Bar>
105 \ confirm close <Bar>
106 \ endif<CR>
107an 10.335 &File.-SEP1- <Nop>
108an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
109an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR>
110
111if has("diff")
112 an 10.400 &File.-SEP2- <Nop>
113 an 10.410 &File.Split\ &Diff\ with\.\.\. :browse vert diffsplit<CR>
114 an 10.420 &File.Split\ Patched\ &By\.\.\. :browse vert diffpatch<CR>
115endif
116
117if has("printer")
118 an 10.500 &File.-SEP3- <Nop>
119 an 10.510 &File.&Print :hardcopy<CR>
120 vunmenu &File.&Print
121 vnoremenu &File.&Print :hardcopy<CR>
122elseif has("unix")
123 an 10.500 &File.-SEP3- <Nop>
124 an 10.510 &File.&Print :w !lpr<CR>
125 vunmenu &File.&Print
126 vnoremenu &File.&Print :w !lpr<CR>
127endif
128an 10.600 &File.-SEP4- <Nop>
129an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR>
130an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR>
131
132" Pasting blockwise and linewise selections is not possible in Insert and
133" Visual mode without the +virtualedit feature. They are pasted as if they
134" were characterwise instead. Add to that some tricks to leave the cursor in
135" the right position, also for "gi".
136" Note: the same stuff appears in mswin.vim.
137if has("virtualedit")
138 nnoremap <silent> <script> <SID>Paste :call <SID>Paste()<CR>
139 func! <SID>Paste()
140 let ove = &ve
141 set ve=all
142 normal `^
143 if @+ != ''
144 normal "+gP
145 endif
146 let c = col(".")
147 normal i
148 if col(".") < c " compensate for i<ESC> moving the cursor left
149 normal l
150 endif
151 let &ve = ove
152 endfunc
153else
154 nnoremap <silent> <script> <SID>Paste "=@+.'xy'<CR>gPFx"_2x
155endif
156
157" Use maps for items that are present both in Edit, Popup and Toolbar menu.
158if has("virtualedit")
159 vnoremap <script> <SID>vPaste "-c<Esc><SID>Paste
160 inoremap <script> <SID>iPaste <Esc><SID>Pastegi
161else
162 vnoremap <script> <SID>vPaste "-c<Esc>gix<Esc><SID>Paste"_x
163 inoremap <script> <SID>iPaste x<Esc><SID>Paste"_s
164endif
165
166func! <SID>SelectAll()
167 exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
168endfunc
169
170
171" Edit menu
172an 20.310 &Edit.&Undo<Tab>u u
173an 20.320 &Edit.&Redo<Tab>^R <C-R>
174an 20.330 &Edit.Rep&eat<Tab>\. .
175
176an 20.335 &Edit.-SEP1- <Nop>
177vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
178vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
179cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
180nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
181cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
182vnoremenu <script> &Edit.&Paste<Tab>"+gP <SID>vPaste
183inoremenu <script> &Edit.&Paste<Tab>"+gP <SID>iPaste
184nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
185inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
186nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
187inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
188if has("win32") || has("win16")
189 vnoremenu 20.390 &Edit.&Delete<Tab>x x
190endif
191noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
192inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
193cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
194
195an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar843ee412004-06-30 16:16:41 +0000196if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000197 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
198 vunmenu &Edit.&Find\.\.\.
199 vnoremenu &Edit.&Find\.\.\. y:promptfind <C-R>"<CR>
200 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
201 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
202 vnoremenu &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>"<CR>
203else
204 an 20.410 &Edit.&Find<Tab>/ /
205 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
206 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
207 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
208endif
209
210an 20.425 &Edit.-SEP3- <Nop>
211an 20.430 &Edit.Settings\ &Window :options<CR>
212
213" Edit/Global Settings
214an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
215an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic! :set ic! ic?<CR>
216an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm! :set sm! sm?<CR>
217
218an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\ :set so=1<CR>
219an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\ :set so=2<CR>
220an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\ :set so=3<CR>
221an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\ :set so=4<CR>
222an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\ :set so=5<CR>
223an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\ :set so=7<CR>
224an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\ :set so=10<CR>
225an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\ :set so=100<CR>
226
227an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
228an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
229an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
230an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
231an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
232an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
233an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp! :set cp!<CR>
234an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
235an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
236"
237" GUI options
238an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
239an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
240an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
241an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
242an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
243
244fun! s:SearchP()
245 if !exists("g:menutrans_path_dialog")
246 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
247 endif
248 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
249 if n != ""
250 let &path = substitute(n, ' ', '\\ ', 'g')
251 endif
252endfun
253
254fun! s:TagFiles()
255 if !exists("g:menutrans_tags_dialog")
256 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
257 endif
258 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
259 if n != ""
260 let &tags = substitute(n, ' ', '\\ ', 'g')
261 endif
262endfun
263
264fun! s:ToggleGuiOption(option)
265 " If a:option is already set in guioptions, then we want to remove it
266 if match(&guioptions, "\\C" . a:option) > -1
267 exec "set go-=" . a:option
268 else
269 exec "set go+=" . a:option
270 endif
271endfun
272
273" Edit/File Settings
274
275" Boolean options
276an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
277an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
278an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
279an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr! :set lbr! lbr?<CR>
280an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et! :set et! et?<CR>
281an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai! :set ai! ai?<CR>
282an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
283
284" other options
285an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
286an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
287an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
288an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
289an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
290an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
291an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
292
293an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
294an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
295an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
296an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
297an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
298an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
299
300an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
301an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
302fun! s:TextWidth()
303 if !exists("g:menutrans_textwidth_dialog")
304 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
305 endif
306 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
307 if n != ""
308 " remove leading zeros to avoid it being used as an octal number
309 let &tw = substitute(n, "^0*", "", "")
310 endif
311endfun
312
313fun! s:FileFormat()
314 if !exists("g:menutrans_fileformat_dialog")
315 let g:menutrans_fileformat_dialog = "Select format for writing the file"
316 endif
317 if !exists("g:menutrans_fileformat_choices")
318 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
319 endif
320 if &ff == "dos"
321 let def = 2
322 elseif &ff == "mac"
323 let def = 3
324 else
325 let def = 1
326 endif
327 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
328 if n == 1
329 set ff=unix
330 elseif n == 2
331 set ff=dos
332 elseif n == 3
333 set ff=mac
334 endif
335endfun
336
337" Setup the Edit.Color Scheme submenu
338let s:n = globpath(&runtimepath, "colors/*.vim")
339let s:idx = 100
340while strlen(s:n) > 0
341 let s:i = stridx(s:n, "\n")
342 if s:i < 0
343 let s:name = s:n
344 let s:n = ""
345 else
346 let s:name = strpart(s:n, 0, s:i)
347 let s:n = strpart(s:n, s:i + 1, 19999)
348 endif
349 " Ignore case for VMS and windows
350 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
351 exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
352 unlet s:name
353 unlet s:i
354 let s:idx = s:idx + 10
355endwhile
356unlet s:n
357unlet s:idx
358
359" Setup the Edit.Keymap submenu
360if has("keymap")
361 let s:n = globpath(&runtimepath, "keymap/*.vim")
362 if s:n != ""
363 let s:idx = 100
364 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
365 while strlen(s:n) > 0
366 let s:i = stridx(s:n, "\n")
367 if s:i < 0
368 let s:name = s:n
369 let s:n = ""
370 else
371 let s:name = strpart(s:n, 0, s:i)
372 let s:n = strpart(s:n, s:i + 1, 19999)
373 endif
374 " Ignore case for VMS and windows
375 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
376 exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
377 unlet s:name
378 unlet s:i
379 let s:idx = s:idx + 10
380 endwhile
381 unlet s:idx
382 endif
383 unlet s:n
384endif
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000385if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000386 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
387endif
388
389" Programming menu
390if !exists("g:ctags_command")
391 if has("vms")
392 let g:ctags_command = "mc vim:ctags ."
393 else
394 let g:ctags_command = "ctags -R ."
395 endif
396endif
397
398an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
399vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
400vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
401an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
402an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
403
404" Tools.Fold Menu
405if has("folding")
406 an 40.330 &Tools.-SEP1- <Nop>
407 " open close folds
408 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
409 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
410 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
411 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
412 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
413 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
414 an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR
415 " fold method
416 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
417 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
418 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
419 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
420 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
421 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
422 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
423 " create and delete folds
424 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
425 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
426 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
427 " moving around in folds
428 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
429 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
430 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
431 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
432 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
433 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
434 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
435 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
436 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
437endif " has folding
438
439if has("diff")
440 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
441 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
442 vunmenu &Tools.&Diff.&Get\ Block
443 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
444 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
445 vunmenu &Tools.&Diff.&Put\ Block
446 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
447endif
448
449an 40.358 &Tools.-SEP2- <Nop>
450an 40.360 &Tools.&Make<Tab>:make :make<CR>
451an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
452an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
453an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
454an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
455an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
456an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
457an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
458an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
459an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
460
461an 40.520 &Tools.-SEP3- <Nop>
462an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
463 \ :call <SID>XxdConv()<CR>
464an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
465 \ :call <SID>XxdBack()<CR>
466
467" Use a function to do the conversion, so that it also works with 'insertmode'
468" set.
469func! s:XxdConv()
470 let mod = &mod
471 if has("vms")
472 %!mc vim:xxd
473 else
474 call s:XxdFind()
475 exe '%!"' . g:xxdprogram . '"'
476 endif
477 if getline(1) =~ "^0000000:" " only if it worked
478 set ft=xxd
479 endif
480 let &mod = mod
481endfun
482
483func! s:XxdBack()
484 let mod = &mod
485 if has("vms")
486 %!mc vim:xxd -r
487 else
488 call s:XxdFind()
489 exe '%!"' . g:xxdprogram . '" -r'
490 endif
491 set ft=
492 doautocmd filetypedetect BufReadPost
493 let &mod = mod
494endfun
495
496func! s:XxdFind()
497 if !exists("g:xxdprogram")
498 " On the PC xxd may not be in the path but in the install directory
499 if (has("win32") || has("dos32")) && !executable("xxd")
500 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
501 else
502 let g:xxdprogram = "xxd"
503 endif
504 endif
505endfun
506
507" Setup the Tools.Compiler submenu
508let s:n = globpath(&runtimepath, "compiler/*.vim")
509let s:idx = 100
510while strlen(s:n) > 0
511 let s:i = stridx(s:n, "\n")
512 if s:i < 0
513 let s:name = s:n
514 let s:n = ""
515 else
516 let s:name = strpart(s:n, 0, s:i)
517 let s:n = strpart(s:n, s:i + 1, 19999)
518 endif
519 " Ignore case for VMS and windows
520 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
521 exe "an 30.440." . s:idx . ' &Tools.&Set\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
522 unlet s:name
523 unlet s:i
524 let s:idx = s:idx + 10
525endwhile
526unlet s:n
527unlet s:idx
528
529if !exists("no_buffers_menu")
530
531" Buffer list menu -- Setup functions & actions
532
533" wait with building the menu until after loading 'session' files. Makes
534" startup faster.
535let s:bmenu_wait = 1
536
537if !exists("bmenu_priority")
538 let bmenu_priority = 60
539endif
540
541func! s:BMAdd()
542 if s:bmenu_wait == 0
543 " when adding too many buffers, redraw in short format
544 if s:bmenu_count == &menuitems && s:bmenu_short == 0
545 call s:BMShow()
546 else
547 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
548 let s:bmenu_count = s:bmenu_count + 1
549 endif
550 endif
551endfunc
552
553func! s:BMRemove()
554 if s:bmenu_wait == 0
555 let name = expand("<afile>")
556 if isdirectory(name)
557 return
558 endif
559 let munge = <SID>BMMunge(name, expand("<abuf>"))
560
561 if s:bmenu_short == 0
562 exe 'silent! aun &Buffers.' . munge
563 else
564 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
565 endif
566 let s:bmenu_count = s:bmenu_count - 1
567 endif
568endfunc
569
570" Create the buffer menu (delete an existing one first).
571func! s:BMShow(...)
572 let s:bmenu_wait = 1
573 let s:bmenu_short = 1
574 let s:bmenu_count = 0
575 "
576 " get new priority, if exists
577 if a:0 == 1
578 let g:bmenu_priority = a:1
579 endif
580
581 " remove old menu, if exists; keep one entry to avoid a torn off menu to
582 " disappear.
583 silent! unmenu &Buffers
584 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
585 silent! unmenu! &Buffers
586
587 " create new menu; set 'cpo' to include the <CR>
588 let cpo_save = &cpo
589 set cpo&vim
590 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
591 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
592 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
593 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
594 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
595 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
596 let &cpo = cpo_save
597 unmenu &Buffers.Dummy
598
599 " figure out how many buffers there are
600 let buf = 1
601 while buf <= bufnr('$')
602 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
603 \ && !getbufvar(buf, "&bufsecret")
604 let s:bmenu_count = s:bmenu_count + 1
605 endif
606 let buf = buf + 1
607 endwhile
608 if s:bmenu_count <= &menuitems
609 let s:bmenu_short = 0
610 endif
611
612 " iterate through buffer list, adding each buffer to the menu:
613 let buf = 1
614 while buf <= bufnr('$')
615 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
616 \ && !getbufvar(buf, "&bufsecret")
617 call <SID>BMFilename(bufname(buf), buf)
618 endif
619 let buf = buf + 1
620 endwhile
621 let s:bmenu_wait = 0
622 aug buffer_list
623 au!
624 au BufCreate,BufFilePost * call <SID>BMAdd()
625 au BufDelete,BufFilePre * call <SID>BMRemove()
626 aug END
627endfunc
628
629func! s:BMHash(name)
630 " Make name all upper case, so that chars are between 32 and 96
631 let nm = substitute(a:name, ".*", '\U\0', "")
632 if has("ebcdic")
633 " HACK: Replace all non alphabetics with 'Z'
634 " Just to make it work for now.
635 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
636 let sp = char2nr('A') - 1
637 else
638 let sp = char2nr(' ')
639 endif
640 " convert first six chars into a number for sorting:
641 return (char2nr(nm[0]) - sp) * 0x800000 + (char2nr(nm[1]) - sp) * 0x20000 + (char2nr(nm[2]) - sp) * 0x1000 + (char2nr(nm[3]) - sp) * 0x80 + (char2nr(nm[4]) - sp) * 0x20 + (char2nr(nm[5]) - sp)
642endfunc
643
644func! s:BMHash2(name)
645 let nm = substitute(a:name, ".", '\L\0', "")
646 " Not exactly right for EBCDIC...
647 if nm[0] < 'a' || nm[0] > 'z'
648 return '&others.'
649 elseif nm[0] <= 'd'
650 return '&abcd.'
651 elseif nm[0] <= 'h'
652 return '&efgh.'
653 elseif nm[0] <= 'l'
654 return '&ijkl.'
655 elseif nm[0] <= 'p'
656 return '&mnop.'
657 elseif nm[0] <= 't'
658 return '&qrst.'
659 else
660 return '&u-z.'
661 endif
662endfunc
663
664" insert a buffer name into the buffer menu:
665func! s:BMFilename(name, num)
666 if isdirectory(a:name)
667 return
668 endif
669 let munge = <SID>BMMunge(a:name, a:num)
670 let hash = <SID>BMHash(munge)
671 if s:bmenu_short == 0
672 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
673 else
674 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
675 endif
676 " set 'cpo' to include the <CR>
677 let cpo_save = &cpo
678 set cpo&vim
679 exe name . ' :confirm b' . a:num . '<CR>'
680 let &cpo = cpo_save
681endfunc
682
683" Truncate a long path to fit it in a menu item.
684if !exists("g:bmenu_max_pathlen")
685 let g:bmenu_max_pathlen = 35
686endif
687func! s:BMTruncName(fname)
688 let name = a:fname
689 if g:bmenu_max_pathlen < 5
690 let name = ""
691 else
692 let len = strlen(name)
693 if len > g:bmenu_max_pathlen
694 let amountl = (g:bmenu_max_pathlen / 2) - 2
695 let amountr = g:bmenu_max_pathlen - amountl - 3
696 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
697 let left = substitute(name, pattern, '\1', '')
698 let right = substitute(name, pattern, '\2', '')
699 if strlen(left) + strlen(right) < len
700 let name = left . '...' . right
701 endif
702 endif
703 endif
704 return name
705endfunc
706
707func! s:BMMunge(fname, bnum)
708 let name = a:fname
709 if name == ''
710 if !exists("g:menutrans_no_file")
711 let g:menutrans_no_file = "[No file]"
712 endif
713 let name = g:menutrans_no_file
714 else
715 let name = fnamemodify(name, ':p:~')
716 endif
717 " detach file name and separate it out:
718 let name2 = fnamemodify(name, ':t')
719 if a:bnum >= 0
720 let name2 = name2 . ' (' . a:bnum . ')'
721 endif
722 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
723 let name = escape(name, "\\. \t|")
724 let name = substitute(name, "&", "&&", "g")
725 let name = substitute(name, "\n", "^@", "g")
726 return name
727endfunc
728
729" When just starting Vim, load the buffer menu later
730if has("vim_starting")
731 augroup LoadBufferMenu
732 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
733 au VimEnter * au! LoadBufferMenu
734 augroup END
735else
736 call <SID>BMShow()
737endif
738
739endif " !exists("no_buffers_menu")
740
741" Window menu
742an 70.300 &Window.&New<Tab>^Wn <C-W>n
743an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
744an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
745an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
746if has("vertsplit")
747 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
748 if !exists("*MenuExplOpen")
749 fun MenuExplOpen()
750 if @% == ""
751 20vsp .
752 else
753 exe "20vsp " . expand("%:p:h")
754 endif
755 endfun
756 endif
757endif
758an 70.335 &Window.-SEP1- <Nop>
759an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
760an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
761an 70.350 &Window.-SEP2- <Nop>
762an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
763an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
764an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
765an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
766an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
767an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
768an 70.365 &Window.-SEP3- <Nop>
769an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
770an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
771an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
772an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
773an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
774
775" The popup menu
776an 1.10 PopUp.&Undo u
777an 1.15 PopUp.-SEP1- <Nop>
778vnoremenu 1.20 PopUp.Cu&t "+x
779vnoremenu 1.30 PopUp.&Copy "+y
780cnoremenu 1.30 PopUp.&Copy <C-Y>
781nnoremenu 1.40 PopUp.&Paste "+gP
782cnoremenu 1.40 PopUp.&Paste <C-R>+
783vnoremenu <script> 1.40 PopUp.&Paste <SID>vPaste
784inoremenu <script> 1.40 PopUp.&Paste <SID>iPaste
785vnoremenu 1.50 PopUp.&Delete x
786an 1.55 PopUp.-SEP2- <Nop>
787vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
788an 1.70 PopUp.Select\ &Word vaw
789an 1.80 PopUp.Select\ &Line V
790an 1.90 PopUp.Select\ &Block <C-V>
791noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
792inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
793cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
794
795
796" The GUI toolbar (for MS-Windows and GTK)
797if has("toolbar")
798 an 1.10 ToolBar.Open :browse confirm e<CR>
799 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
800 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
801
802 if has("printer")
803 an 1.40 ToolBar.Print :hardcopy<CR>
804 vunmenu ToolBar.Print
805 vnoremenu ToolBar.Print :hardcopy<CR>
806 elseif has("unix")
807 an 1.40 ToolBar.Print :w !lpr<CR>
808 vunmenu ToolBar.Print
809 vnoremenu ToolBar.Print :w !lpr<CR>
810 endif
811
812 an 1.45 ToolBar.-sep1- <Nop>
813 an 1.50 ToolBar.Undo u
814 an 1.60 ToolBar.Redo <C-R>
815
816 an 1.65 ToolBar.-sep2- <Nop>
817 vnoremenu 1.70 ToolBar.Cut "+x
818 vnoremenu 1.80 ToolBar.Copy "+y
819 cnoremenu 1.80 ToolBar.Copy <C-Y>
820 nnoremenu 1.90 ToolBar.Paste "+gP
821 cnoremenu ToolBar.Paste <C-R>+
822 vnoremenu <script> ToolBar.Paste <SID>vPaste
823 inoremenu <script> ToolBar.Paste <SID>iPaste
824
825 if !has("gui_athena")
826 an 1.95 ToolBar.-sep3- <Nop>
827 an 1.100 ToolBar.Find :promptfind<CR>
828 vunmenu ToolBar.Find
829 vnoremenu ToolBar.Find y:promptfind <C-R>"<CR>
830 an 1.110 ToolBar.FindNext n
831 an 1.120 ToolBar.FindPrev N
832 an 1.130 ToolBar.Replace :promptrepl<CR>
833 vunmenu ToolBar.Replace
834 vnoremenu ToolBar.Replace y:promptrepl <C-R>"<CR>
835 endif
836
837if 0 " disabled; These are in the Windows menu
838 an 1.135 ToolBar.-sep4- <Nop>
839 an 1.140 ToolBar.New <C-W>n
840 an 1.150 ToolBar.WinSplit <C-W>s
841 an 1.160 ToolBar.WinMax :resize 200<CR>
842 an 1.170 ToolBar.WinMin :resize 1<CR>
843 an 1.180 ToolBar.WinVSplit <C-W>v
844 an 1.190 ToolBar.WinMaxWidth <C-W>500>
845 an 1.200 ToolBar.WinMinWidth <C-W>1\|
846 an 1.210 ToolBar.WinClose :close<CR>
847endif
848
849 an 1.215 ToolBar.-sep5- <Nop>
850 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
851 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
852 an 1.240 ToolBar.RunScript :browse so<CR>
853
854 an 1.245 ToolBar.-sep6- <Nop>
855 an 1.250 ToolBar.Make :make<CR>
856 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
857 an 1.280 ToolBar.TagJump g<C-]>
858
859 an 1.295 ToolBar.-sep7- <Nop>
860 an 1.300 ToolBar.Help :help<CR>
861 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
862
863" Only set the tooltips here if not done in a language menu file
864if exists("*Do_toolbar_tmenu")
865 call Do_toolbar_tmenu()
866else
867 let did_toolbar_tmenu = 1
868 tmenu ToolBar.Open Open file
869 tmenu ToolBar.Save Save current file
870 tmenu ToolBar.SaveAll Save all files
871 tmenu ToolBar.Print Print
872 tmenu ToolBar.Undo Undo
873 tmenu ToolBar.Redo Redo
874 tmenu ToolBar.Cut Cut to clipboard
875 tmenu ToolBar.Copy Copy to clipboard
876 tmenu ToolBar.Paste Paste from Clipboard
877 if !has("gui_athena")
878 tmenu ToolBar.Find Find...
879 tmenu ToolBar.FindNext Find Next
880 tmenu ToolBar.FindPrev Find Previous
881 tmenu ToolBar.Replace Find / Replace...
882 endif
883 if 0 " disabled; These are in the Windows menu
884 tmenu ToolBar.New New Window
885 tmenu ToolBar.WinSplit Split Window
886 tmenu ToolBar.WinMax Maximise Window
887 tmenu ToolBar.WinMin Minimise Window
888 tmenu ToolBar.WinVSplit Split Window Vertically
889 tmenu ToolBar.WinMaxWidth Maximise Window Width
890 tmenu ToolBar.WinMinWidth Minimise Window Width
891 tmenu ToolBar.WinClose Close Window
892 endif
893 tmenu ToolBar.LoadSesn Load session
894 tmenu ToolBar.SaveSesn Save current session
895 tmenu ToolBar.RunScript Run a Vim Script
896 tmenu ToolBar.Make Make current project
897 tmenu ToolBar.RunCtags Build tags in current directory tree
898 tmenu ToolBar.TagJump Jump to tag under cursor
899 tmenu ToolBar.Help Vim Help
900 tmenu ToolBar.FindHelp Search Vim Help
901endif
902
903" Select a session to load; default to current session name if present
904fun! s:LoadVimSesn()
905 if strlen(v:this_session) > 0
906 let name = v:this_session
907 else
908 let name = "Session.vim"
909 endif
910 execute "browse so " . name
911endfun
912
913" Select a session to save; default to current session name if present
914fun! s:SaveVimSesn()
915 if strlen(v:this_session) == 0
916 let v:this_session = "Session.vim"
917 endif
918 execute "browse mksession! " . v:this_session
919endfun
920
921endif
922
923endif " !exists("did_install_default_menus")
924
925" Define these items always, so that syntax can be switched on when it wasn't.
926" But skip them when the Syntax menu was disabled by the user.
927if !exists("did_install_syntax_menu")
928 an 50.212 &Syntax.&Manual :syn manual<CR>
929 an 50.214 &Syntax.A&utomatic :syn on<CR>
930 an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
931 if !exists("*s:SynOnOff")
932 fun s:SynOnOff()
933 if has("syntax_items")
934 syn clear
935 else
936 if !exists("g:syntax_on")
937 syn manual
938 endif
939 set syn=ON
940 endif
941 endfun
942 endif
943endif
944
945
946" Install the Syntax menu only when filetype.vim has been loaded or when
947" manual syntax highlighting is enabled.
948" Avoid installing the Syntax menu twice.
949if (exists("did_load_filetypes") || exists("syntax_on"))
950 \ && !exists("did_install_syntax_menu")
951 let did_install_syntax_menu = 1
952
953" Skip setting up the individual syntax selection menus unless
954" do_syntax_sel_menu is defined (it takes quite a bit of time).
955if exists("do_syntax_sel_menu")
956 runtime! synmenu.vim
957else
958 an 50.10 &Syntax.&Show\ filetypes\ in\ menu :let do_syntax_sel_menu = 1<Bar>runtime! synmenu.vim<Bar>aunmenu &Syntax.&Show\ filetypes\ in\ menu<CR>
959 an 50.195 &Syntax.-SEP1- <Nop>
960endif
961
962an 50.210 &Syntax.&Off :syn off<CR>
963an 50.700 &Syntax.-SEP3- <Nop>
964an 50.710 &Syntax.Co&lor\ test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
965an 50.720 &Syntax.&Highlight\ test :runtime syntax/hitest.vim<CR>
966an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
967
968endif " !exists("did_install_syntax_menu")
969
970" Restore the previous value of 'cpoptions'.
971let &cpo = s:cpo_save
972unlet s:cpo_save
973
974" vim: set sw=2 :