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