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