xref: /vim-8.2.3635/runtime/menu.vim (revision f4cd3e80)
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:	2005 Oct 01
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.325 &File.&New<Tab>:enew			:confirm enew<CR>
102an <silent> 10.330 &File.&Close<Tab>:close
103	\ :if winheight(2) < 0 <Bar>
104	\   confirm enew <Bar>
105	\ else <Bar>
106	\   confirm close <Bar>
107	\ endif<CR>
108an 10.335 &File.-SEP1-				<Nop>
109an <silent> 10.340 &File.&Save<Tab>:w		:if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
110an 10.350 &File.Save\ &As\.\.\.<Tab>:sav	:browse confirm saveas<CR>
111
112if has("diff")
113  an 10.400 &File.-SEP2-			<Nop>
114  an 10.410 &File.Split\ &Diff\ with\.\.\.	:browse vert diffsplit<CR>
115  an 10.420 &File.Split\ Patched\ &By\.\.\.	:browse vert diffpatch<CR>
116endif
117
118if has("printer")
119  an 10.500 &File.-SEP3-			<Nop>
120  an 10.510 &File.&Print			:hardcopy<CR>
121  vunmenu   &File.&Print
122  vnoremenu &File.&Print			:hardcopy<CR>
123elseif has("unix")
124  an 10.500 &File.-SEP3-			<Nop>
125  an 10.510 &File.&Print			:w !lpr<CR>
126  vunmenu   &File.&Print
127  vnoremenu &File.&Print			:w !lpr<CR>
128endif
129an 10.600 &File.-SEP4-				<Nop>
130an 10.610 &File.Sa&ve-Exit<Tab>:wqa		:confirm wqa<CR>
131an 10.620 &File.E&xit<Tab>:qa			:confirm qa<CR>
132
133" Pasting blockwise and linewise selections is not possible in Insert and
134" Visual mode without the +virtualedit feature.  They are pasted as if they
135" were characterwise instead.  Add to that some tricks to leave the cursor in
136" the right position, also for "gi".
137" Note: the same stuff appears in mswin.vim.
138if has("virtualedit")
139  let s:paste_cmd = ":call <SID>Paste()<CR>"
140  func! <SID>Paste()
141    let ove = &ve
142    set ve=all
143    normal `^
144    if @+ != ''
145      normal "+gP
146    endif
147    let c = col(".")
148    normal i
149    if col(".") < c	" compensate for i<ESC> moving the cursor left
150      normal l
151    endif
152    let &ve = ove
153  endfunc
154else
155  let s:paste_cmd = "\"=@+.'xy'<CR>gPFx\"_2x"
156endif
157
158" Define the string to use for items that are present both in Edit, Popup and
159" Toolbar menu.
160if has("virtualedit")
161  let s:paste_v_cmd = '"-c<Esc>' . s:paste_cmd
162  let s:paste_i_cmd = '<Esc>' . s:paste_cmd . 'gi'
163else
164  let s:paste_v_cmd = '"-c<Esc>gix<Esc>' . s:paste_cmd . '"_x'
165  let s:paste_i_cmd = 'x<Esc>' . s:paste_cmd . '"_s'
166endif
167
168func! <SID>SelectAll()
169  exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
170endfunc
171
172
173" Edit menu
174an 20.310 &Edit.&Undo<Tab>u			u
175an 20.320 &Edit.&Redo<Tab>^R			<C-R>
176an 20.330 &Edit.Rep&eat<Tab>\.			.
177
178an 20.335 &Edit.-SEP1-				<Nop>
179vnoremenu 20.340 &Edit.Cu&t<Tab>"+x		"+x
180vnoremenu 20.350 &Edit.&Copy<Tab>"+y		"+y
181cnoremenu 20.350 &Edit.&Copy<Tab>"+y		<C-Y>
182nnoremenu 20.360 &Edit.&Paste<Tab>"+gP		"+gP
183cnoremenu	 &Edit.&Paste<Tab>"+gP		<C-R>+
184exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP	' . s:paste_v_cmd
185exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP	' . s:paste_i_cmd
186nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p	[p
187inoremenu	 &Edit.Put\ &Before<Tab>[p	<C-O>[p
188nnoremenu 20.380 &Edit.Put\ &After<Tab>]p	]p
189inoremenu	 &Edit.Put\ &After<Tab>]p	<C-O>]p
190if has("win32") || has("win16")
191  vnoremenu 20.390 &Edit.&Delete<Tab>x		x
192endif
193noremenu  <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG	:<C-U>call <SID>SelectAll()<CR>
194inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG	<C-O>:call <SID>SelectAll()<CR>
195cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG	<C-U>call <SID>SelectAll()<CR>
196
197an 20.405	 &Edit.-SEP2-				<Nop>
198if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
199  an 20.410	 &Edit.&Find\.\.\.			:promptfind<CR>
200  vunmenu	 &Edit.&Find\.\.\.
201  vnoremenu <silent>	 &Edit.&Find\.\.\.			y:call <SID>FixFText()<CR>:promptfind <C-R>"<CR>
202  an 20.420	 &Edit.Find\ and\ Rep&lace\.\.\.	:promptrepl<CR>
203  vunmenu	 &Edit.Find\ and\ Rep&lace\.\.\.
204  vnoremenu <silent>	 &Edit.Find\ and\ Rep&lace\.\.\.	y:call <SID>FixFText()<CR>:promptrepl <C-R>"<CR>
205else
206  an 20.410	 &Edit.&Find<Tab>/			/
207  an 20.420	 &Edit.Find\ and\ Rep&lace<Tab>:%s	:%s/
208  vunmenu	 &Edit.Find\ and\ Rep&lace<Tab>:%s
209  vnoremenu	 &Edit.Find\ and\ Rep&lace<Tab>:s	:s/
210endif
211
212an 20.425	 &Edit.-SEP3-				<Nop>
213an 20.430	 &Edit.Settings\ &Window		:options<CR>
214
215fun! s:FixFText()
216  " Fix text in nameless register to be used with :promptfind.
217  let @" = substitute(@", "[\r\n]", '\\n', 'g')
218endfun
219
220" Edit/Global Settings
221an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	:set hls! hls?<CR>
222an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic!	:set ic! ic?<CR>
223an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm!	:set sm! sm?<CR>
224
225an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\  :set so=1<CR>
226an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\  :set so=2<CR>
227an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\  :set so=3<CR>
228an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\  :set so=4<CR>
229an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\  :set so=5<CR>
230an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\  :set so=7<CR>
231an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\  :set so=10<CR>
232an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\  :set so=100<CR>
233
234an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
235an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
236an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
237an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
238an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
239an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im!	:set im!<CR>
240an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp!	:set cp!<CR>
241an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\.  :call <SID>SearchP()<CR>
242an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\.  :call <SID>TagFiles()<CR>
243"
244" GUI options
245an 20.440.300 &Edit.&Global\ Settings.-SEP1-				<Nop>
246an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar		:call <SID>ToggleGuiOption("T")<CR>
247an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
248an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar	:call <SID>ToggleGuiOption("l")<CR>
249an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
250
251fun! s:SearchP()
252  if !exists("g:menutrans_path_dialog")
253    let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
254  endif
255  let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
256  if n != ""
257    let &path = substitute(n, ' ', '\\ ', 'g')
258  endif
259endfun
260
261fun! s:TagFiles()
262  if !exists("g:menutrans_tags_dialog")
263    let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
264  endif
265  let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
266  if n != ""
267    let &tags = substitute(n, ' ', '\\ ', 'g')
268  endif
269endfun
270
271fun! s:ToggleGuiOption(option)
272    " If a:option is already set in guioptions, then we want to remove it
273    if match(&guioptions, "\\C" . a:option) > -1
274	exec "set go-=" . a:option
275    else
276	exec "set go+=" . a:option
277    endif
278endfun
279
280" Edit/File Settings
281
282" Boolean options
283an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu!	:set nu! nu?<CR>
284an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list!	:set list! list?<CR>
285an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap!	:set wrap! wrap?<CR>
286an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	:set lbr! lbr?<CR>
287an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et!	:set et! et?<CR>
288an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai!	:set ai! ai?<CR>
289an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin!	:set cin! cin?<CR>
290
291" other options
292an 20.440.600 &Edit.F&ile\ Settings.-SEP2-		<Nop>
293an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2	:set sw=2 sw?<CR>
294an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3	:set sw=3 sw?<CR>
295an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4	:set sw=4 sw?<CR>
296an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5	:set sw=5 sw?<CR>
297an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6	:set sw=6 sw?<CR>
298an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8	:set sw=8 sw?<CR>
299
300an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2	:set sts=2 sts?<CR>
301an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3	:set sts=3 sts?<CR>
302an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4	:set sts=4 sts?<CR>
303an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5	:set sts=5 sts?<CR>
304an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6	:set sts=6 sts?<CR>
305an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8	:set sts=8 sts?<CR>
306
307an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\.  :call <SID>TextWidth()<CR>
308an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\.  :call <SID>FileFormat()<CR>
309fun! s:TextWidth()
310  if !exists("g:menutrans_textwidth_dialog")
311    let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
312  endif
313  let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
314  if n != ""
315    " remove leading zeros to avoid it being used as an octal number
316    let &tw = substitute(n, "^0*", "", "")
317  endif
318endfun
319
320fun! s:FileFormat()
321  if !exists("g:menutrans_fileformat_dialog")
322    let g:menutrans_fileformat_dialog = "Select format for writing the file"
323  endif
324  if !exists("g:menutrans_fileformat_choices")
325    let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
326  endif
327  if &ff == "dos"
328    let def = 2
329  elseif &ff == "mac"
330    let def = 3
331  else
332    let def = 1
333  endif
334  let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
335  if n == 1
336    set ff=unix
337  elseif n == 2
338    set ff=dos
339  elseif n == 3
340    set ff=mac
341  endif
342endfun
343
344" Setup the Edit.Color Scheme submenu
345let s:n = globpath(&runtimepath, "colors/*.vim")
346let s:idx = 100
347while strlen(s:n) > 0
348  let s:i = stridx(s:n, "\n")
349  if s:i < 0
350    let s:name = s:n
351    let s:n = ""
352  else
353    let s:name = strpart(s:n, 0, s:i)
354    let s:n = strpart(s:n, s:i + 1, 19999)
355  endif
356  " Ignore case for VMS and windows
357  let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
358  exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
359  unlet s:name
360  unlet s:i
361  let s:idx = s:idx + 10
362endwhile
363unlet s:n
364unlet s:idx
365
366" Setup the Edit.Keymap submenu
367if has("keymap")
368  let s:n = globpath(&runtimepath, "keymap/*.vim")
369  if s:n != ""
370    let s:idx = 100
371    an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
372    while strlen(s:n) > 0
373      let s:i = stridx(s:n, "\n")
374      if s:i < 0
375	let s:name = s:n
376	let s:n = ""
377      else
378	let s:name = strpart(s:n, 0, s:i)
379	let s:n = strpart(s:n, s:i + 1, 19999)
380      endif
381      " Ignore case for VMS and windows
382      let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
383      exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
384      unlet s:name
385      unlet s:i
386      let s:idx = s:idx + 10
387    endwhile
388    unlet s:idx
389  endif
390  unlet s:n
391endif
392if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
393  an 20.470 &Edit.Select\ Fo&nt\.\.\.	:set guifont=*<CR>
394endif
395
396" Programming menu
397if !exists("g:ctags_command")
398  if has("vms")
399    let g:ctags_command = "mc vim:ctags ."
400  else
401    let g:ctags_command = "ctags -R ."
402  endif
403endif
404
405an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^]	g<C-]>
406vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
407vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^]	g<C-]>
408an 40.310 &Tools.Jump\ &back<Tab>^T		<C-T>
409an 40.320 &Tools.Build\ &Tags\ File		:exe "!" . g:ctags_command<CR>
410
411if has("folding") || has("spell")
412  an 40.330 &Tools.-SEP1-						<Nop>
413endif
414
415" Tools.Spelling Menu
416if has("spell")
417  an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On		:set spell<CR>
418  an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off		:set nospell<CR>
419  an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s	]s
420  an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s	[s
421  an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z?	z?
422  an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall	:spellrepall<CR>
423  an 40.335.200 &Tools.&Spelling.-SEP1-				<Nop>
424  an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en"	:set spl=en spell<CR>
425  an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au"	:set spl=en_au spell<CR>
426  an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca"	:set spl=en_ca spell<CR>
427  an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb"	:set spl=en_gb spell<CR>
428  an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz"	:set spl=en_nz spell<CR>
429  an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us"	:set spl=en_us spell<CR>
430  an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages	:call <SID>SpellLang()<CR>
431
432  let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
433  func! s:SpellLang()
434    for cmd in s:undo_spellang
435      exe "silent! " . cmd
436    endfor
437    let s:undo_spellang = []
438
439    if &enc == "iso-8859-15"
440      let enc = "latin1"
441    else
442      let enc = &enc
443    endif
444
445    let found = 0
446    let s = globpath(&rtp, "spell/*." . enc . ".spl")
447    if s != ""
448      let n = 300
449      for f in split(s, "\n")
450	let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
451	if nm != "en" && nm !~ '/'
452	  let found += 1
453	  let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
454	  exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
455	  let s:undo_spellang += ['aun ' . menuname]
456	endif
457	let n += 10
458      endfor
459    endif
460    if found == 0
461      echomsg "Could not find other spell files"
462    elseif found == 1
463      echomsg "Found spell file " . nm
464    else
465      echomsg "Found " . found . " more spell files"
466    endif
467    " Need to redo this when 'encoding' is changed.
468    augroup spellmenu
469    au! EncodingChanged * call <SID>SpellLang()
470    augroup END
471  endfun
472
473endif
474
475" Tools.Fold Menu
476if has("folding")
477  " open close folds
478  an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi		zi
479  an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv		zv
480  an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx	zMzx
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") || has("dos32")) && !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					    \ && !getbufvar(buf, "&bufsecret")
674      let s:bmenu_count = s:bmenu_count + 1
675    endif
676    let buf = buf + 1
677  endwhile
678  if s:bmenu_count <= &menuitems
679    let s:bmenu_short = 0
680  endif
681
682  " iterate through buffer list, adding each buffer to the menu:
683  let buf = 1
684  while buf <= bufnr('$')
685    if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
686					    \ && !getbufvar(buf, "&bufsecret")
687      call <SID>BMFilename(bufname(buf), buf)
688    endif
689    let buf = buf + 1
690  endwhile
691  let s:bmenu_wait = 0
692  aug buffer_list
693  au!
694  au BufCreate,BufFilePost * call <SID>BMAdd()
695  au BufDelete,BufFilePre * call <SID>BMRemove()
696  aug END
697endfunc
698
699func! s:BMHash(name)
700  " Make name all upper case, so that chars are between 32 and 96
701  let nm = substitute(a:name, ".*", '\U\0', "")
702  if has("ebcdic")
703    " HACK: Replace all non alphabetics with 'Z'
704    "       Just to make it work for now.
705    let nm = substitute(nm, "[^A-Z]", 'Z', "g")
706    let sp = char2nr('A') - 1
707  else
708    let sp = char2nr(' ')
709  endif
710  " convert first six chars into a number for sorting:
711  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)
712endfunc
713
714func! s:BMHash2(name)
715  let nm = substitute(a:name, ".", '\L\0', "")
716  " Not exactly right for EBCDIC...
717  if nm[0] < 'a' || nm[0] > 'z'
718    return '&others.'
719  elseif nm[0] <= 'd'
720    return '&abcd.'
721  elseif nm[0] <= 'h'
722    return '&efgh.'
723  elseif nm[0] <= 'l'
724    return '&ijkl.'
725  elseif nm[0] <= 'p'
726    return '&mnop.'
727  elseif nm[0] <= 't'
728    return '&qrst.'
729  else
730    return '&u-z.'
731  endif
732endfunc
733
734" insert a buffer name into the buffer menu:
735func! s:BMFilename(name, num)
736  if isdirectory(a:name)
737    return
738  endif
739  let munge = <SID>BMMunge(a:name, a:num)
740  let hash = <SID>BMHash(munge)
741  if s:bmenu_short == 0
742    let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
743  else
744    let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
745  endif
746  " set 'cpo' to include the <CR>
747  let cpo_save = &cpo
748  set cpo&vim
749  exe name . ' :confirm b' . a:num . '<CR>'
750  let &cpo = cpo_save
751endfunc
752
753" Truncate a long path to fit it in a menu item.
754if !exists("g:bmenu_max_pathlen")
755  let g:bmenu_max_pathlen = 35
756endif
757func! s:BMTruncName(fname)
758  let name = a:fname
759  if g:bmenu_max_pathlen < 5
760    let name = ""
761  else
762    let len = strlen(name)
763    if len > g:bmenu_max_pathlen
764      let amountl = (g:bmenu_max_pathlen / 2) - 2
765      let amountr = g:bmenu_max_pathlen - amountl - 3
766      let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
767      let left = substitute(name, pattern, '\1', '')
768      let right = substitute(name, pattern, '\2', '')
769      if strlen(left) + strlen(right) < len
770	let name = left . '...' . right
771      endif
772    endif
773  endif
774  return name
775endfunc
776
777func! s:BMMunge(fname, bnum)
778  let name = a:fname
779  if name == ''
780    if !exists("g:menutrans_no_file")
781      let g:menutrans_no_file = "[No file]"
782    endif
783    let name = g:menutrans_no_file
784  else
785    let name = fnamemodify(name, ':p:~')
786  endif
787  " detach file name and separate it out:
788  let name2 = fnamemodify(name, ':t')
789  if a:bnum >= 0
790    let name2 = name2 . ' (' . a:bnum . ')'
791  endif
792  let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
793  let name = escape(name, "\\. \t|")
794  let name = substitute(name, "&", "&&", "g")
795  let name = substitute(name, "\n", "^@", "g")
796  return name
797endfunc
798
799" When just starting Vim, load the buffer menu later
800if has("vim_starting")
801  augroup LoadBufferMenu
802    au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
803    au  VimEnter * au! LoadBufferMenu
804  augroup END
805else
806  call <SID>BMShow()
807endif
808
809endif " !exists("no_buffers_menu")
810
811" Window menu
812an 70.300 &Window.&New<Tab>^Wn			<C-W>n
813an 70.310 &Window.S&plit<Tab>^Ws		<C-W>s
814an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^	<C-W><C-^>
815an 70.330 &Window.Split\ &Vertically<Tab>^Wv	<C-W>v
816if has("vertsplit")
817  an <silent> 70.332 &Window.Split\ File\ E&xplorer	:call MenuExplOpen()<CR>
818  if !exists("*MenuExplOpen")
819    fun MenuExplOpen()
820      if @% == ""
821	20vsp .
822      else
823	exe "20vsp " . expand("%:p:h")
824      endif
825    endfun
826  endif
827endif
828an 70.335 &Window.-SEP1-				<Nop>
829an 70.340 &Window.&Close<Tab>^Wc			:confirm close<CR>
830an 70.345 &Window.Close\ &Other(s)<Tab>^Wo		:confirm only<CR>
831an 70.350 &Window.-SEP2-				<Nop>
832an 70.355 &Window.Move\ &To.&Top<Tab>^WK		<C-W>K
833an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ		<C-W>J
834an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH		<C-W>H
835an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL	<C-W>L
836an 70.360 &Window.Rotate\ &Up<Tab>^WR			<C-W>R
837an 70.362 &Window.Rotate\ &Down<Tab>^Wr			<C-W>r
838an 70.365 &Window.-SEP3-				<Nop>
839an 70.370 &Window.&Equal\ Size<Tab>^W=			<C-W>=
840an 70.380 &Window.&Max\ Height<Tab>^W_			<C-W>_
841an 70.390 &Window.M&in\ Height<Tab>^W1_			<C-W>1_
842an 70.400 &Window.Max\ &Width<Tab>^W\|			<C-W>\|
843an 70.410 &Window.Min\ Widt&h<Tab>^W1\|			<C-W>1\|
844
845" The popup menu
846an 1.10 PopUp.&Undo			u
847an 1.15 PopUp.-SEP1-			<Nop>
848vnoremenu 1.20 PopUp.Cu&t		"+x
849vnoremenu 1.30 PopUp.&Copy		"+y
850cnoremenu 1.30 PopUp.&Copy		<C-Y>
851nnoremenu 1.40 PopUp.&Paste		"+gP
852cnoremenu 1.40 PopUp.&Paste		<C-R>+
853exe 'vnoremenu <script> 1.40 PopUp.&Paste	' . s:paste_v_cmd
854exe 'inoremenu <script> 1.40 PopUp.&Paste	' . s:paste_i_cmd
855vnoremenu 1.50 PopUp.&Delete		x
856an 1.55 PopUp.-SEP2-			<Nop>
857vnoremenu 1.60 PopUp.Select\ Blockwise	<C-V>
858
859nnoremenu 1.70 PopUp.Select\ &Word	vaw
860onoremenu 1.70 PopUp.Select\ &Word	aw
861vnoremenu 1.70 PopUp.Select\ &Word	<C-C>vaw
862inoremenu 1.70 PopUp.Select\ &Word	<C-O>vaw
863cnoremenu 1.70 PopUp.Select\ &Word	<C-C>vaw
864
865nnoremenu 1.73 PopUp.Select\ &Sentence	vas
866onoremenu 1.73 PopUp.Select\ &Sentence	as
867vnoremenu 1.73 PopUp.Select\ &Sentence	<C-C>vas
868inoremenu 1.73 PopUp.Select\ &Sentence	<C-O>vas
869cnoremenu 1.73 PopUp.Select\ &Sentence	<C-C>vas
870
871nnoremenu 1.77 PopUp.Select\ Pa&ragraph	vap
872onoremenu 1.77 PopUp.Select\ Pa&ragraph	ap
873vnoremenu 1.77 PopUp.Select\ Pa&ragraph	<C-C>vap
874inoremenu 1.77 PopUp.Select\ Pa&ragraph	<C-O>vap
875cnoremenu 1.77 PopUp.Select\ Pa&ragraph	<C-C>vap
876
877nnoremenu 1.80 PopUp.Select\ &Line	V
878onoremenu 1.80 PopUp.Select\ &Line	<C-C>V
879vnoremenu 1.80 PopUp.Select\ &Line	<C-C>V
880inoremenu 1.80 PopUp.Select\ &Line	<C-O>V
881cnoremenu 1.80 PopUp.Select\ &Line	<C-C>V
882
883nnoremenu 1.90 PopUp.Select\ &Block	<C-V>
884onoremenu 1.90 PopUp.Select\ &Block	<C-C><C-V>
885vnoremenu 1.90 PopUp.Select\ &Block	<C-C><C-V>
886inoremenu 1.90 PopUp.Select\ &Block	<C-O><C-V>
887cnoremenu 1.90 PopUp.Select\ &Block	<C-C><C-V>
888
889noremenu  <script> <silent> 1.100 PopUp.Select\ &All	:<C-U>call <SID>SelectAll()<CR>
890inoremenu <script> <silent> 1.100 PopUp.Select\ &All	<C-O>:call <SID>SelectAll()<CR>
891cnoremenu <script> <silent> 1.100 PopUp.Select\ &All	<C-U>call <SID>SelectAll()<CR>
892
893if has("spell")
894  " Spell suggestions in the popup menu.  Note that this will slow down the
895  " appearance of the menu!
896  func! <SID>SpellPopup()
897    if exists("s:changeitem") && s:changeitem != ''
898      call <SID>SpellDel()
899    endif
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      call cursor(0, curcol)	" put the cursor back where it was
909    endif
910    if w != ''
911      let s:suglist = spellsuggest(w, 10)
912      if len(s:suglist) <= 0
913	call cursor(0, curcol)	" put the cursor back where it was
914      else
915	let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
916	let s:fromword = w
917	let pri = 1
918	for sug in s:suglist
919	  exe 'amenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
920		\ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
921	  let pri += 1
922	endfor
923
924	let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
925	exe 'amenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
926
927	let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
928	exe 'amenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
929
930	amenu 1.8 PopUp.-SpellSep- :
931      endif
932    endif
933  endfunc
934
935  func! <SID>SpellReplace(n)
936    let l = getline('.')
937    call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
938	  \ . strpart(l, col('.') + len(s:fromword) - 1))
939  endfunc
940
941  func! <SID>SpellDel()
942    exe "aunmenu PopUp." . s:changeitem
943    exe "aunmenu PopUp." . s:additem
944    exe "aunmenu PopUp." . s:ignoreitem
945    aunmenu PopUp.-SpellSep-
946    let s:changeitem = ''
947  endfun
948
949  au! MenuPopup * call <SID>SpellPopup()
950endif
951
952" The GUI toolbar (for MS-Windows and GTK)
953if has("toolbar")
954  an 1.10 ToolBar.Open			:browse confirm e<CR>
955  an <silent> 1.20 ToolBar.Save		:if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
956  an 1.30 ToolBar.SaveAll		:browse confirm wa<CR>
957
958  if has("printer")
959    an 1.40   ToolBar.Print		:hardcopy<CR>
960    vunmenu   ToolBar.Print
961    vnoremenu ToolBar.Print		:hardcopy<CR>
962  elseif has("unix")
963    an 1.40   ToolBar.Print		:w !lpr<CR>
964    vunmenu   ToolBar.Print
965    vnoremenu ToolBar.Print		:w !lpr<CR>
966  endif
967
968  an 1.45 ToolBar.-sep1-		<Nop>
969  an 1.50 ToolBar.Undo			u
970  an 1.60 ToolBar.Redo			<C-R>
971
972  an 1.65 ToolBar.-sep2-		<Nop>
973  vnoremenu 1.70 ToolBar.Cut		"+x
974  vnoremenu 1.80 ToolBar.Copy		"+y
975  cnoremenu 1.80 ToolBar.Copy		<C-Y>
976  nnoremenu 1.90 ToolBar.Paste		"+gP
977  cnoremenu	 ToolBar.Paste		<C-R>+
978  exe 'vnoremenu <script>	 ToolBar.Paste	' . s:paste_v_cmd
979  exe 'inoremenu <script>	 ToolBar.Paste	' . s:paste_i_cmd
980
981  if !has("gui_athena")
982    an 1.95   ToolBar.-sep3-		<Nop>
983    an 1.100  ToolBar.Replace		:promptrepl<CR>
984    vunmenu   ToolBar.Replace
985    vnoremenu ToolBar.Replace		y:promptrepl <C-R>"<CR>
986    an 1.110  ToolBar.FindNext		n
987    an 1.120  ToolBar.FindPrev		N
988  endif
989
990  an 1.215 ToolBar.-sep5-		<Nop>
991  an <silent> 1.220 ToolBar.LoadSesn	:call <SID>LoadVimSesn()<CR>
992  an <silent> 1.230 ToolBar.SaveSesn	:call <SID>SaveVimSesn()<CR>
993  an 1.240 ToolBar.RunScript		:browse so<CR>
994
995  an 1.245 ToolBar.-sep6-		<Nop>
996  an 1.250 ToolBar.Make			:make<CR>
997  an 1.270 ToolBar.RunCtags		:exe "!" . g:ctags_command<CR>
998  an 1.280 ToolBar.TagJump		g<C-]>
999
1000  an 1.295 ToolBar.-sep7-		<Nop>
1001  an 1.300 ToolBar.Help			:help<CR>
1002  an <silent> 1.310 ToolBar.FindHelp	:call <SID>Helpfind()<CR>
1003
1004" Only set the tooltips here if not done in a language menu file
1005if exists("*Do_toolbar_tmenu")
1006  call Do_toolbar_tmenu()
1007else
1008  let did_toolbar_tmenu = 1
1009  tmenu ToolBar.Open		Open file
1010  tmenu ToolBar.Save		Save current file
1011  tmenu ToolBar.SaveAll		Save all files
1012  tmenu ToolBar.Print		Print
1013  tmenu ToolBar.Undo		Undo
1014  tmenu ToolBar.Redo		Redo
1015  tmenu ToolBar.Cut		Cut to clipboard
1016  tmenu ToolBar.Copy		Copy to clipboard
1017  tmenu ToolBar.Paste		Paste from Clipboard
1018  if !has("gui_athena")
1019    tmenu ToolBar.Find		Find...
1020    tmenu ToolBar.FindNext	Find Next
1021    tmenu ToolBar.FindPrev	Find Previous
1022    tmenu ToolBar.Replace		Find / Replace...
1023  endif
1024  tmenu ToolBar.LoadSesn	Chose a session to load
1025  tmenu ToolBar.SaveSesn	Save current session
1026  tmenu ToolBar.RunScript	Chose a Vim Script to run
1027  tmenu ToolBar.Make		Make current project (:make)
1028  tmenu ToolBar.RunCtags	Build tags in current directory tree (!ctags -R .)
1029  tmenu ToolBar.TagJump		Jump to tag under cursor
1030  tmenu ToolBar.Help		Vim Help
1031  tmenu ToolBar.FindHelp	Search Vim Help
1032endif
1033
1034" Select a session to load; default to current session name if present
1035fun! s:LoadVimSesn()
1036  if strlen(v:this_session) > 0
1037    let name = v:this_session
1038  else
1039    let name = "Session.vim"
1040  endif
1041  execute "browse so " . name
1042endfun
1043
1044" Select a session to save; default to current session name if present
1045fun! s:SaveVimSesn()
1046  if strlen(v:this_session) == 0
1047    let v:this_session = "Session.vim"
1048  endif
1049  execute "browse mksession! " . v:this_session
1050endfun
1051
1052endif
1053
1054endif " !exists("did_install_default_menus")
1055
1056" Define these items always, so that syntax can be switched on when it wasn't.
1057" But skip them when the Syntax menu was disabled by the user.
1058if !exists("did_install_syntax_menu")
1059  an 50.212 &Syntax.&Manual		:syn manual<CR>
1060  an 50.214 &Syntax.A&utomatic		:syn on<CR>
1061  an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1062  if !exists("*s:SynOnOff")
1063    fun s:SynOnOff()
1064      if has("syntax_items")
1065	syn clear
1066      else
1067	if !exists("g:syntax_on")
1068	  syn manual
1069	endif
1070	set syn=ON
1071      endif
1072    endfun
1073  endif
1074endif
1075
1076
1077" Install the Syntax menu only when filetype.vim has been loaded or when
1078" manual syntax highlighting is enabled.
1079" Avoid installing the Syntax menu twice.
1080if (exists("did_load_filetypes") || exists("syntax_on"))
1081	\ && !exists("did_install_syntax_menu")
1082  let did_install_syntax_menu = 1
1083
1084" Skip setting up the individual syntax selection menus unless
1085" do_syntax_sel_menu is defined (it takes quite a bit of time).
1086if exists("do_syntax_sel_menu")
1087  runtime! synmenu.vim
1088else
1089  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>
1090  an 50.195 &Syntax.-SEP1-		<Nop>
1091endif
1092
1093an 50.210 &Syntax.&Off			:syn off<CR>
1094an 50.700 &Syntax.-SEP3-		<Nop>
1095an 50.710 &Syntax.Co&lor\ test		:sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1096an 50.720 &Syntax.&Highlight\ test	:runtime syntax/hitest.vim<CR>
1097an 50.730 &Syntax.&Convert\ to\ HTML	:runtime syntax/2html.vim<CR>
1098
1099endif " !exists("did_install_syntax_menu")
1100
1101unlet! s:paste_i_cmd s:paste_v_cmd s:paste_cmd
1102
1103" Restore the previous value of 'cpoptions'.
1104let &cpo = s:cpo_save
1105unlet s:cpo_save
1106
1107" vim: set sw=2 :
1108