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