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