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