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