xref: /vim-8.2.3635/runtime/menu.vim (revision fc1421eb)
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:	2006 Apr 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") && 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					    \ && !getbufvar(buf, "&bufsecret")
662      let s:bmenu_count = s:bmenu_count + 1
663    endif
664    let buf = buf + 1
665  endwhile
666  if s:bmenu_count <= &menuitems
667    let s:bmenu_short = 0
668  endif
669
670  " iterate through buffer list, adding each buffer to the menu:
671  let buf = 1
672  while buf <= bufnr('$')
673    if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
674					    \ && !getbufvar(buf, "&bufsecret")
675      call <SID>BMFilename(bufname(buf), buf)
676    endif
677    let buf = buf + 1
678  endwhile
679  let s:bmenu_wait = 0
680  aug buffer_list
681  au!
682  au BufCreate,BufFilePost * call <SID>BMAdd()
683  au BufDelete,BufFilePre * call <SID>BMRemove()
684  aug END
685endfunc
686
687func! s:BMHash(name)
688  " Make name all upper case, so that chars are between 32 and 96
689  let nm = substitute(a:name, ".*", '\U\0', "")
690  if has("ebcdic")
691    " HACK: Replace all non alphabetics with 'Z'
692    "       Just to make it work for now.
693    let nm = substitute(nm, "[^A-Z]", 'Z', "g")
694    let sp = char2nr('A') - 1
695  else
696    let sp = char2nr(' ')
697  endif
698  " convert first six chars into a number for sorting:
699  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)
700endfunc
701
702func! s:BMHash2(name)
703  let nm = substitute(a:name, ".", '\L\0', "")
704  " Not exactly right for EBCDIC...
705  if nm[0] < 'a' || nm[0] > 'z'
706    return '&others.'
707  elseif nm[0] <= 'd'
708    return '&abcd.'
709  elseif nm[0] <= 'h'
710    return '&efgh.'
711  elseif nm[0] <= 'l'
712    return '&ijkl.'
713  elseif nm[0] <= 'p'
714    return '&mnop.'
715  elseif nm[0] <= 't'
716    return '&qrst.'
717  else
718    return '&u-z.'
719  endif
720endfunc
721
722" insert a buffer name into the buffer menu:
723func! s:BMFilename(name, num)
724  if isdirectory(a:name)
725    return
726  endif
727  let munge = <SID>BMMunge(a:name, a:num)
728  let hash = <SID>BMHash(munge)
729  if s:bmenu_short == 0
730    let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
731  else
732    let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
733  endif
734  " set 'cpo' to include the <CR>
735  let cpo_save = &cpo
736  set cpo&vim
737  exe name . ' :confirm b' . a:num . '<CR>'
738  let &cpo = cpo_save
739endfunc
740
741" Truncate a long path to fit it in a menu item.
742if !exists("g:bmenu_max_pathlen")
743  let g:bmenu_max_pathlen = 35
744endif
745func! s:BMTruncName(fname)
746  let name = a:fname
747  if g:bmenu_max_pathlen < 5
748    let name = ""
749  else
750    let len = strlen(name)
751    if len > g:bmenu_max_pathlen
752      let amountl = (g:bmenu_max_pathlen / 2) - 2
753      let amountr = g:bmenu_max_pathlen - amountl - 3
754      let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
755      let left = substitute(name, pattern, '\1', '')
756      let right = substitute(name, pattern, '\2', '')
757      if strlen(left) + strlen(right) < len
758	let name = left . '...' . right
759      endif
760    endif
761  endif
762  return name
763endfunc
764
765func! s:BMMunge(fname, bnum)
766  let name = a:fname
767  if name == ''
768    if !exists("g:menutrans_no_file")
769      let g:menutrans_no_file = "[No file]"
770    endif
771    let name = g:menutrans_no_file
772  else
773    let name = fnamemodify(name, ':p:~')
774  endif
775  " detach file name and separate it out:
776  let name2 = fnamemodify(name, ':t')
777  if a:bnum >= 0
778    let name2 = name2 . ' (' . a:bnum . ')'
779  endif
780  let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
781  let name = escape(name, "\\. \t|")
782  let name = substitute(name, "&", "&&", "g")
783  let name = substitute(name, "\n", "^@", "g")
784  return name
785endfunc
786
787" When just starting Vim, load the buffer menu later
788if has("vim_starting")
789  augroup LoadBufferMenu
790    au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
791    au  VimEnter * au! LoadBufferMenu
792  augroup END
793else
794  call <SID>BMShow()
795endif
796
797endif " !exists("no_buffers_menu")
798
799" Window menu
800an 70.300 &Window.&New<Tab>^Wn			<C-W>n
801an 70.310 &Window.S&plit<Tab>^Ws		<C-W>s
802an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^	<C-W><C-^>
803an 70.330 &Window.Split\ &Vertically<Tab>^Wv	<C-W>v
804if has("vertsplit")
805  an <silent> 70.332 &Window.Split\ File\ E&xplorer	:call MenuExplOpen()<CR>
806  if !exists("*MenuExplOpen")
807    fun MenuExplOpen()
808      if @% == ""
809	20vsp .
810      else
811	exe "20vsp " . expand("%:p:h")
812      endif
813    endfun
814  endif
815endif
816an 70.335 &Window.-SEP1-				<Nop>
817an 70.340 &Window.&Close<Tab>^Wc			:confirm close<CR>
818an 70.345 &Window.Close\ &Other(s)<Tab>^Wo		:confirm only<CR>
819an 70.350 &Window.-SEP2-				<Nop>
820an 70.355 &Window.Move\ &To.&Top<Tab>^WK		<C-W>K
821an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ		<C-W>J
822an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH		<C-W>H
823an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL	<C-W>L
824an 70.360 &Window.Rotate\ &Up<Tab>^WR			<C-W>R
825an 70.362 &Window.Rotate\ &Down<Tab>^Wr			<C-W>r
826an 70.365 &Window.-SEP3-				<Nop>
827an 70.370 &Window.&Equal\ Size<Tab>^W=			<C-W>=
828an 70.380 &Window.&Max\ Height<Tab>^W_			<C-W>_
829an 70.390 &Window.M&in\ Height<Tab>^W1_			<C-W>1_
830an 70.400 &Window.Max\ &Width<Tab>^W\|			<C-W>\|
831an 70.410 &Window.Min\ Widt&h<Tab>^W1\|			<C-W>1\|
832
833" The popup menu
834an 1.10 PopUp.&Undo			u
835an 1.15 PopUp.-SEP1-			<Nop>
836vnoremenu 1.20 PopUp.Cu&t		"+x
837vnoremenu 1.30 PopUp.&Copy		"+y
838cnoremenu 1.30 PopUp.&Copy		<C-Y>
839nnoremenu 1.40 PopUp.&Paste		"+gP
840cnoremenu 1.40 PopUp.&Paste		<C-R>+
841exe 'vnoremenu <script> 1.40 PopUp.&Paste	' . paste#paste_cmd['v']
842exe 'inoremenu <script> 1.40 PopUp.&Paste	' . paste#paste_cmd['i']
843vnoremenu 1.50 PopUp.&Delete		x
844an 1.55 PopUp.-SEP2-			<Nop>
845vnoremenu 1.60 PopUp.Select\ Blockwise	<C-V>
846
847nnoremenu 1.70 PopUp.Select\ &Word	vaw
848onoremenu 1.70 PopUp.Select\ &Word	aw
849vnoremenu 1.70 PopUp.Select\ &Word	<C-C>vaw
850inoremenu 1.70 PopUp.Select\ &Word	<C-O>vaw
851cnoremenu 1.70 PopUp.Select\ &Word	<C-C>vaw
852
853nnoremenu 1.73 PopUp.Select\ &Sentence	vas
854onoremenu 1.73 PopUp.Select\ &Sentence	as
855vnoremenu 1.73 PopUp.Select\ &Sentence	<C-C>vas
856inoremenu 1.73 PopUp.Select\ &Sentence	<C-O>vas
857cnoremenu 1.73 PopUp.Select\ &Sentence	<C-C>vas
858
859nnoremenu 1.77 PopUp.Select\ Pa&ragraph	vap
860onoremenu 1.77 PopUp.Select\ Pa&ragraph	ap
861vnoremenu 1.77 PopUp.Select\ Pa&ragraph	<C-C>vap
862inoremenu 1.77 PopUp.Select\ Pa&ragraph	<C-O>vap
863cnoremenu 1.77 PopUp.Select\ Pa&ragraph	<C-C>vap
864
865nnoremenu 1.80 PopUp.Select\ &Line	V
866onoremenu 1.80 PopUp.Select\ &Line	<C-C>V
867vnoremenu 1.80 PopUp.Select\ &Line	<C-C>V
868inoremenu 1.80 PopUp.Select\ &Line	<C-O>V
869cnoremenu 1.80 PopUp.Select\ &Line	<C-C>V
870
871nnoremenu 1.90 PopUp.Select\ &Block	<C-V>
872onoremenu 1.90 PopUp.Select\ &Block	<C-C><C-V>
873vnoremenu 1.90 PopUp.Select\ &Block	<C-C><C-V>
874inoremenu 1.90 PopUp.Select\ &Block	<C-O><C-V>
875cnoremenu 1.90 PopUp.Select\ &Block	<C-C><C-V>
876
877noremenu  <script> <silent> 1.100 PopUp.Select\ &All	:<C-U>call <SID>SelectAll()<CR>
878inoremenu <script> <silent> 1.100 PopUp.Select\ &All	<C-O>:call <SID>SelectAll()<CR>
879cnoremenu <script> <silent> 1.100 PopUp.Select\ &All	<C-U>call <SID>SelectAll()<CR>
880
881if has("spell")
882  " Spell suggestions in the popup menu.  Note that this will slow down the
883  " appearance of the menu!
884  func! <SID>SpellPopup()
885    if exists("s:changeitem") && s:changeitem != ''
886      call <SID>SpellDel()
887    endif
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 'amenu 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 'amenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
918
919	let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
920	exe 'amenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
921
922	amenu 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  au! MenuPopup * call <SID>SpellPopup()
942endif
943
944" The GUI toolbar (for MS-Windows and GTK)
945if has("toolbar")
946  an 1.10 ToolBar.Open			:browse confirm e<CR>
947  an <silent> 1.20 ToolBar.Save		:if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
948  an 1.30 ToolBar.SaveAll		:browse confirm wa<CR>
949
950  if has("printer")
951    an 1.40   ToolBar.Print		:hardcopy<CR>
952    vunmenu   ToolBar.Print
953    vnoremenu ToolBar.Print		:hardcopy<CR>
954  elseif has("unix")
955    an 1.40   ToolBar.Print		:w !lpr<CR>
956    vunmenu   ToolBar.Print
957    vnoremenu ToolBar.Print		:w !lpr<CR>
958  endif
959
960  an 1.45 ToolBar.-sep1-		<Nop>
961  an 1.50 ToolBar.Undo			u
962  an 1.60 ToolBar.Redo			<C-R>
963
964  an 1.65 ToolBar.-sep2-		<Nop>
965  vnoremenu 1.70 ToolBar.Cut		"+x
966  vnoremenu 1.80 ToolBar.Copy		"+y
967  cnoremenu 1.80 ToolBar.Copy		<C-Y>
968  nnoremenu 1.90 ToolBar.Paste		"+gP
969  cnoremenu	 ToolBar.Paste		<C-R>+
970  exe 'vnoremenu <script>	 ToolBar.Paste	' . paste#paste_cmd['v']
971  exe 'inoremenu <script>	 ToolBar.Paste	' . paste#paste_cmd['i']
972
973  if !has("gui_athena")
974    an 1.95   ToolBar.-sep3-		<Nop>
975    an 1.100  ToolBar.Replace		:promptrepl<CR>
976    vunmenu   ToolBar.Replace
977    vnoremenu ToolBar.Replace		y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
978    an 1.110  ToolBar.FindNext		n
979    an 1.120  ToolBar.FindPrev		N
980  endif
981
982  an 1.215 ToolBar.-sep5-		<Nop>
983  an <silent> 1.220 ToolBar.LoadSesn	:call <SID>LoadVimSesn()<CR>
984  an <silent> 1.230 ToolBar.SaveSesn	:call <SID>SaveVimSesn()<CR>
985  an 1.240 ToolBar.RunScript		:browse so<CR>
986
987  an 1.245 ToolBar.-sep6-		<Nop>
988  an 1.250 ToolBar.Make			:make<CR>
989  an 1.270 ToolBar.RunCtags		:exe "!" . g:ctags_command<CR>
990  an 1.280 ToolBar.TagJump		g<C-]>
991
992  an 1.295 ToolBar.-sep7-		<Nop>
993  an 1.300 ToolBar.Help			:help<CR>
994  an <silent> 1.310 ToolBar.FindHelp	:call <SID>Helpfind()<CR>
995
996" Only set the tooltips here if not done in a language menu file
997if exists("*Do_toolbar_tmenu")
998  call Do_toolbar_tmenu()
999else
1000  let did_toolbar_tmenu = 1
1001  tmenu ToolBar.Open		Open file
1002  tmenu ToolBar.Save		Save current file
1003  tmenu ToolBar.SaveAll		Save all files
1004  tmenu ToolBar.Print		Print
1005  tmenu ToolBar.Undo		Undo
1006  tmenu ToolBar.Redo		Redo
1007  tmenu ToolBar.Cut		Cut to clipboard
1008  tmenu ToolBar.Copy		Copy to clipboard
1009  tmenu ToolBar.Paste		Paste from Clipboard
1010  if !has("gui_athena")
1011    tmenu ToolBar.Find		Find...
1012    tmenu ToolBar.FindNext	Find Next
1013    tmenu ToolBar.FindPrev	Find Previous
1014    tmenu ToolBar.Replace		Find / Replace...
1015  endif
1016  tmenu ToolBar.LoadSesn	Chose a session to load
1017  tmenu ToolBar.SaveSesn	Save current session
1018  tmenu ToolBar.RunScript	Chose a Vim Script to run
1019  tmenu ToolBar.Make		Make current project (:make)
1020  tmenu ToolBar.RunCtags	Build tags in current directory tree (!ctags -R .)
1021  tmenu ToolBar.TagJump		Jump to tag under cursor
1022  tmenu ToolBar.Help		Vim Help
1023  tmenu ToolBar.FindHelp	Search Vim Help
1024endif
1025
1026" Select a session to load; default to current session name if present
1027fun! s:LoadVimSesn()
1028  if strlen(v:this_session) > 0
1029    let name = escape(v:this_session, ' \t#%$|<>"*?[{`')
1030  else
1031    let name = "Session.vim"
1032  endif
1033  execute "browse so " . name
1034endfun
1035
1036" Select a session to save; default to current session name if present
1037fun! s:SaveVimSesn()
1038  if strlen(v:this_session) == 0
1039    let v:this_session = "Session.vim"
1040  endif
1041  execute "browse mksession! " . escape(v:this_session, ' \t#%$|<>"*?[{`')
1042endfun
1043
1044endif
1045
1046endif " !exists("did_install_default_menus")
1047
1048" Define these items always, so that syntax can be switched on when it wasn't.
1049" But skip them when the Syntax menu was disabled by the user.
1050if !exists("did_install_syntax_menu")
1051  an 50.212 &Syntax.&Manual		:syn manual<CR>
1052  an 50.214 &Syntax.A&utomatic		:syn on<CR>
1053  an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1054  if !exists("*s:SynOnOff")
1055    fun s:SynOnOff()
1056      if has("syntax_items")
1057	syn clear
1058      else
1059	if !exists("g:syntax_on")
1060	  syn manual
1061	endif
1062	set syn=ON
1063      endif
1064    endfun
1065  endif
1066endif
1067
1068
1069" Install the Syntax menu only when filetype.vim has been loaded or when
1070" manual syntax highlighting is enabled.
1071" Avoid installing the Syntax menu twice.
1072if (exists("did_load_filetypes") || exists("syntax_on"))
1073	\ && !exists("did_install_syntax_menu")
1074  let did_install_syntax_menu = 1
1075
1076" Skip setting up the individual syntax selection menus unless
1077" do_syntax_sel_menu is defined (it takes quite a bit of time).
1078if exists("do_syntax_sel_menu")
1079  runtime! synmenu.vim
1080else
1081  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>
1082  an 50.195 &Syntax.-SEP1-		<Nop>
1083endif
1084
1085an 50.210 &Syntax.&Off			:syn off<CR>
1086an 50.700 &Syntax.-SEP3-		<Nop>
1087an 50.710 &Syntax.Co&lor\ test		:sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1088an 50.720 &Syntax.&Highlight\ test	:runtime syntax/hitest.vim<CR>
1089an 50.730 &Syntax.&Convert\ to\ HTML	:runtime syntax/2html.vim<CR>
1090
1091endif " !exists("did_install_syntax_menu")
1092
1093" Restore the previous value of 'cpoptions'.
1094let &cpo = s:cpo_save
1095unlet s:cpo_save
1096
1097" vim: set sw=2 :
1098