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