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