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