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