xref: /vim-8.2.3635/runtime/menu.vim (revision 0fa313a7)
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 Jul 30
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	 &Edit.&Find\.\.\.			y:promptfind <C-R>"<CR>
202  an 20.420	 &Edit.Find\ and\ Rep&lace\.\.\.	:promptrepl<CR>
203  vunmenu	 &Edit.Find\ and\ Rep&lace\.\.\.
204  vnoremenu	 &Edit.Find\ and\ Rep&lace\.\.\.	y: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
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.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list!	:set list! list?<CR>
280an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap!	:set wrap! wrap?<CR>
281an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	:set lbr! lbr?<CR>
282an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et!	:set et! et?<CR>
283an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai!	:set ai! ai?<CR>
284an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin!	:set cin! cin?<CR>
285
286" other options
287an 20.440.600 &Edit.F&ile\ Settings.-SEP2-		<Nop>
288an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2	:set sw=2 sw?<CR>
289an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3	:set sw=3 sw?<CR>
290an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4	:set sw=4 sw?<CR>
291an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5	:set sw=5 sw?<CR>
292an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6	:set sw=6 sw?<CR>
293an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8	:set sw=8 sw?<CR>
294
295an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2	:set sts=2 sts?<CR>
296an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3	:set sts=3 sts?<CR>
297an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4	:set sts=4 sts?<CR>
298an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5	:set sts=5 sts?<CR>
299an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6	:set sts=6 sts?<CR>
300an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8	:set sts=8 sts?<CR>
301
302an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\.  :call <SID>TextWidth()<CR>
303an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\.  :call <SID>FileFormat()<CR>
304fun! s:TextWidth()
305  if !exists("g:menutrans_textwidth_dialog")
306    let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
307  endif
308  let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
309  if n != ""
310    " remove leading zeros to avoid it being used as an octal number
311    let &tw = substitute(n, "^0*", "", "")
312  endif
313endfun
314
315fun! s:FileFormat()
316  if !exists("g:menutrans_fileformat_dialog")
317    let g:menutrans_fileformat_dialog = "Select format for writing the file"
318  endif
319  if !exists("g:menutrans_fileformat_choices")
320    let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
321  endif
322  if &ff == "dos"
323    let def = 2
324  elseif &ff == "mac"
325    let def = 3
326  else
327    let def = 1
328  endif
329  let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
330  if n == 1
331    set ff=unix
332  elseif n == 2
333    set ff=dos
334  elseif n == 3
335    set ff=mac
336  endif
337endfun
338
339" Setup the Edit.Color Scheme submenu
340let s:n = globpath(&runtimepath, "colors/*.vim")
341let s:idx = 100
342while strlen(s:n) > 0
343  let s:i = stridx(s:n, "\n")
344  if s:i < 0
345    let s:name = s:n
346    let s:n = ""
347  else
348    let s:name = strpart(s:n, 0, s:i)
349    let s:n = strpart(s:n, s:i + 1, 19999)
350  endif
351  " Ignore case for VMS and windows
352  let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
353  exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
354  unlet s:name
355  unlet s:i
356  let s:idx = s:idx + 10
357endwhile
358unlet s:n
359unlet s:idx
360
361" Setup the Edit.Keymap submenu
362if has("keymap")
363  let s:n = globpath(&runtimepath, "keymap/*.vim")
364  if s:n != ""
365    let s:idx = 100
366    an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
367    while strlen(s:n) > 0
368      let s:i = stridx(s:n, "\n")
369      if s:i < 0
370	let s:name = s:n
371	let s:n = ""
372      else
373	let s:name = strpart(s:n, 0, s:i)
374	let s:n = strpart(s:n, s:i + 1, 19999)
375      endif
376      " Ignore case for VMS and windows
377      let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
378      exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
379      unlet s:name
380      unlet s:i
381      let s:idx = s:idx + 10
382    endwhile
383    unlet s:idx
384  endif
385  unlet s:n
386endif
387if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
388  an 20.470 &Edit.Select\ Fo&nt\.\.\.	:set guifont=*<CR>
389endif
390
391" Programming menu
392if !exists("g:ctags_command")
393  if has("vms")
394    let g:ctags_command = "mc vim:ctags ."
395  else
396    let g:ctags_command = "ctags -R ."
397  endif
398endif
399
400an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^]	g<C-]>
401vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
402vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^]	g<C-]>
403an 40.310 &Tools.Jump\ &back<Tab>^T		<C-T>
404an 40.320 &Tools.Build\ &Tags\ File		:exe "!" . g:ctags_command<CR>
405
406if has("folding") || has("spell")
407  an 40.330 &Tools.-SEP1-						<Nop>
408endif
409
410" Tools.Spelling Menu
411if has("spell")
412  an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On		:set spell<CR>
413  an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off		:set nospell<CR>
414  an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s	]s
415  an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s	[s
416  an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z?	z?
417  an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall	:spellrepall<CR>
418  an 40.335.200 &Tools.&Spelling.-SEP1-				<Nop>
419  an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en"	:set spl=en spell<CR>
420  an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au"	:set spl=en_au spell<CR>
421  an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca"	:set spl=en_ca spell<CR>
422  an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb"	:set spl=en_gb spell<CR>
423  an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz"	:set spl=en_nz spell<CR>
424  an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us"	:set spl=en_us spell<CR>
425  an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages	:call <SID>SpellLang()<CR>
426
427  let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
428  func! s:SpellLang()
429    for cmd in s:undo_spellang
430      exe "silent! " . cmd
431    endfor
432    let s:undo_spellang = []
433
434    if &enc == "iso-8859-15"
435      let enc = "latin1"
436    else
437      let enc = &enc
438    endif
439
440    let found = 0
441    let s = globpath(&rtp, "spell/*." . enc . ".spl")
442    if s != ""
443      let n = 300
444      for f in split(s, "\n")
445	let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
446	if nm != "en" && nm !~ '/'
447	  let found += 1
448	  let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
449	  exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
450	  let s:undo_spellang += ['aun ' . menuname]
451	endif
452	let n += 10
453      endfor
454    endif
455    if found == 0
456      echomsg "Could not find other spell files"
457    elseif found == 1
458      echomsg "Found spell file " . nm
459    else
460      echomsg "Found " . found . " more spell files"
461    endif
462    " Need to redo this when 'encoding' is changed.
463    augroup spellmenu
464    au! EncodingChanged * call <SID>SpellLang()
465    augroup END
466  endfun
467
468endif
469
470" Tools.Fold Menu
471if has("folding")
472  " open close folds
473  an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi		zi
474  an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv		zv
475  an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx	zMzx
476  an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm		zm
477  an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM		zM
478  an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr		zr
479  an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR		zR
480  " fold method
481  an 40.340.200 &Tools.&Folding.-SEP1-			<Nop>
482  an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual	:set fdm=manual<CR>
483  an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent	:set fdm=indent<CR>
484  an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
485  an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax	:set fdm=syntax<CR>
486  an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff	:set fdm=diff<CR>
487  an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker	:set fdm=marker<CR>
488  " create and delete folds
489  vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf	zf
490  an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd		zd
491  an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD	zD
492  " moving around in folds
493  an 40.340.300 &Tools.&Folding.-SEP2-				<Nop>
494  an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ 	:set fdc=0<CR>
495  an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ 	:set fdc=2<CR>
496  an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ 	:set fdc=3<CR>
497  an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ 	:set fdc=4<CR>
498  an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ 	:set fdc=5<CR>
499  an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ 	:set fdc=6<CR>
500  an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ 	:set fdc=7<CR>
501  an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ 	:set fdc=8<CR>
502endif  " has folding
503
504if has("diff")
505  an 40.350.100 &Tools.&Diff.&Update		:diffupdate<CR>
506  an 40.350.110 &Tools.&Diff.&Get\ Block	:diffget<CR>
507  vunmenu &Tools.&Diff.&Get\ Block
508  vnoremenu &Tools.&Diff.&Get\ Block		:diffget<CR>
509  an 40.350.120 &Tools.&Diff.&Put\ Block	:diffput<CR>
510  vunmenu &Tools.&Diff.&Put\ Block
511  vnoremenu &Tools.&Diff.&Put\ Block		:diffput<CR>
512endif
513
514an 40.358 &Tools.-SEP2-					<Nop>
515an 40.360 &Tools.&Make<Tab>:make			:make<CR>
516an 40.370 &Tools.&List\ Errors<Tab>:cl			:cl<CR>
517an 40.380 &Tools.L&ist\ Messages<Tab>:cl!		:cl!<CR>
518an 40.390 &Tools.&Next\ Error<Tab>:cn			:cn<CR>
519an 40.400 &Tools.&Previous\ Error<Tab>:cp		:cp<CR>
520an 40.410 &Tools.&Older\ List<Tab>:cold			:colder<CR>
521an 40.420 &Tools.N&ewer\ List<Tab>:cnew			:cnewer<CR>
522an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin	:cwin<CR>
523an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen	:copen<CR>
524an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose	:cclose<CR>
525
526an 40.520 &Tools.-SEP3-					<Nop>
527an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
528	\ :call <SID>XxdConv()<CR>
529an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
530	\ :call <SID>XxdBack()<CR>
531
532" Use a function to do the conversion, so that it also works with 'insertmode'
533" set.
534func! s:XxdConv()
535  let mod = &mod
536  if has("vms")
537    %!mc vim:xxd
538  else
539    call s:XxdFind()
540    exe '%!"' . g:xxdprogram . '"'
541  endif
542  if getline(1) =~ "^0000000:"		" only if it worked
543    set ft=xxd
544  endif
545  let &mod = mod
546endfun
547
548func! s:XxdBack()
549  let mod = &mod
550  if has("vms")
551    %!mc vim:xxd -r
552  else
553    call s:XxdFind()
554    exe '%!"' . g:xxdprogram . '" -r'
555  endif
556  set ft=
557  doautocmd filetypedetect BufReadPost
558  let &mod = mod
559endfun
560
561func! s:XxdFind()
562  if !exists("g:xxdprogram")
563    " On the PC xxd may not be in the path but in the install directory
564    if (has("win32") || has("dos32")) && !executable("xxd")
565      let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
566    else
567      let g:xxdprogram = "xxd"
568    endif
569  endif
570endfun
571
572" Setup the Tools.Compiler submenu
573let s:n = globpath(&runtimepath, "compiler/*.vim")
574let s:idx = 100
575while strlen(s:n) > 0
576  let s:i = stridx(s:n, "\n")
577  if s:i < 0
578    let s:name = s:n
579    let s:n = ""
580  else
581    let s:name = strpart(s:n, 0, s:i)
582    let s:n = strpart(s:n, s:i + 1, 19999)
583  endif
584  " Ignore case for VMS and windows
585  let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
586  exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
587  unlet s:name
588  unlet s:i
589  let s:idx = s:idx + 10
590endwhile
591unlet s:n
592unlet s:idx
593
594if !exists("no_buffers_menu")
595
596" Buffer list menu -- Setup functions & actions
597
598" wait with building the menu until after loading 'session' files. Makes
599" startup faster.
600let s:bmenu_wait = 1
601
602if !exists("bmenu_priority")
603  let bmenu_priority = 60
604endif
605
606func! s:BMAdd()
607  if s:bmenu_wait == 0
608    " when adding too many buffers, redraw in short format
609    if s:bmenu_count == &menuitems && s:bmenu_short == 0
610      call s:BMShow()
611    else
612      call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
613      let s:bmenu_count = s:bmenu_count + 1
614    endif
615  endif
616endfunc
617
618func! s:BMRemove()
619  if s:bmenu_wait == 0
620    let name = expand("<afile>")
621    if isdirectory(name)
622      return
623    endif
624    let munge = <SID>BMMunge(name, expand("<abuf>"))
625
626    if s:bmenu_short == 0
627      exe 'silent! aun &Buffers.' . munge
628    else
629      exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
630    endif
631    let s:bmenu_count = s:bmenu_count - 1
632  endif
633endfunc
634
635" Create the buffer menu (delete an existing one first).
636func! s:BMShow(...)
637  let s:bmenu_wait = 1
638  let s:bmenu_short = 1
639  let s:bmenu_count = 0
640  "
641  " get new priority, if exists
642  if a:0 == 1
643    let g:bmenu_priority = a:1
644  endif
645
646  " remove old menu, if exists; keep one entry to avoid a torn off menu to
647  " disappear.
648  silent! unmenu &Buffers
649  exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
650  silent! unmenu! &Buffers
651
652  " create new menu; set 'cpo' to include the <CR>
653  let cpo_save = &cpo
654  set cpo&vim
655  exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
656  exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
657  exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
658  exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
659  exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
660  exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
661  let &cpo = cpo_save
662  unmenu &Buffers.Dummy
663
664  " figure out how many buffers there are
665  let buf = 1
666  while buf <= bufnr('$')
667    if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
668					    \ && !getbufvar(buf, "&bufsecret")
669      let s:bmenu_count = s:bmenu_count + 1
670    endif
671    let buf = buf + 1
672  endwhile
673  if s:bmenu_count <= &menuitems
674    let s:bmenu_short = 0
675  endif
676
677  " iterate through buffer list, adding each buffer to the menu:
678  let buf = 1
679  while buf <= bufnr('$')
680    if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
681					    \ && !getbufvar(buf, "&bufsecret")
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 " . 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	' . s:paste_v_cmd
849exe 'inoremenu <script> 1.40 PopUp.&Paste	' . s:paste_i_cmd
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    if !&spell || &spelllang == ''
896      return
897    endif
898
899    let curcol = col('.')
900    let w = spellbadword()
901    if col('.') > curcol		" don't use word after the cursor
902      let w = ''
903      call cursor(0, curcol)	" put the cursor back where it was
904    endif
905    if w != ''
906      let s:suglist = spellsuggest(w, 10)
907      if len(s:suglist) <= 0
908	call cursor(0, curcol)	" put the cursor back where it was
909      else
910	let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
911	let s:fromword = w
912	let pri = 1
913	for sug in s:suglist
914	  exe 'amenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
915		\ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
916	  let pri += 1
917	endfor
918
919	let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
920	exe 'amenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
921
922	let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
923	exe 'amenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
924
925	amenu 1.8 PopUp.-SpellSep- :
926      endif
927    endif
928  endfunc
929
930  func! <SID>SpellReplace(n)
931    let l = getline('.')
932    call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
933	  \ . strpart(l, col('.') + len(s:fromword) - 1))
934  endfunc
935
936  func! <SID>SpellDel()
937    exe "aunmenu PopUp." . s:changeitem
938    exe "aunmenu PopUp." . s:additem
939    exe "aunmenu PopUp." . s:ignoreitem
940    aunmenu PopUp.-SpellSep-
941    let s:changeitem = ''
942  endfun
943
944  au! MenuPopup * call <SID>SpellPopup()
945endif
946
947" The GUI toolbar (for MS-Windows and GTK)
948if has("toolbar")
949  an 1.10 ToolBar.Open			:browse confirm e<CR>
950  an <silent> 1.20 ToolBar.Save		:if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
951  an 1.30 ToolBar.SaveAll		:browse confirm wa<CR>
952
953  if has("printer")
954    an 1.40   ToolBar.Print		:hardcopy<CR>
955    vunmenu   ToolBar.Print
956    vnoremenu ToolBar.Print		:hardcopy<CR>
957  elseif has("unix")
958    an 1.40   ToolBar.Print		:w !lpr<CR>
959    vunmenu   ToolBar.Print
960    vnoremenu ToolBar.Print		:w !lpr<CR>
961  endif
962
963  an 1.45 ToolBar.-sep1-		<Nop>
964  an 1.50 ToolBar.Undo			u
965  an 1.60 ToolBar.Redo			<C-R>
966
967  an 1.65 ToolBar.-sep2-		<Nop>
968  vnoremenu 1.70 ToolBar.Cut		"+x
969  vnoremenu 1.80 ToolBar.Copy		"+y
970  cnoremenu 1.80 ToolBar.Copy		<C-Y>
971  nnoremenu 1.90 ToolBar.Paste		"+gP
972  cnoremenu	 ToolBar.Paste		<C-R>+
973  exe 'vnoremenu <script>	 ToolBar.Paste	' . s:paste_v_cmd
974  exe 'inoremenu <script>	 ToolBar.Paste	' . s:paste_i_cmd
975
976  if !has("gui_athena")
977    an 1.95   ToolBar.-sep3-		<Nop>
978    an 1.100  ToolBar.Replace		:promptrepl<CR>
979    vunmenu   ToolBar.Replace
980    vnoremenu ToolBar.Replace		y:promptrepl <C-R>"<CR>
981    an 1.110  ToolBar.FindNext		n
982    an 1.120  ToolBar.FindPrev		N
983  endif
984
985  an 1.215 ToolBar.-sep5-		<Nop>
986  an <silent> 1.220 ToolBar.LoadSesn	:call <SID>LoadVimSesn()<CR>
987  an <silent> 1.230 ToolBar.SaveSesn	:call <SID>SaveVimSesn()<CR>
988  an 1.240 ToolBar.RunScript		:browse so<CR>
989
990  an 1.245 ToolBar.-sep6-		<Nop>
991  an 1.250 ToolBar.Make			:make<CR>
992  an 1.270 ToolBar.RunCtags		:exe "!" . g:ctags_command<CR>
993  an 1.280 ToolBar.TagJump		g<C-]>
994
995  an 1.295 ToolBar.-sep7-		<Nop>
996  an 1.300 ToolBar.Help			:help<CR>
997  an <silent> 1.310 ToolBar.FindHelp	:call <SID>Helpfind()<CR>
998
999" Only set the tooltips here if not done in a language menu file
1000if exists("*Do_toolbar_tmenu")
1001  call Do_toolbar_tmenu()
1002else
1003  let did_toolbar_tmenu = 1
1004  tmenu ToolBar.Open		Open file
1005  tmenu ToolBar.Save		Save current file
1006  tmenu ToolBar.SaveAll		Save all files
1007  tmenu ToolBar.Print		Print
1008  tmenu ToolBar.Undo		Undo
1009  tmenu ToolBar.Redo		Redo
1010  tmenu ToolBar.Cut		Cut to clipboard
1011  tmenu ToolBar.Copy		Copy to clipboard
1012  tmenu ToolBar.Paste		Paste from Clipboard
1013  if !has("gui_athena")
1014    tmenu ToolBar.Find		Find...
1015    tmenu ToolBar.FindNext	Find Next
1016    tmenu ToolBar.FindPrev	Find Previous
1017    tmenu ToolBar.Replace		Find / Replace...
1018  endif
1019  tmenu ToolBar.LoadSesn	Chose a session to load
1020  tmenu ToolBar.SaveSesn	Save current session
1021  tmenu ToolBar.RunScript	Chose a Vim Script to run
1022  tmenu ToolBar.Make		Make current project (:make)
1023  tmenu ToolBar.RunCtags	Build tags in current directory tree (!ctags -R .)
1024  tmenu ToolBar.TagJump		Jump to tag under cursor
1025  tmenu ToolBar.Help		Vim Help
1026  tmenu ToolBar.FindHelp	Search Vim Help
1027endif
1028
1029" Select a session to load; default to current session name if present
1030fun! s:LoadVimSesn()
1031  if strlen(v:this_session) > 0
1032    let name = v:this_session
1033  else
1034    let name = "Session.vim"
1035  endif
1036  execute "browse so " . name
1037endfun
1038
1039" Select a session to save; default to current session name if present
1040fun! s:SaveVimSesn()
1041  if strlen(v:this_session) == 0
1042    let v:this_session = "Session.vim"
1043  endif
1044  execute "browse mksession! " . v:this_session
1045endfun
1046
1047endif
1048
1049endif " !exists("did_install_default_menus")
1050
1051" Define these items always, so that syntax can be switched on when it wasn't.
1052" But skip them when the Syntax menu was disabled by the user.
1053if !exists("did_install_syntax_menu")
1054  an 50.212 &Syntax.&Manual		:syn manual<CR>
1055  an 50.214 &Syntax.A&utomatic		:syn on<CR>
1056  an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1057  if !exists("*s:SynOnOff")
1058    fun s:SynOnOff()
1059      if has("syntax_items")
1060	syn clear
1061      else
1062	if !exists("g:syntax_on")
1063	  syn manual
1064	endif
1065	set syn=ON
1066      endif
1067    endfun
1068  endif
1069endif
1070
1071
1072" Install the Syntax menu only when filetype.vim has been loaded or when
1073" manual syntax highlighting is enabled.
1074" Avoid installing the Syntax menu twice.
1075if (exists("did_load_filetypes") || exists("syntax_on"))
1076	\ && !exists("did_install_syntax_menu")
1077  let did_install_syntax_menu = 1
1078
1079" Skip setting up the individual syntax selection menus unless
1080" do_syntax_sel_menu is defined (it takes quite a bit of time).
1081if exists("do_syntax_sel_menu")
1082  runtime! synmenu.vim
1083else
1084  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>
1085  an 50.195 &Syntax.-SEP1-		<Nop>
1086endif
1087
1088an 50.210 &Syntax.&Off			:syn off<CR>
1089an 50.700 &Syntax.-SEP3-		<Nop>
1090an 50.710 &Syntax.Co&lor\ test		:sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1091an 50.720 &Syntax.&Highlight\ test	:runtime syntax/hitest.vim<CR>
1092an 50.730 &Syntax.&Convert\ to\ HTML	:runtime syntax/2html.vim<CR>
1093
1094endif " !exists("did_install_syntax_menu")
1095
1096unlet! s:paste_i_cmd s:paste_v_cmd s:paste_cmd
1097
1098" Restore the previous value of 'cpoptions'.
1099let &cpo = s:cpo_save
1100unlet s:cpo_save
1101
1102" vim: set sw=2 :
1103