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