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