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