xref: /vim-8.2.3635/runtime/menu.vim (revision 8fe1000e)
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:	2019 Jan 27
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(&packpath, "pack/*/start/*/colors/*.vim", 1, 1)
363  let n += globpath(&packpath, "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
859an <silent> 70.332 &Window.Split\ File\ E&xplorer	:call MenuExplOpen()<CR>
860if !exists("*MenuExplOpen")
861  fun MenuExplOpen()
862    if @% == ""
863      20vsp .
864    else
865      exe "20vsp " . s:FnameEscape(expand("%:p:h"))
866    endif
867  endfun
868endif
869an 70.335 &Window.-SEP1-				<Nop>
870an 70.340 &Window.&Close<Tab>^Wc			:confirm close<CR>
871an 70.345 &Window.Close\ &Other(s)<Tab>^Wo		:confirm only<CR>
872an 70.350 &Window.-SEP2-				<Nop>
873an 70.355 &Window.Move\ &To.&Top<Tab>^WK		<C-W>K
874an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ		<C-W>J
875an 70.355 &Window.Move\ &To.&Left\ Side<Tab>^WH		<C-W>H
876an 70.355 &Window.Move\ &To.&Right\ Side<Tab>^WL	<C-W>L
877an 70.360 &Window.Rotate\ &Up<Tab>^WR			<C-W>R
878an 70.362 &Window.Rotate\ &Down<Tab>^Wr			<C-W>r
879an 70.365 &Window.-SEP3-				<Nop>
880an 70.370 &Window.&Equal\ Size<Tab>^W=			<C-W>=
881an 70.380 &Window.&Max\ Height<Tab>^W_			<C-W>_
882an 70.390 &Window.M&in\ Height<Tab>^W1_			<C-W>1_
883an 70.400 &Window.Max\ &Width<Tab>^W\|			<C-W>\|
884an 70.410 &Window.Min\ Widt&h<Tab>^W1\|			<C-W>1\|
885
886" The popup menu
887an 1.10 PopUp.&Undo			u
888an 1.15 PopUp.-SEP1-			<Nop>
889vnoremenu 1.20 PopUp.Cu&t		"+x
890vnoremenu 1.30 PopUp.&Copy		"+y
891cnoremenu 1.30 PopUp.&Copy		<C-Y>
892nnoremenu 1.40 PopUp.&Paste		"+gP
893cnoremenu 1.40 PopUp.&Paste		<C-R>+
894exe 'vnoremenu <script> 1.40 PopUp.&Paste	' . paste#paste_cmd['v']
895exe 'inoremenu <script> 1.40 PopUp.&Paste	' . paste#paste_cmd['i']
896vnoremenu 1.50 PopUp.&Delete		x
897an 1.55 PopUp.-SEP2-			<Nop>
898vnoremenu 1.60 PopUp.Select\ Blockwise	<C-V>
899
900nnoremenu 1.70 PopUp.Select\ &Word	vaw
901onoremenu 1.70 PopUp.Select\ &Word	aw
902vnoremenu 1.70 PopUp.Select\ &Word	<C-C>vaw
903inoremenu 1.70 PopUp.Select\ &Word	<C-O>vaw
904cnoremenu 1.70 PopUp.Select\ &Word	<C-C>vaw
905
906nnoremenu 1.73 PopUp.Select\ &Sentence	vas
907onoremenu 1.73 PopUp.Select\ &Sentence	as
908vnoremenu 1.73 PopUp.Select\ &Sentence	<C-C>vas
909inoremenu 1.73 PopUp.Select\ &Sentence	<C-O>vas
910cnoremenu 1.73 PopUp.Select\ &Sentence	<C-C>vas
911
912nnoremenu 1.77 PopUp.Select\ Pa&ragraph	vap
913onoremenu 1.77 PopUp.Select\ Pa&ragraph	ap
914vnoremenu 1.77 PopUp.Select\ Pa&ragraph	<C-C>vap
915inoremenu 1.77 PopUp.Select\ Pa&ragraph	<C-O>vap
916cnoremenu 1.77 PopUp.Select\ Pa&ragraph	<C-C>vap
917
918nnoremenu 1.80 PopUp.Select\ &Line	V
919onoremenu 1.80 PopUp.Select\ &Line	<C-C>V
920vnoremenu 1.80 PopUp.Select\ &Line	<C-C>V
921inoremenu 1.80 PopUp.Select\ &Line	<C-O>V
922cnoremenu 1.80 PopUp.Select\ &Line	<C-C>V
923
924nnoremenu 1.90 PopUp.Select\ &Block	<C-V>
925onoremenu 1.90 PopUp.Select\ &Block	<C-C><C-V>
926vnoremenu 1.90 PopUp.Select\ &Block	<C-C><C-V>
927inoremenu 1.90 PopUp.Select\ &Block	<C-O><C-V>
928cnoremenu 1.90 PopUp.Select\ &Block	<C-C><C-V>
929
930noremenu  <script> <silent> 1.100 PopUp.Select\ &All	:<C-U>call <SID>SelectAll()<CR>
931inoremenu <script> <silent> 1.100 PopUp.Select\ &All	<C-O>:call <SID>SelectAll()<CR>
932cnoremenu <script> <silent> 1.100 PopUp.Select\ &All	<C-U>call <SID>SelectAll()<CR>
933
934if has("spell")
935  " Spell suggestions in the popup menu.  Note that this will slow down the
936  " appearance of the menu!
937  func! <SID>SpellPopup()
938    if exists("s:changeitem") && s:changeitem != ''
939      call <SID>SpellDel()
940    endif
941
942    " Return quickly if spell checking is not enabled.
943    if !&spell || &spelllang == ''
944      return
945    endif
946
947    let curcol = col('.')
948    let [w, a] = spellbadword()
949    if col('.') > curcol		" don't use word after the cursor
950      let w = ''
951    endif
952    if w != ''
953      if a == 'caps'
954	let s:suglist = [substitute(w, '.*', '\u&', '')]
955      else
956	let s:suglist = spellsuggest(w, 10)
957      endif
958      if len(s:suglist) > 0
959	if !exists("g:menutrans_spell_change_ARG_to")
960	  let g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to'
961	endif
962	let s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .'))
963	let s:fromword = w
964	let pri = 1
965	" set 'cpo' to include the <CR>
966	let cpo_save = &cpo
967	set cpo&vim
968	for sug in s:suglist
969	  exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
970		\ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
971	  let pri += 1
972	endfor
973
974	if !exists("g:menutrans_spell_add_ARG_to_word_list")
975	  let g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List'
976	endif
977	let s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .'))
978	exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
979
980	if !exists("g:menutrans_spell_ignore_ARG")
981	  let g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"'
982	endif
983	let s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .'))
984	exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
985
986	anoremenu 1.8 PopUp.-SpellSep- :
987	let &cpo = cpo_save
988      endif
989    endif
990    call cursor(0, curcol)	" put the cursor back where it was
991  endfunc
992
993  func! <SID>SpellReplace(n)
994    let l = getline('.')
995    " Move the cursor to the start of the word.
996    call spellbadword()
997    call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
998	  \ . strpart(l, col('.') + len(s:fromword) - 1))
999  endfunc
1000
1001  func! <SID>SpellDel()
1002    exe "aunmenu PopUp." . s:changeitem
1003    exe "aunmenu PopUp." . s:additem
1004    exe "aunmenu PopUp." . s:ignoreitem
1005    aunmenu PopUp.-SpellSep-
1006    let s:changeitem = ''
1007  endfun
1008
1009  augroup SpellPopupMenu
1010    au! MenuPopup * call <SID>SpellPopup()
1011  augroup END
1012endif
1013
1014" The GUI toolbar (for MS-Windows and GTK)
1015if has("toolbar")
1016  an 1.10 ToolBar.Open			:browse confirm e<CR>
1017  an <silent> 1.20 ToolBar.Save		:if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
1018  an 1.30 ToolBar.SaveAll		:browse confirm wa<CR>
1019
1020  if has("printer")
1021    an 1.40   ToolBar.Print		:hardcopy<CR>
1022    vunmenu   ToolBar.Print
1023    vnoremenu ToolBar.Print		:hardcopy<CR>
1024  elseif has("unix")
1025    an 1.40   ToolBar.Print		:w !lpr<CR>
1026    vunmenu   ToolBar.Print
1027    vnoremenu ToolBar.Print		:w !lpr<CR>
1028  endif
1029
1030  an 1.45 ToolBar.-sep1-		<Nop>
1031  an 1.50 ToolBar.Undo			u
1032  an 1.60 ToolBar.Redo			<C-R>
1033
1034  an 1.65 ToolBar.-sep2-		<Nop>
1035  vnoremenu 1.70 ToolBar.Cut		"+x
1036  vnoremenu 1.80 ToolBar.Copy		"+y
1037  cnoremenu 1.80 ToolBar.Copy		<C-Y>
1038  nnoremenu 1.90 ToolBar.Paste		"+gP
1039  cnoremenu	 ToolBar.Paste		<C-R>+
1040  exe 'vnoremenu <script>	 ToolBar.Paste	' . paste#paste_cmd['v']
1041  exe 'inoremenu <script>	 ToolBar.Paste	' . paste#paste_cmd['i']
1042
1043  if !has("gui_athena")
1044    an 1.95   ToolBar.-sep3-		<Nop>
1045    an 1.100  ToolBar.Replace		:promptrepl<CR>
1046    vunmenu   ToolBar.Replace
1047    vnoremenu ToolBar.Replace		y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
1048    an 1.110  ToolBar.FindNext		n
1049    an 1.120  ToolBar.FindPrev		N
1050  endif
1051
1052  an 1.215 ToolBar.-sep5-		<Nop>
1053  an <silent> 1.220 ToolBar.LoadSesn	:call <SID>LoadVimSesn()<CR>
1054  an <silent> 1.230 ToolBar.SaveSesn	:call <SID>SaveVimSesn()<CR>
1055  an 1.240 ToolBar.RunScript		:browse so<CR>
1056
1057  an 1.245 ToolBar.-sep6-		<Nop>
1058  an 1.250 ToolBar.Make			:make<CR>
1059  an 1.270 ToolBar.RunCtags		:exe "!" . g:ctags_command<CR>
1060  an 1.280 ToolBar.TagJump		g<C-]>
1061
1062  an 1.295 ToolBar.-sep7-		<Nop>
1063  an 1.300 ToolBar.Help			:help<CR>
1064  an <silent> 1.310 ToolBar.FindHelp	:call <SID>Helpfind()<CR>
1065
1066" Only set the tooltips here if not done in a language menu file
1067if exists("*Do_toolbar_tmenu")
1068  call Do_toolbar_tmenu()
1069else
1070  let did_toolbar_tmenu = 1
1071  tmenu ToolBar.Open		Open file
1072  tmenu ToolBar.Save		Save current file
1073  tmenu ToolBar.SaveAll		Save all files
1074  tmenu ToolBar.Print		Print
1075  tmenu ToolBar.Undo		Undo
1076  tmenu ToolBar.Redo		Redo
1077  tmenu ToolBar.Cut		Cut to clipboard
1078  tmenu ToolBar.Copy		Copy to clipboard
1079  tmenu ToolBar.Paste		Paste from Clipboard
1080  if !has("gui_athena")
1081    tmenu ToolBar.Replace	Find / Replace...
1082    tmenu ToolBar.FindNext	Find Next
1083    tmenu ToolBar.FindPrev	Find Previous
1084  endif
1085  tmenu ToolBar.LoadSesn	Choose a session to load
1086  tmenu ToolBar.SaveSesn	Save current session
1087  tmenu ToolBar.RunScript	Choose a Vim Script to run
1088  tmenu ToolBar.Make		Make current project (:make)
1089  tmenu ToolBar.RunCtags	Build tags in current directory tree (!ctags -R .)
1090  tmenu ToolBar.TagJump		Jump to tag under cursor
1091  tmenu ToolBar.Help		Vim Help
1092  tmenu ToolBar.FindHelp	Search Vim Help
1093endif
1094
1095" Select a session to load; default to current session name if present
1096fun! s:LoadVimSesn()
1097  if strlen(v:this_session) > 0
1098    let name = s:FnameEscape(v:this_session)
1099  else
1100    let name = "Session.vim"
1101  endif
1102  execute "browse so " . name
1103endfun
1104
1105" Select a session to save; default to current session name if present
1106fun! s:SaveVimSesn()
1107  if strlen(v:this_session) == 0
1108    let v:this_session = "Session.vim"
1109  endif
1110  execute "browse mksession! " . s:FnameEscape(v:this_session)
1111endfun
1112
1113endif
1114
1115endif " !exists("did_install_default_menus")
1116
1117" Define these items always, so that syntax can be switched on when it wasn't.
1118" But skip them when the Syntax menu was disabled by the user.
1119if !exists("did_install_syntax_menu")
1120  an 50.212 &Syntax.&Manual		:syn manual<CR>
1121  an 50.214 &Syntax.A&utomatic		:syn on<CR>
1122  an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR>
1123  if !exists("*s:SynOnOff")
1124    fun s:SynOnOff()
1125      if has("syntax_items")
1126	syn clear
1127      else
1128	if !exists("g:syntax_on")
1129	  syn manual
1130	endif
1131	set syn=ON
1132      endif
1133    endfun
1134  endif
1135endif
1136
1137
1138" Install the Syntax menu only when filetype.vim has been loaded or when
1139" manual syntax highlighting is enabled.
1140" Avoid installing the Syntax menu twice.
1141if (exists("did_load_filetypes") || exists("syntax_on"))
1142	\ && !exists("did_install_syntax_menu")
1143  let did_install_syntax_menu = 1
1144
1145" Skip setting up the individual syntax selection menus unless
1146" do_syntax_sel_menu is defined (it takes quite a bit of time).
1147if exists("do_syntax_sel_menu")
1148  runtime! synmenu.vim
1149else
1150  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>
1151  an 50.195 &Syntax.-SEP1-		<Nop>
1152endif
1153
1154an 50.210 &Syntax.&Off			:syn off<CR>
1155an 50.700 &Syntax.-SEP3-		<Nop>
1156an 50.710 &Syntax.Co&lor\ Test		:sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1157an 50.720 &Syntax.&Highlight\ Test	:runtime syntax/hitest.vim<CR>
1158an 50.730 &Syntax.&Convert\ to\ HTML	:runtime syntax/2html.vim<CR>
1159
1160endif " !exists("did_install_syntax_menu")
1161
1162" Restore the previous value of 'cpoptions'.
1163let &cpo = s:cpo_save
1164unlet s:cpo_save
1165
1166" vim: set sw=2 :
1167