xref: /vim-8.2.3635/runtime/menu.vim (revision 044b68f4)
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 Jan 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 <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
889    " Return quickly if spell checking is not enabled.
890    if !&spell || &spelllang == ''
891      return
892    endif
893
894    let curcol = col('.')
895    let [w, a] = spellbadword()
896    if col('.') > curcol		" don't use word after the cursor
897      let w = ''
898      call cursor(0, curcol)	" put the cursor back where it was
899    endif
900    if w != ''
901      if a == 'caps'
902	let s:suglist = [substitute(w, '.*', '\u&', '')]
903      else
904	let s:suglist = spellsuggest(w, 10)
905      endif
906      if len(s:suglist) <= 0
907	call cursor(0, curcol)	" put the cursor back where it was
908      else
909	let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
910	let s:fromword = w
911	let pri = 1
912	for sug in s:suglist
913	  exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
914		\ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
915	  let pri += 1
916	endfor
917
918	let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
919	exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
920
921	let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
922	exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
923
924	anoremenu 1.8 PopUp.-SpellSep- :
925      endif
926    endif
927  endfunc
928
929  func! <SID>SpellReplace(n)
930    let l = getline('.')
931    call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
932	  \ . strpart(l, col('.') + len(s:fromword) - 1))
933  endfunc
934
935  func! <SID>SpellDel()
936    exe "aunmenu PopUp." . s:changeitem
937    exe "aunmenu PopUp." . s:additem
938    exe "aunmenu PopUp." . s:ignoreitem
939    aunmenu PopUp.-SpellSep-
940    let s:changeitem = ''
941  endfun
942
943  augroup SpellPopupMenu
944    au! MenuPopup * call <SID>SpellPopup()
945  augroup END
946endif
947
948" The GUI toolbar (for MS-Windows and GTK)
949if has("toolbar")
950  an 1.10 ToolBar.Open			:browse confirm e<CR>
951  an <silent> 1.20 ToolBar.Save		:if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
952  an 1.30 ToolBar.SaveAll		:browse confirm wa<CR>
953
954  if has("printer")
955    an 1.40   ToolBar.Print		:hardcopy<CR>
956    vunmenu   ToolBar.Print
957    vnoremenu ToolBar.Print		:hardcopy<CR>
958  elseif has("unix")
959    an 1.40   ToolBar.Print		:w !lpr<CR>
960    vunmenu   ToolBar.Print
961    vnoremenu ToolBar.Print		:w !lpr<CR>
962  endif
963
964  an 1.45 ToolBar.-sep1-		<Nop>
965  an 1.50 ToolBar.Undo			u
966  an 1.60 ToolBar.Redo			<C-R>
967
968  an 1.65 ToolBar.-sep2-		<Nop>
969  vnoremenu 1.70 ToolBar.Cut		"+x
970  vnoremenu 1.80 ToolBar.Copy		"+y
971  cnoremenu 1.80 ToolBar.Copy		<C-Y>
972  nnoremenu 1.90 ToolBar.Paste		"+gP
973  cnoremenu	 ToolBar.Paste		<C-R>+
974  exe 'vnoremenu <script>	 ToolBar.Paste	' . paste#paste_cmd['v']
975  exe 'inoremenu <script>	 ToolBar.Paste	' . paste#paste_cmd['i']
976
977  if !has("gui_athena")
978    an 1.95   ToolBar.-sep3-		<Nop>
979    an 1.100  ToolBar.Replace		:promptrepl<CR>
980    vunmenu   ToolBar.Replace
981    vnoremenu ToolBar.Replace		y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
982    an 1.110  ToolBar.FindNext		n
983    an 1.120  ToolBar.FindPrev		N
984  endif
985
986  an 1.215 ToolBar.-sep5-		<Nop>
987  an <silent> 1.220 ToolBar.LoadSesn	:call <SID>LoadVimSesn()<CR>
988  an <silent> 1.230 ToolBar.SaveSesn	:call <SID>SaveVimSesn()<CR>
989  an 1.240 ToolBar.RunScript		:browse so<CR>
990
991  an 1.245 ToolBar.-sep6-		<Nop>
992  an 1.250 ToolBar.Make			:make<CR>
993  an 1.270 ToolBar.RunCtags		:exe "!" . g:ctags_command<CR>
994  an 1.280 ToolBar.TagJump		g<C-]>
995
996  an 1.295 ToolBar.-sep7-		<Nop>
997  an 1.300 ToolBar.Help			:help<CR>
998  an <silent> 1.310 ToolBar.FindHelp	:call <SID>Helpfind()<CR>
999
1000" Only set the tooltips here if not done in a language menu file
1001if exists("*Do_toolbar_tmenu")
1002  call Do_toolbar_tmenu()
1003else
1004  let did_toolbar_tmenu = 1
1005  tmenu ToolBar.Open		Open file
1006  tmenu ToolBar.Save		Save current file
1007  tmenu ToolBar.SaveAll		Save all files
1008  tmenu ToolBar.Print		Print
1009  tmenu ToolBar.Undo		Undo
1010  tmenu ToolBar.Redo		Redo
1011  tmenu ToolBar.Cut		Cut to clipboard
1012  tmenu ToolBar.Copy		Copy to clipboard
1013  tmenu ToolBar.Paste		Paste from Clipboard
1014  if !has("gui_athena")
1015    tmenu ToolBar.Find		Find...
1016    tmenu ToolBar.FindNext	Find Next
1017    tmenu ToolBar.FindPrev	Find Previous
1018    tmenu ToolBar.Replace		Find / Replace...
1019  endif
1020  tmenu ToolBar.LoadSesn	Choose a session to load
1021  tmenu ToolBar.SaveSesn	Save current session
1022  tmenu ToolBar.RunScript	Choose a Vim Script to run
1023  tmenu ToolBar.Make		Make current project (:make)
1024  tmenu ToolBar.RunCtags	Build tags in current directory tree (!ctags -R .)
1025  tmenu ToolBar.TagJump		Jump to tag under cursor
1026  tmenu ToolBar.Help		Vim Help
1027  tmenu ToolBar.FindHelp	Search Vim Help
1028endif
1029
1030" Select a session to load; default to current session name if present
1031fun! s:LoadVimSesn()
1032  if strlen(v:this_session) > 0
1033    let name = escape(v:this_session, ' \t#%$|<>"*?[{`')
1034  else
1035    let name = "Session.vim"
1036  endif
1037  execute "browse so " . name
1038endfun
1039
1040" Select a session to save; default to current session name if present
1041fun! s:SaveVimSesn()
1042  if strlen(v:this_session) == 0
1043    let v:this_session = "Session.vim"
1044  endif
1045  execute "browse mksession! " . escape(v:this_session, ' \t#%$|<>"*?[{`')
1046endfun
1047
1048endif
1049
1050endif " !exists("did_install_default_menus")
1051
1052" Define these items always, so that syntax can be switched on when it wasn't.
1053" But skip them when the Syntax menu was disabled by the user.
1054if !exists("did_install_syntax_menu")
1055  an 50.212 &Syntax.&Manual		:syn manual<CR>
1056  an 50.214 &Syntax.A&utomatic		:syn on<CR>
1057  an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1058  if !exists("*s:SynOnOff")
1059    fun s:SynOnOff()
1060      if has("syntax_items")
1061	syn clear
1062      else
1063	if !exists("g:syntax_on")
1064	  syn manual
1065	endif
1066	set syn=ON
1067      endif
1068    endfun
1069  endif
1070endif
1071
1072
1073" Install the Syntax menu only when filetype.vim has been loaded or when
1074" manual syntax highlighting is enabled.
1075" Avoid installing the Syntax menu twice.
1076if (exists("did_load_filetypes") || exists("syntax_on"))
1077	\ && !exists("did_install_syntax_menu")
1078  let did_install_syntax_menu = 1
1079
1080" Skip setting up the individual syntax selection menus unless
1081" do_syntax_sel_menu is defined (it takes quite a bit of time).
1082if exists("do_syntax_sel_menu")
1083  runtime! synmenu.vim
1084else
1085  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>
1086  an 50.195 &Syntax.-SEP1-		<Nop>
1087endif
1088
1089an 50.210 &Syntax.&Off			:syn off<CR>
1090an 50.700 &Syntax.-SEP3-		<Nop>
1091an 50.710 &Syntax.Co&lor\ test		:sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1092an 50.720 &Syntax.&Highlight\ test	:runtime syntax/hitest.vim<CR>
1093an 50.730 &Syntax.&Convert\ to\ HTML	:runtime syntax/2html.vim<CR>
1094
1095endif " !exists("did_install_syntax_menu")
1096
1097" Restore the previous value of 'cpoptions'.
1098let &cpo = s:cpo_save
1099unlet s:cpo_save
1100
1101" vim: set sw=2 :
1102