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