Fix bug in :macmenu
[MacVim.git] / runtime / menu.vim
blobfe3529f78d96fb2ef0f47ff397244e466ad73c0e
1 " Vim support file to define the default menus
2 " You can also use this as a start for your own set of menus.
4 " Maintainer:   Bram Moolenaar <Bram@vim.org>
5 " Last Change:  2007 Nov 19
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.
10 " Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise
11 " <CR> would not be recognized.  See ":help 'cpoptions'".
12 let s:cpo_save = &cpo
13 set cpo&vim
15 " Avoid installing the menus twice
16 if !exists("did_install_default_menus")
17 let did_install_default_menus = 1
20 " Localized menus currently not supported in MacVim
21 if !has("gui_macvim") && (exists("v:lang") || &langmenu != "")
22   " Try to find a menu translation file for the current language.
23   if &langmenu != ""
24     if &langmenu =~ "none"
25       let s:lang = ""
26     else
27       let s:lang = &langmenu
28     endif
29   else
30     let s:lang = v:lang
31   endif
32   " A language name must be at least two characters, don't accept "C"
33   if strlen(s:lang) > 1
34     " When the language does not include the charset add 'encoding'
35     if s:lang =~ '^\a\a$\|^\a\a_\a\a$'
36       let s:lang = s:lang . '.' . &enc
37     endif
39     " We always use a lowercase name.
40     " Change "iso-8859" to "iso_8859" and "iso8859" to "iso_8859", some
41     " systems appear to use this.
42     " Change spaces to underscores.
43     let s:lang = substitute(tolower(s:lang), '\.iso-', ".iso_", "")
44     let s:lang = substitute(s:lang, '\.iso8859', ".iso_8859", "")
45     let s:lang = substitute(s:lang, " ", "_", "g")
46     " Remove "@euro", otherwise "LC_ALL=de_DE@euro gvim" will show English menus
47     let s:lang = substitute(s:lang, "@euro", "", "")
48     " Change "iso_8859-1" and "iso_8859-15" to "latin1", we always use the
49     " same menu file for them.
50     let s:lang = substitute(s:lang, 'iso_8859-15\=$', "latin1", "")
51     menutrans clear
52     exe "runtime! lang/menu_" . s:lang . ".vim"
54     if !exists("did_menu_trans")
55       " There is no exact match, try matching with a wildcard added
56       " (e.g. find menu_de_de.iso_8859-1.vim if s:lang == de_DE).
57       let s:lang = substitute(s:lang, '\.[^.]*', "", "")
58       exe "runtime! lang/menu_" . s:lang . "[^a-z]*vim"
60       if !exists("did_menu_trans") && strlen($LANG) > 1 && s:lang !~ '^en_us'
61         " On windows locale names are complicated, try using $LANG, it might
62         " have been set by set_init_1().  But don't do this for "en" or "en_us".
63         " But don't match "slovak" when $LANG is "sl".
64         exe "runtime! lang/menu_" . tolower($LANG) . "[^a-z]*vim"
65       endif
66     endif
67   endif
68 endif
71 " Help menu
72 an 9999.10 &Help.&Overview<Tab><F1>     :help<CR>
73 an 9999.20 &Help.&User\ Manual          :help usr_toc<CR>
74 an 9999.30 &Help.&How-to\ links         :help how-to<CR>
75 an <silent> 9999.40 &Help.&Find\.\.\.   :call <SID>Helpfind()<CR>
76 an 9999.45 &Help.-sep1-                 <Nop>
77 an 9999.50 &Help.&Credits               :help credits<CR>
78 an 9999.60 &Help.Co&pying               :help copying<CR>
79 an 9999.70 &Help.&Sponsor/Register      :help sponsor<CR>
80 an 9999.70 &Help.O&rphans               :help kcc<CR>
81 an 9999.75 &Help.-sep2-                 <Nop>
82 an 9999.80 &Help.&Version               :version<CR>
83 an 9999.90 &Help.&About                 :intro<CR>
85 fun! s:Helpfind()
86   if !exists("g:menutrans_help_dialog")
87     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')"
88   endif
89   let h = inputdialog(g:menutrans_help_dialog)
90   if h != ""
91     let v:errmsg = ""
92     silent! exe "help " . h
93     if v:errmsg != ""
94       echo v:errmsg
95     endif
96   endif
97 endfun
99 " File menu
100 an 10.310 &File.&Open\.\.\.<Tab>:e              :browse confirm e<CR>
101 an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp       :browse sp<CR>
102 an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew     :browse tabnew<CR>
103 an 10.325 &File.&New<Tab>:enew                  :confirm enew<CR>
104 an <silent> 10.330 &File.&Close<Tab>:close
105         \ :if winheight(2) < 0 <Bar>
106         \   confirm enew <Bar>
107         \ else <Bar>
108         \   confirm close <Bar>
109         \ endif<CR>
110 an 10.335 &File.-SEP1-                          <Nop>
111 an <silent> 10.340 &File.&Save<Tab>:w           :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
112 an 10.350 &File.Save\ &As\.\.\.<Tab>:sav        :browse confirm saveas<CR>
114 if has("diff")
115   an 10.400 &File.-SEP2-                        <Nop>
116   an 10.410 &File.Split\ &Diff\ with\.\.\.      :browse vert diffsplit<CR>
117   an 10.420 &File.Split\ Patched\ &By\.\.\.     :browse vert diffpatch<CR>
118 endif
120 if has("printer")
121   an 10.500 &File.-SEP3-                        <Nop>
122   an 10.510 &File.&Print                        :hardcopy<CR>
123   vunmenu   &File.&Print
124   vnoremenu &File.&Print                        :hardcopy<CR>
125 elseif has("unix")
126   an 10.500 &File.-SEP3-                        <Nop>
127   an 10.510 &File.&Print                        :w !lpr<CR>
128   vunmenu   &File.&Print
129   vnoremenu &File.&Print                        :w !lpr<CR>
130 endif
131 an 10.600 &File.-SEP4-                          <Nop>
132 an 10.610 &File.Sa&ve-Exit<Tab>:wqa             :confirm wqa<CR>
133 an 10.620 &File.E&xit<Tab>:qa                   :confirm qa<CR>
135 func! <SID>SelectAll()
136   exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
137 endfunc
140 " Edit menu
141 an 20.310 &Edit.&Undo<Tab>u                     u
142 an 20.320 &Edit.&Redo<Tab>^R                    <C-R>
143 an 20.330 &Edit.Rep&eat<Tab>\.                  .
145 an 20.335 &Edit.-SEP1-                          <Nop>
146 vnoremenu 20.340 &Edit.Cu&t<Tab>"+x             "+x
147 vnoremenu 20.350 &Edit.&Copy<Tab>"+y            "+y
148 cnoremenu 20.350 &Edit.&Copy<Tab>"+y            <C-Y>
149 nnoremenu 20.360 &Edit.&Paste<Tab>"+gP          "+gP
150 cnoremenu        &Edit.&Paste<Tab>"+gP          <C-R>+
151 exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP   ' . paste#paste_cmd['v']
152 exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP   ' . paste#paste_cmd['i']
153 nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p      [p
154 inoremenu        &Edit.Put\ &Before<Tab>[p      <C-O>[p
155 nnoremenu 20.380 &Edit.Put\ &After<Tab>]p       ]p
156 inoremenu        &Edit.Put\ &After<Tab>]p       <C-O>]p
157 if has("win32") || has("win16")
158   vnoremenu 20.390 &Edit.&Delete<Tab>x          x
159 endif
160 noremenu  <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG  :<C-U>call <SID>SelectAll()<CR>
161 inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG  <C-O>:call <SID>SelectAll()<CR>
162 cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG  <C-U>call <SID>SelectAll()<CR>
164 an 20.405        &Edit.-SEP2-                           <Nop>
165 if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
166   an 20.410      &Edit.&Find\.\.\.                      :promptfind<CR>
167   vunmenu        &Edit.&Find\.\.\.
168   vnoremenu <silent>     &Edit.&Find\.\.\.              y:promptfind <C-R>=<SID>FixFText()<CR><CR>
169   an 20.420      &Edit.Find\ and\ Rep&lace\.\.\.        :promptrepl<CR>
170   vunmenu        &Edit.Find\ and\ Rep&lace\.\.\.
171   vnoremenu <silent>     &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
172 else
173   an 20.410      &Edit.&Find<Tab>/                      /
174   an 20.420      &Edit.Find\ and\ Rep&lace<Tab>:%s      :%s/
175   vunmenu        &Edit.Find\ and\ Rep&lace<Tab>:%s
176   vnoremenu      &Edit.Find\ and\ Rep&lace<Tab>:s       :s/
177 endif
179 an 20.425        &Edit.-SEP3-                           <Nop>
180 an 20.430        &Edit.Settings\ &Window                :options<CR>
181 an 20.435        &Edit.Startup\ &Settings               :call <SID>EditVimrc()<CR>
183 fun! s:EditVimrc()
184   if $MYVIMRC != ''
185     let fname = "$MYVIMRC"
186   elseif has("win32") || has("dos32") || has("dos16") || has("os2")
187     if $HOME != ''
188       let fname = "$HOME/_vimrc"
189     else
190       let fname = "$VIM/_vimrc"
191     endif
192   elseif has("amiga")
193     let fname = "s:.vimrc"
194   else
195     let fname = "$HOME/.vimrc"
196   endif
197   if &mod
198     exe "split " . fname
199   else
200     exe "edit " . fname
201   endif
202 endfun
204 fun! s:FixFText()
205   " Fix text in nameless register to be used with :promptfind.
206   return substitute(@", "[\r\n]", '\\n', 'g')
207 endfun
209 " Edit/Global Settings
210 an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls!        :set hls! hls?<CR>
211 an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic!        :set ic! ic?<CR>
212 an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm!  :set sm! sm?<CR>
214 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\  :set so=1<CR>
215 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\  :set so=2<CR>
216 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\  :set so=3<CR>
217 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\  :set so=4<CR>
218 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\  :set so=5<CR>
219 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\  :set so=7<CR>
220 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\  :set so=10<CR>
221 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\  :set so=100<CR>
223 an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
224 an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
225 an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
226 an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
227 an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
228 an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im!       :set im!<CR>
229 an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp!     :set cp!<CR>
230 an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\.  :call <SID>SearchP()<CR>
231 an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\.  :call <SID>TagFiles()<CR>
233 " GUI options
234 an 20.440.300 &Edit.&Global\ Settings.-SEP1-                            <Nop>
235 an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar         :call <SID>ToggleGuiOption("T")<CR>
236 an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
237 an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
238 an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
240 fun! s:SearchP()
241   if !exists("g:menutrans_path_dialog")
242     let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
243   endif
244   let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
245   if n != ""
246     let &path = substitute(n, ' ', '\\ ', 'g')
247   endif
248 endfun
250 fun! s:TagFiles()
251   if !exists("g:menutrans_tags_dialog")
252     let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
253   endif
254   let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
255   if n != ""
256     let &tags = substitute(n, ' ', '\\ ', 'g')
257   endif
258 endfun
260 fun! s:ToggleGuiOption(option)
261     " If a:option is already set in guioptions, then we want to remove it
262     if match(&guioptions, "\\C" . a:option) > -1
263         exec "set go-=" . a:option
264     else
265         exec "set go+=" . a:option
266     endif
267 endfun
269 " Edit/File Settings
271 " Boolean options
272 an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu!      :set nu! nu?<CR>
273 an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
274 an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
275 an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr!      :set lbr! lbr?<CR>
276 an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et!   :set et! et?<CR>
277 an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai!  :set ai! ai?<CR>
278 an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
280 " other options
281 an 20.440.600 &Edit.F&ile\ Settings.-SEP2-              <Nop>
282 an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2    :set sw=2 sw?<CR>
283 an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3    :set sw=3 sw?<CR>
284 an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4    :set sw=4 sw?<CR>
285 an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5    :set sw=5 sw?<CR>
286 an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6    :set sw=6 sw?<CR>
287 an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8    :set sw=8 sw?<CR>
289 an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
290 an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
291 an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
292 an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
293 an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
294 an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
296 an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\.  :call <SID>TextWidth()<CR>
297 an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\.  :call <SID>FileFormat()<CR>
298 fun! s:TextWidth()
299   if !exists("g:menutrans_textwidth_dialog")
300     let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
301   endif
302   let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
303   if n != ""
304     " remove leading zeros to avoid it being used as an octal number
305     let &tw = substitute(n, "^0*", "", "")
306   endif
307 endfun
309 fun! s:FileFormat()
310   if !exists("g:menutrans_fileformat_dialog")
311     let g:menutrans_fileformat_dialog = "Select format for writing the file"
312   endif
313   if !exists("g:menutrans_fileformat_choices")
314     let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
315   endif
316   if &ff == "dos"
317     let def = 2
318   elseif &ff == "mac"
319     let def = 3
320   else
321     let def = 1
322   endif
323   let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
324   if n == 1
325     set ff=unix
326   elseif n == 2
327     set ff=dos
328   elseif n == 3
329     set ff=mac
330   endif
331 endfun
333 " Setup the Edit.Color Scheme submenu
334 let s:n = globpath(&runtimepath, "colors/*.vim")
335 let s:idx = 100
336 while strlen(s:n) > 0
337   let s:i = stridx(s:n, "\n")
338   if s:i < 0
339     let s:name = s:n
340     let s:n = ""
341   else
342     let s:name = strpart(s:n, 0, s:i)
343     let s:n = strpart(s:n, s:i + 1, 19999)
344   endif
345   " Ignore case for VMS and windows
346   let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
347   exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
348   unlet s:name
349   unlet s:i
350   let s:idx = s:idx + 10
351 endwhile
352 unlet s:n
353 unlet s:idx
355 " Setup the Edit.Keymap submenu
356 if has("keymap")
357   let s:n = globpath(&runtimepath, "keymap/*.vim")
358   if s:n != ""
359     let s:idx = 100
360     an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
361     while strlen(s:n) > 0
362       let s:i = stridx(s:n, "\n")
363       if s:i < 0
364         let s:name = s:n
365         let s:n = ""
366       else
367         let s:name = strpart(s:n, 0, s:i)
368         let s:n = strpart(s:n, s:i + 1, 19999)
369       endif
370       " Ignore case for VMS and windows
371       let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
372       exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
373       unlet s:name
374       unlet s:i
375       let s:idx = s:idx + 10
376     endwhile
377     unlet s:idx
378   endif
379   unlet s:n
380 endif
381 if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
382   an 20.470 &Edit.Select\ Fo&nt\.\.\.   :set guifont=*<CR>
383 endif
385 " Programming menu
386 if !exists("g:ctags_command")
387   if has("vms")
388     let g:ctags_command = "mc vim:ctags *.*"
389   else
390     let g:ctags_command = "ctags -R ."
391   endif
392 endif
394 an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^]   g<C-]>
395 vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
396 vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^]   g<C-]>
397 an 40.310 &Tools.Jump\ &back<Tab>^T             <C-T>
398 an 40.320 &Tools.Build\ &Tags\ File             :exe "!" . g:ctags_command<CR>
400 if has("folding") || has("spell")
401   an 40.330 &Tools.-SEP1-                                               <Nop>
402 endif
404 " Tools.Spelling Menu
405 if has("spell")
406   an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On              :set spell<CR>
407   an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off             :set nospell<CR>
408   an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s        ]s
409   an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s    [s
410   an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z=   z=
411   an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall   :spellrepall<CR>
412   an 40.335.200 &Tools.&Spelling.-SEP1-                         <Nop>
413   an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en"        :set spl=en spell<CR>
414   an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au"     :set spl=en_au spell<CR>
415   an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca"     :set spl=en_ca spell<CR>
416   an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb"     :set spl=en_gb spell<CR>
417   an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz"     :set spl=en_nz spell<CR>
418   an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us"     :set spl=en_us spell<CR>
419   an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages        :call <SID>SpellLang()<CR>
421   let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
422   func! s:SpellLang()
423     for cmd in s:undo_spellang
424       exe "silent! " . cmd
425     endfor
426     let s:undo_spellang = []
428     if &enc == "iso-8859-15"
429       let enc = "latin1"
430     else
431       let enc = &enc
432     endif
434     let found = 0
435     let s = globpath(&rtp, "spell/*." . enc . ".spl")
436     if s != ""
437       let n = 300
438       for f in split(s, "\n")
439         let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
440         if nm != "en" && nm !~ '/'
441           let found += 1
442           let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
443           exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
444           let s:undo_spellang += ['aun ' . menuname]
445         endif
446         let n += 10
447       endfor
448     endif
449     if found == 0
450       echomsg "Could not find other spell files"
451     elseif found == 1
452       echomsg "Found spell file " . nm
453     else
454       echomsg "Found " . found . " more spell files"
455     endif
456     " Need to redo this when 'encoding' is changed.
457     augroup spellmenu
458     au! EncodingChanged * call <SID>SpellLang()
459     augroup END
460   endfun
462 endif
464 " Tools.Fold Menu
465 if has("folding")
466   " open close folds
467   an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi           zi
468   an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv              zv
469   an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx      zMzx
470   an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm              zm
471   an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM               zM
472   an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr               zr
473   an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR                zR
474   " fold method
475   an 40.340.200 &Tools.&Folding.-SEP1-                  <Nop>
476   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual   :set fdm=manual<CR>
477   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent   :set fdm=indent<CR>
478   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
479   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax   :set fdm=syntax<CR>
480   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff     :set fdm=diff<CR>
481   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker   :set fdm=marker<CR>
482   " create and delete folds
483   vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf     zf
484   an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd            zd
485   an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD      zD
486   " moving around in folds
487   an 40.340.300 &Tools.&Folding.-SEP2-                          <Nop>
488   an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\   :set fdc=0<CR>
489   an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\   :set fdc=2<CR>
490   an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\   :set fdc=3<CR>
491   an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\   :set fdc=4<CR>
492   an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\   :set fdc=5<CR>
493   an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\   :set fdc=6<CR>
494   an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\   :set fdc=7<CR>
495   an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\   :set fdc=8<CR>
496 endif  " has folding
498 if has("diff")
499   an 40.350.100 &Tools.&Diff.&Update            :diffupdate<CR>
500   an 40.350.110 &Tools.&Diff.&Get\ Block        :diffget<CR>
501   vunmenu &Tools.&Diff.&Get\ Block
502   vnoremenu &Tools.&Diff.&Get\ Block            :diffget<CR>
503   an 40.350.120 &Tools.&Diff.&Put\ Block        :diffput<CR>
504   vunmenu &Tools.&Diff.&Put\ Block
505   vnoremenu &Tools.&Diff.&Put\ Block            :diffput<CR>
506 endif
508 an 40.358 &Tools.-SEP2-                                 <Nop>
509 an 40.360 &Tools.&Make<Tab>:make                        :make<CR>
510 an 40.370 &Tools.&List\ Errors<Tab>:cl                  :cl<CR>
511 an 40.380 &Tools.L&ist\ Messages<Tab>:cl!               :cl!<CR>
512 an 40.390 &Tools.&Next\ Error<Tab>:cn                   :cn<CR>
513 an 40.400 &Tools.&Previous\ Error<Tab>:cp               :cp<CR>
514 an 40.410 &Tools.&Older\ List<Tab>:cold                 :colder<CR>
515 an 40.420 &Tools.N&ewer\ List<Tab>:cnew                 :cnewer<CR>
516 an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin    :cwin<CR>
517 an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen     :copen<CR>
518 an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose   :cclose<CR>
520 an 40.520 &Tools.-SEP3-                                 <Nop>
521 an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
522         \ :call <SID>XxdConv()<CR>
523 an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
524         \ :call <SID>XxdBack()<CR>
526 " Use a function to do the conversion, so that it also works with 'insertmode'
527 " set.
528 func! s:XxdConv()
529   let mod = &mod
530   if has("vms")
531     %!mc vim:xxd
532   else
533     call s:XxdFind()
534     exe '%!"' . g:xxdprogram . '"'
535   endif
536   if getline(1) =~ "^0000000:"          " only if it worked
537     set ft=xxd
538   endif
539   let &mod = mod
540 endfun
542 func! s:XxdBack()
543   let mod = &mod
544   if has("vms")
545     %!mc vim:xxd -r
546   else
547     call s:XxdFind()
548     exe '%!"' . g:xxdprogram . '" -r'
549   endif
550   set ft=
551   doautocmd filetypedetect BufReadPost
552   let &mod = mod
553 endfun
555 func! s:XxdFind()
556   if !exists("g:xxdprogram")
557     " On the PC xxd may not be in the path but in the install directory
558     if (has("win32") || has("dos32")) && !executable("xxd")
559       let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
560     else
561       let g:xxdprogram = "xxd"
562     endif
563   endif
564 endfun
566 " Setup the Tools.Compiler submenu
567 let s:n = globpath(&runtimepath, "compiler/*.vim")
568 let s:idx = 100
569 while strlen(s:n) > 0
570   let s:i = stridx(s:n, "\n")
571   if s:i < 0
572     let s:name = s:n
573     let s:n = ""
574   else
575     let s:name = strpart(s:n, 0, s:i)
576     let s:n = strpart(s:n, s:i + 1, 19999)
577   endif
578   " Ignore case for VMS and windows
579   let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
580   exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
581   unlet s:name
582   unlet s:i
583   let s:idx = s:idx + 10
584 endwhile
585 unlet s:n
586 unlet s:idx
588 if !exists("no_buffers_menu")
590 " Buffer list menu -- Setup functions & actions
592 " wait with building the menu until after loading 'session' files. Makes
593 " startup faster.
594 let s:bmenu_wait = 1
596 if !exists("bmenu_priority")
597   let bmenu_priority = 60
598 endif
600 func! s:BMAdd()
601   if s:bmenu_wait == 0
602     " when adding too many buffers, redraw in short format
603     if s:bmenu_count == &menuitems && s:bmenu_short == 0
604       call s:BMShow()
605     else
606       call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
607       let s:bmenu_count = s:bmenu_count + 1
608     endif
609   endif
610 endfunc
612 func! s:BMRemove()
613   if s:bmenu_wait == 0
614     let name = expand("<afile>")
615     if isdirectory(name)
616       return
617     endif
618     let munge = <SID>BMMunge(name, expand("<abuf>"))
620     if s:bmenu_short == 0
621       exe 'silent! aun &Buffers.' . munge
622     else
623       exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
624     endif
625     let s:bmenu_count = s:bmenu_count - 1
626   endif
627 endfunc
629 " Create the buffer menu (delete an existing one first).
630 func! s:BMShow(...)
631   let s:bmenu_wait = 1
632   let s:bmenu_short = 1
633   let s:bmenu_count = 0
634   "
635   " get new priority, if exists
636   if a:0 == 1
637     let g:bmenu_priority = a:1
638   endif
640   " remove old menu, if exists; keep one entry to avoid a torn off menu to
641   " disappear.
642   silent! unmenu &Buffers
643   exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
644   silent! unmenu! &Buffers
646   " create new menu; set 'cpo' to include the <CR>
647   let cpo_save = &cpo
648   set cpo&vim
649   exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
650   exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
651   exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
652   exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
653   exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
654   exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
655   let &cpo = cpo_save
656   unmenu &Buffers.Dummy
658   " figure out how many buffers there are
659   let buf = 1
660   while buf <= bufnr('$')
661     if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
662       let s:bmenu_count = s:bmenu_count + 1
663     endif
664     let buf = buf + 1
665   endwhile
666   if s:bmenu_count <= &menuitems
667     let s:bmenu_short = 0
668   endif
670   " iterate through buffer list, adding each buffer to the menu:
671   let buf = 1
672   while buf <= bufnr('$')
673     if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
674       call <SID>BMFilename(bufname(buf), buf)
675     endif
676     let buf = buf + 1
677   endwhile
678   let s:bmenu_wait = 0
679   aug buffer_list
680   au!
681   au BufCreate,BufFilePost * call <SID>BMAdd()
682   au BufDelete,BufFilePre * call <SID>BMRemove()
683   aug END
684 endfunc
686 func! s:BMHash(name)
687   " Make name all upper case, so that chars are between 32 and 96
688   let nm = substitute(a:name, ".*", '\U\0', "")
689   if has("ebcdic")
690     " HACK: Replace all non alphabetics with 'Z'
691     "       Just to make it work for now.
692     let nm = substitute(nm, "[^A-Z]", 'Z', "g")
693     let sp = char2nr('A') - 1
694   else
695     let sp = char2nr(' ')
696   endif
697   " convert first six chars into a number for sorting:
698   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)
699 endfunc
701 func! s:BMHash2(name)
702   let nm = substitute(a:name, ".", '\L\0', "")
703   " Not exactly right for EBCDIC...
704   if nm[0] < 'a' || nm[0] > 'z'
705     return '&others.'
706   elseif nm[0] <= 'd'
707     return '&abcd.'
708   elseif nm[0] <= 'h'
709     return '&efgh.'
710   elseif nm[0] <= 'l'
711     return '&ijkl.'
712   elseif nm[0] <= 'p'
713     return '&mnop.'
714   elseif nm[0] <= 't'
715     return '&qrst.'
716   else
717     return '&u-z.'
718   endif
719 endfunc
721 " insert a buffer name into the buffer menu:
722 func! s:BMFilename(name, num)
723   if isdirectory(a:name)
724     return
725   endif
726   let munge = <SID>BMMunge(a:name, a:num)
727   let hash = <SID>BMHash(munge)
728   if s:bmenu_short == 0
729     let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
730   else
731     let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
732   endif
733   " set 'cpo' to include the <CR>
734   let cpo_save = &cpo
735   set cpo&vim
736   exe name . ' :confirm b' . a:num . '<CR>'
737   let &cpo = cpo_save
738 endfunc
740 " Truncate a long path to fit it in a menu item.
741 if !exists("g:bmenu_max_pathlen")
742   let g:bmenu_max_pathlen = 35
743 endif
744 func! s:BMTruncName(fname)
745   let name = a:fname
746   if g:bmenu_max_pathlen < 5
747     let name = ""
748   else
749     let len = strlen(name)
750     if len > g:bmenu_max_pathlen
751       let amountl = (g:bmenu_max_pathlen / 2) - 2
752       let amountr = g:bmenu_max_pathlen - amountl - 3
753       let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
754       let left = substitute(name, pattern, '\1', '')
755       let right = substitute(name, pattern, '\2', '')
756       if strlen(left) + strlen(right) < len
757         let name = left . '...' . right
758       endif
759     endif
760   endif
761   return name
762 endfunc
764 func! s:BMMunge(fname, bnum)
765   let name = a:fname
766   if name == ''
767     if !exists("g:menutrans_no_file")
768       let g:menutrans_no_file = "[No file]"
769     endif
770     let name = g:menutrans_no_file
771   else
772     let name = fnamemodify(name, ':p:~')
773   endif
774   " detach file name and separate it out:
775   let name2 = fnamemodify(name, ':t')
776   if a:bnum >= 0
777     let name2 = name2 . ' (' . a:bnum . ')'
778   endif
779   let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
780   let name = escape(name, "\\. \t|")
781   let name = substitute(name, "&", "&&", "g")
782   let name = substitute(name, "\n", "^@", "g")
783   return name
784 endfunc
786 " When just starting Vim, load the buffer menu later
787 if has("vim_starting")
788   augroup LoadBufferMenu
789     au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
790     au  VimEnter * au! LoadBufferMenu
791   augroup END
792 else
793   call <SID>BMShow()
794 endif
796 endif " !exists("no_buffers_menu")
798 " Window menu
799 an 70.300 &Window.&New<Tab>^Wn                  <C-W>n
800 an 70.310 &Window.S&plit<Tab>^Ws                <C-W>s
801 an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^        <C-W><C-^>
802 an 70.330 &Window.Split\ &Vertically<Tab>^Wv    <C-W>v
803 if has("vertsplit")
804   an <silent> 70.332 &Window.Split\ File\ E&xplorer     :call MenuExplOpen()<CR>
805   if !exists("*MenuExplOpen")
806     fun MenuExplOpen()
807       if @% == ""
808         20vsp .
809       else
810         exe "20vsp " . expand("%:p:h")
811       endif
812     endfun
813   endif
814 endif
815 an 70.335 &Window.-SEP1-                                <Nop>
816 an 70.340 &Window.&Close<Tab>^Wc                        :confirm close<CR>
817 an 70.345 &Window.Close\ &Other(s)<Tab>^Wo              :confirm only<CR>
818 an 70.350 &Window.-SEP2-                                <Nop>
819 an 70.355 &Window.Move\ &To.&Top<Tab>^WK                <C-W>K
820 an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ             <C-W>J
821 an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH         <C-W>H
822 an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL        <C-W>L
823 an 70.360 &Window.Rotate\ &Up<Tab>^WR                   <C-W>R
824 an 70.362 &Window.Rotate\ &Down<Tab>^Wr                 <C-W>r
825 an 70.365 &Window.-SEP3-                                <Nop>
826 an 70.370 &Window.&Equal\ Size<Tab>^W=                  <C-W>=
827 an 70.380 &Window.&Max\ Height<Tab>^W_                  <C-W>_
828 an 70.390 &Window.M&in\ Height<Tab>^W1_                 <C-W>1_
829 an 70.400 &Window.Max\ &Width<Tab>^W\|                  <C-W>\|
830 an 70.410 &Window.Min\ Widt&h<Tab>^W1\|                 <C-W>1\|
832 " The popup menu
833 an 1.10 PopUp.&Undo                     u
834 an 1.15 PopUp.-SEP1-                    <Nop>
835 vnoremenu 1.20 PopUp.Cu&t               "+x
836 vnoremenu 1.30 PopUp.&Copy              "+y
837 cnoremenu 1.30 PopUp.&Copy              <C-Y>
838 nnoremenu 1.40 PopUp.&Paste             "+gP
839 cnoremenu 1.40 PopUp.&Paste             <C-R>+
840 exe 'vnoremenu <script> 1.40 PopUp.&Paste       ' . paste#paste_cmd['v']
841 exe 'inoremenu <script> 1.40 PopUp.&Paste       ' . paste#paste_cmd['i']
842 vnoremenu 1.50 PopUp.&Delete            x
843 an 1.55 PopUp.-SEP2-                    <Nop>
844 vnoremenu 1.60 PopUp.Select\ Blockwise  <C-V>
846 nnoremenu 1.70 PopUp.Select\ &Word      vaw
847 onoremenu 1.70 PopUp.Select\ &Word      aw
848 vnoremenu 1.70 PopUp.Select\ &Word      <C-C>vaw
849 inoremenu 1.70 PopUp.Select\ &Word      <C-O>vaw
850 cnoremenu 1.70 PopUp.Select\ &Word      <C-C>vaw
852 nnoremenu 1.73 PopUp.Select\ &Sentence  vas
853 onoremenu 1.73 PopUp.Select\ &Sentence  as
854 vnoremenu 1.73 PopUp.Select\ &Sentence  <C-C>vas
855 inoremenu 1.73 PopUp.Select\ &Sentence  <C-O>vas
856 cnoremenu 1.73 PopUp.Select\ &Sentence  <C-C>vas
858 nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
859 onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
860 vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
861 inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
862 cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
864 nnoremenu 1.80 PopUp.Select\ &Line      V
865 onoremenu 1.80 PopUp.Select\ &Line      <C-C>V
866 vnoremenu 1.80 PopUp.Select\ &Line      <C-C>V
867 inoremenu 1.80 PopUp.Select\ &Line      <C-O>V
868 cnoremenu 1.80 PopUp.Select\ &Line      <C-C>V
870 nnoremenu 1.90 PopUp.Select\ &Block     <C-V>
871 onoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
872 vnoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
873 inoremenu 1.90 PopUp.Select\ &Block     <C-O><C-V>
874 cnoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
876 noremenu  <script> <silent> 1.100 PopUp.Select\ &All    :<C-U>call <SID>SelectAll()<CR>
877 inoremenu <script> <silent> 1.100 PopUp.Select\ &All    <C-O>:call <SID>SelectAll()<CR>
878 cnoremenu <script> <silent> 1.100 PopUp.Select\ &All    <C-U>call <SID>SelectAll()<CR>
880 if has("spell")
881   " Spell suggestions in the popup menu.  Note that this will slow down the
882   " appearance of the menu!
883   func! <SID>SpellPopup()
884     if exists("s:changeitem") && s:changeitem != ''
885       call <SID>SpellDel()
886     endif
888     " Return quickly if spell checking is not enabled.
889     if !&spell || &spelllang == ''
890       return
891     endif
893     let curcol = col('.')
894     let [w, a] = spellbadword()
895     if col('.') > curcol                " don't use word after the cursor
896       let w = ''
897       call cursor(0, curcol)    " put the cursor back where it was
898     endif
899     if w != ''
900       if a == 'caps'
901         let s:suglist = [substitute(w, '.*', '\u&', '')]
902       else
903         let s:suglist = spellsuggest(w, 10)
904       endif
905       if len(s:suglist) <= 0
906         call cursor(0, curcol)  " put the cursor back where it was
907       else
908         let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
909         let s:fromword = w
910         let pri = 1
911         for sug in s:suglist
912           exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
913                 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
914           let pri += 1
915         endfor
917         let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
918         exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
920         let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
921         exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
923         anoremenu 1.8 PopUp.-SpellSep- :
924       endif
925     endif
926   endfunc
928   func! <SID>SpellReplace(n)
929     let l = getline('.')
930     call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
931           \ . strpart(l, col('.') + len(s:fromword) - 1))
932   endfunc
934   func! <SID>SpellDel()
935     exe "aunmenu PopUp." . s:changeitem
936     exe "aunmenu PopUp." . s:additem
937     exe "aunmenu PopUp." . s:ignoreitem
938     aunmenu PopUp.-SpellSep-
939     let s:changeitem = ''
940   endfun
942   augroup SpellPopupMenu
943     au! MenuPopup * call <SID>SpellPopup()
944   augroup END
945 endif
947 " The GUI toolbar (for MS-Windows and GTK)
948 if 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>
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
963   an 1.45 ToolBar.-sep1-                <Nop>
964   an 1.50 ToolBar.Undo                  u
965   an 1.60 ToolBar.Redo                  <C-R>
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  ' . paste#paste_cmd['v']
974   exe 'inoremenu <script>        ToolBar.Paste  ' . paste#paste_cmd['i']
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>=<SID>FixFText()<CR><CR>
981     an 1.110  ToolBar.FindNext          n
982     an 1.120  ToolBar.FindPrev          N
983   endif
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>
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-]>
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>
999 " Only set the tooltips here if not done in a language menu file
1000 if exists("*Do_toolbar_tmenu")
1001   call Do_toolbar_tmenu()
1002 else
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        Choose a session to load
1020   tmenu ToolBar.SaveSesn        Save current session
1021   tmenu ToolBar.RunScript       Choose 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
1027 endif
1029 " Select a session to load; default to current session name if present
1030 fun! s:LoadVimSesn()
1031   if strlen(v:this_session) > 0
1032     let name = escape(v:this_session, ' \t#%$|<>"*?[{`')
1033   else
1034     let name = "Session.vim"
1035   endif
1036   execute "browse so " . name
1037 endfun
1039 " Select a session to save; default to current session name if present
1040 fun! s:SaveVimSesn()
1041   if strlen(v:this_session) == 0
1042     let v:this_session = "Session.vim"
1043   endif
1044   execute "browse mksession! " . escape(v:this_session, ' \t#%$|<>"*?[{`')
1045 endfun
1047 endif
1049 endif " !exists("did_install_default_menus")
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.
1053 if !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
1069 endif
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.
1075 if (exists("did_load_filetypes") || exists("syntax_on"))
1076         \ && !exists("did_install_syntax_menu")
1077   let did_install_syntax_menu = 1
1079 " Skip setting up the individual syntax selection menus unless
1080 " do_syntax_sel_menu is defined (it takes quite a bit of time).
1081 if exists("do_syntax_sel_menu")
1082   runtime! synmenu.vim
1083 else
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>
1086 endif
1088 an 50.210 &Syntax.&Off                  :syn off<CR>
1089 an 50.700 &Syntax.-SEP3-                <Nop>
1090 an 50.710 &Syntax.Co&lor\ test          :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1091 an 50.720 &Syntax.&Highlight\ test      :runtime syntax/hitest.vim<CR>
1092 an 50.730 &Syntax.&Convert\ to\ HTML    :runtime syntax/2html.vim<CR>
1094 endif " !exists("did_install_syntax_menu")
1096 " Restore the previous value of 'cpoptions'.
1097 let &cpo = s:cpo_save
1098 unlet s:cpo_save
1100 " vim: set sw=2 :