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