Merged from the latest developing branch.
[MacVim.git] / runtime / menu.vim
blobf0c0d699c5dd5c2367dd18df9eb514b3232471bd
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 if 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
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"
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"
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
67 endif
70 " Help menu
71 an 9999.10 &Help.&Overview<Tab><F1>     :help<CR>
72 an 9999.20 &Help.&User\ Manual          :help usr_toc<CR>
73 an 9999.30 &Help.&How-to\ links         :help how-to<CR>
74 an <silent> 9999.40 &Help.&Find\.\.\.   :call <SID>Helpfind()<CR>
75 an 9999.45 &Help.-sep1-                 <Nop>
76 an 9999.50 &Help.&Credits               :help credits<CR>
77 an 9999.60 &Help.Co&pying               :help copying<CR>
78 an 9999.70 &Help.&Sponsor/Register      :help sponsor<CR>
79 an 9999.70 &Help.O&rphans               :help kcc<CR>
80 an 9999.75 &Help.-sep2-                 <Nop>
81 an 9999.80 &Help.&Version               :version<CR>
82 an 9999.90 &Help.&About                 :intro<CR>
84 fun! 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
96 endfun
98 " File menu
99 an 10.310 &File.&Open\.\.\.<Tab>:e              :browse confirm e<CR>
100 an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp       :browse sp<CR>
101 an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew     :browse tabnew<CR>
102 an 10.325 &File.&New<Tab>:enew                  :confirm enew<CR>
103 an <silent> 10.330 &File.&Close<Tab>:close
104         \ :if winheight(2) < 0 <Bar>
105         \   confirm enew <Bar>
106         \ else <Bar>
107         \   confirm close <Bar>
108         \ endif<CR>
109 an 10.335 &File.-SEP1-                          <Nop>
110 an <silent> 10.340 &File.&Save<Tab>:w           :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
111 an 10.350 &File.Save\ &As\.\.\.<Tab>:sav        :browse confirm saveas<CR>
113 if has("diff")
114   an 10.400 &File.-SEP2-                        <Nop>
115   an 10.410 &File.Split\ &Diff\ with\.\.\.      :browse vert diffsplit<CR>
116   an 10.420 &File.Split\ Patched\ &By\.\.\.     :browse vert diffpatch<CR>
117 endif
119 if has("printer")
120   an 10.500 &File.-SEP3-                        <Nop>
121   an 10.510 &File.&Print                        :hardcopy<CR>
122   vunmenu   &File.&Print
123   vnoremenu &File.&Print                        :hardcopy<CR>
124 elseif has("unix")
125   an 10.500 &File.-SEP3-                        <Nop>
126   an 10.510 &File.&Print                        :w !lpr<CR>
127   vunmenu   &File.&Print
128   vnoremenu &File.&Print                        :w !lpr<CR>
129 endif
130 an 10.600 &File.-SEP4-                          <Nop>
131 an 10.610 &File.Sa&ve-Exit<Tab>:wqa             :confirm wqa<CR>
132 an 10.620 &File.E&xit<Tab>:qa                   :confirm qa<CR>
134 func! <SID>SelectAll()
135   exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
136 endfunc
139 " Edit menu
140 an 20.310 &Edit.&Undo<Tab>u                     u
141 an 20.320 &Edit.&Redo<Tab>^R                    <C-R>
142 an 20.330 &Edit.Rep&eat<Tab>\.                  .
144 an 20.335 &Edit.-SEP1-                          <Nop>
145 vnoremenu 20.340 &Edit.Cu&t<Tab>"+x             "+x
146 vnoremenu 20.350 &Edit.&Copy<Tab>"+y            "+y
147 cnoremenu 20.350 &Edit.&Copy<Tab>"+y            <C-Y>
148 nnoremenu 20.360 &Edit.&Paste<Tab>"+gP          "+gP
149 cnoremenu        &Edit.&Paste<Tab>"+gP          <C-R>+
150 exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP   ' . paste#paste_cmd['v']
151 exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP   ' . paste#paste_cmd['i']
152 nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p      [p
153 inoremenu        &Edit.Put\ &Before<Tab>[p      <C-O>[p
154 nnoremenu 20.380 &Edit.Put\ &After<Tab>]p       ]p
155 inoremenu        &Edit.Put\ &After<Tab>]p       <C-O>]p
156 if has("win32") || has("win16")
157   vnoremenu 20.390 &Edit.&Delete<Tab>x          x
158 endif
159 noremenu  <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG  :<C-U>call <SID>SelectAll()<CR>
160 inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG  <C-O>:call <SID>SelectAll()<CR>
161 cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG  <C-U>call <SID>SelectAll()<CR>
163 an 20.405        &Edit.-SEP2-                           <Nop>
164 if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
165   an 20.410      &Edit.&Find\.\.\.                      :promptfind<CR>
166   vunmenu        &Edit.&Find\.\.\.
167   vnoremenu <silent>     &Edit.&Find\.\.\.              y:promptfind <C-R>=<SID>FixFText()<CR><CR>
168   an 20.420      &Edit.Find\ and\ Rep&lace\.\.\.        :promptrepl<CR>
169   vunmenu        &Edit.Find\ and\ Rep&lace\.\.\.
170   vnoremenu <silent>     &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
171 else
172   an 20.410      &Edit.&Find<Tab>/                      /
173   an 20.420      &Edit.Find\ and\ Rep&lace<Tab>:%s      :%s/
174   vunmenu        &Edit.Find\ and\ Rep&lace<Tab>:%s
175   vnoremenu      &Edit.Find\ and\ Rep&lace<Tab>:s       :s/
176 endif
178 an 20.425        &Edit.-SEP3-                           <Nop>
179 an 20.430        &Edit.Settings\ &Window                :options<CR>
180 an 20.435        &Edit.Startup\ &Settings               :call <SID>EditVimrc()<CR>
182 fun! s:EditVimrc()
183   if $MYVIMRC != ''
184     let fname = "$MYVIMRC"
185   elseif has("win32") || has("dos32") || has("dos16") || has("os2")
186     if $HOME != ''
187       let fname = "$HOME/_vimrc"
188     else
189       let fname = "$VIM/_vimrc"
190     endif
191   elseif has("amiga")
192     let fname = "s:.vimrc"
193   else
194     let fname = "$HOME/.vimrc"
195   endif
196   if &mod
197     exe "split " . fname
198   else
199     exe "edit " . fname
200   endif
201 endfun
203 fun! s:FixFText()
204   " Fix text in nameless register to be used with :promptfind.
205   return substitute(@", "[\r\n]", '\\n', 'g')
206 endfun
208 " Edit/Global Settings
209 an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls!        :set hls! hls?<CR>
210 an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic!        :set ic! ic?<CR>
211 an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm!  :set sm! sm?<CR>
213 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\  :set so=1<CR>
214 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\  :set so=2<CR>
215 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\  :set so=3<CR>
216 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\  :set so=4<CR>
217 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\  :set so=5<CR>
218 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\  :set so=7<CR>
219 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\  :set so=10<CR>
220 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\  :set so=100<CR>
222 an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
223 an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
224 an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
225 an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
226 an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
227 an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im!       :set im!<CR>
228 an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp!     :set cp!<CR>
229 an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\.  :call <SID>SearchP()<CR>
230 an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\.  :call <SID>TagFiles()<CR>
232 " GUI options
233 an 20.440.300 &Edit.&Global\ Settings.-SEP1-                            <Nop>
234 an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar         :call <SID>ToggleGuiOption("T")<CR>
235 an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
236 an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
237 an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
239 fun! s:SearchP()
240   if !exists("g:menutrans_path_dialog")
241     let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
242   endif
243   let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
244   if n != ""
245     let &path = substitute(n, ' ', '\\ ', 'g')
246   endif
247 endfun
249 fun! s:TagFiles()
250   if !exists("g:menutrans_tags_dialog")
251     let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
252   endif
253   let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
254   if n != ""
255     let &tags = substitute(n, ' ', '\\ ', 'g')
256   endif
257 endfun
259 fun! s:ToggleGuiOption(option)
260     " If a:option is already set in guioptions, then we want to remove it
261     if match(&guioptions, "\\C" . a:option) > -1
262         exec "set go-=" . a:option
263     else
264         exec "set go+=" . a:option
265     endif
266 endfun
268 " Edit/File Settings
270 " Boolean options
271 an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu!      :set nu! nu?<CR>
272 an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
273 an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
274 an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr!      :set lbr! lbr?<CR>
275 an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et!   :set et! et?<CR>
276 an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai!  :set ai! ai?<CR>
277 an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
279 " other options
280 an 20.440.600 &Edit.F&ile\ Settings.-SEP2-              <Nop>
281 an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2    :set sw=2 sw?<CR>
282 an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3    :set sw=3 sw?<CR>
283 an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4    :set sw=4 sw?<CR>
284 an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5    :set sw=5 sw?<CR>
285 an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6    :set sw=6 sw?<CR>
286 an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8    :set sw=8 sw?<CR>
288 an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
289 an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
290 an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
291 an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
292 an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
293 an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
295 an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\.  :call <SID>TextWidth()<CR>
296 an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\.  :call <SID>FileFormat()<CR>
297 fun! s:TextWidth()
298   if !exists("g:menutrans_textwidth_dialog")
299     let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
300   endif
301   let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
302   if n != ""
303     " remove leading zeros to avoid it being used as an octal number
304     let &tw = substitute(n, "^0*", "", "")
305   endif
306 endfun
308 fun! s:FileFormat()
309   if !exists("g:menutrans_fileformat_dialog")
310     let g:menutrans_fileformat_dialog = "Select format for writing the file"
311   endif
312   if !exists("g:menutrans_fileformat_choices")
313     let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
314   endif
315   if &ff == "dos"
316     let def = 2
317   elseif &ff == "mac"
318     let def = 3
319   else
320     let def = 1
321   endif
322   let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
323   if n == 1
324     set ff=unix
325   elseif n == 2
326     set ff=dos
327   elseif n == 3
328     set ff=mac
329   endif
330 endfun
332 " Setup the Edit.Color Scheme submenu
333 let s:n = globpath(&runtimepath, "colors/*.vim")
334 let s:idx = 100
335 while strlen(s:n) > 0
336   let s:i = stridx(s:n, "\n")
337   if s:i < 0
338     let s:name = s:n
339     let s:n = ""
340   else
341     let s:name = strpart(s:n, 0, s:i)
342     let s:n = strpart(s:n, s:i + 1, 19999)
343   endif
344   " Ignore case for VMS and windows
345   let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
346   exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
347   unlet s:name
348   unlet s:i
349   let s:idx = s:idx + 10
350 endwhile
351 unlet s:n
352 unlet s:idx
354 " Setup the Edit.Keymap submenu
355 if has("keymap")
356   let s:n = globpath(&runtimepath, "keymap/*.vim")
357   if s:n != ""
358     let s:idx = 100
359     an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
360     while strlen(s:n) > 0
361       let s:i = stridx(s:n, "\n")
362       if s:i < 0
363         let s:name = s:n
364         let s:n = ""
365       else
366         let s:name = strpart(s:n, 0, s:i)
367         let s:n = strpart(s:n, s:i + 1, 19999)
368       endif
369       " Ignore case for VMS and windows
370       let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
371       exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
372       unlet s:name
373       unlet s:i
374       let s:idx = s:idx + 10
375     endwhile
376     unlet s:idx
377   endif
378   unlet s:n
379 endif
380 if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
381   an 20.470 &Edit.Select\ Fo&nt\.\.\.   :set guifont=*<CR>
382 endif
384 " Programming menu
385 if !exists("g:ctags_command")
386   if has("vms")
387     let g:ctags_command = "mc vim:ctags *.*"
388   else
389     let g:ctags_command = "ctags -R ."
390   endif
391 endif
393 an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^]   g<C-]>
394 vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
395 vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^]   g<C-]>
396 an 40.310 &Tools.Jump\ &back<Tab>^T             <C-T>
397 an 40.320 &Tools.Build\ &Tags\ File             :exe "!" . g:ctags_command<CR>
399 if has("folding") || has("spell")
400   an 40.330 &Tools.-SEP1-                                               <Nop>
401 endif
403 " Tools.Spelling Menu
404 if has("spell")
405   an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On              :set spell<CR>
406   an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off             :set nospell<CR>
407   an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s        ]s
408   an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s    [s
409   an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z=   z=
410   an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall   :spellrepall<CR>
411   an 40.335.200 &Tools.&Spelling.-SEP1-                         <Nop>
412   an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en"        :set spl=en spell<CR>
413   an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au"     :set spl=en_au spell<CR>
414   an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca"     :set spl=en_ca spell<CR>
415   an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb"     :set spl=en_gb spell<CR>
416   an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz"     :set spl=en_nz spell<CR>
417   an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us"     :set spl=en_us spell<CR>
418   an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages        :call <SID>SpellLang()<CR>
420   let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
421   func! s:SpellLang()
422     for cmd in s:undo_spellang
423       exe "silent! " . cmd
424     endfor
425     let s:undo_spellang = []
427     if &enc == "iso-8859-15"
428       let enc = "latin1"
429     else
430       let enc = &enc
431     endif
433     let found = 0
434     let s = globpath(&rtp, "spell/*." . enc . ".spl")
435     if s != ""
436       let n = 300
437       for f in split(s, "\n")
438         let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
439         if nm != "en" && nm !~ '/'
440           let found += 1
441           let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
442           exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
443           let s:undo_spellang += ['aun ' . menuname]
444         endif
445         let n += 10
446       endfor
447     endif
448     if found == 0
449       echomsg "Could not find other spell files"
450     elseif found == 1
451       echomsg "Found spell file " . nm
452     else
453       echomsg "Found " . found . " more spell files"
454     endif
455     " Need to redo this when 'encoding' is changed.
456     augroup spellmenu
457     au! EncodingChanged * call <SID>SpellLang()
458     augroup END
459   endfun
461 endif
463 " Tools.Fold Menu
464 if has("folding")
465   " open close folds
466   an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi           zi
467   an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv              zv
468   an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx      zMzx
469   an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm              zm
470   an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM               zM
471   an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr               zr
472   an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR                zR
473   " fold method
474   an 40.340.200 &Tools.&Folding.-SEP1-                  <Nop>
475   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual   :set fdm=manual<CR>
476   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent   :set fdm=indent<CR>
477   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
478   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax   :set fdm=syntax<CR>
479   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff     :set fdm=diff<CR>
480   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker   :set fdm=marker<CR>
481   " create and delete folds
482   vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf     zf
483   an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd            zd
484   an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD      zD
485   " moving around in folds
486   an 40.340.300 &Tools.&Folding.-SEP2-                          <Nop>
487   an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\   :set fdc=0<CR>
488   an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\   :set fdc=2<CR>
489   an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\   :set fdc=3<CR>
490   an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\   :set fdc=4<CR>
491   an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\   :set fdc=5<CR>
492   an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\   :set fdc=6<CR>
493   an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\   :set fdc=7<CR>
494   an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\   :set fdc=8<CR>
495 endif  " has folding
497 if has("diff")
498   an 40.350.100 &Tools.&Diff.&Update            :diffupdate<CR>
499   an 40.350.110 &Tools.&Diff.&Get\ Block        :diffget<CR>
500   vunmenu &Tools.&Diff.&Get\ Block
501   vnoremenu &Tools.&Diff.&Get\ Block            :diffget<CR>
502   an 40.350.120 &Tools.&Diff.&Put\ Block        :diffput<CR>
503   vunmenu &Tools.&Diff.&Put\ Block
504   vnoremenu &Tools.&Diff.&Put\ Block            :diffput<CR>
505 endif
507 an 40.358 &Tools.-SEP2-                                 <Nop>
508 an 40.360 &Tools.&Make<Tab>:make                        :make<CR>
509 an 40.370 &Tools.&List\ Errors<Tab>:cl                  :cl<CR>
510 an 40.380 &Tools.L&ist\ Messages<Tab>:cl!               :cl!<CR>
511 an 40.390 &Tools.&Next\ Error<Tab>:cn                   :cn<CR>
512 an 40.400 &Tools.&Previous\ Error<Tab>:cp               :cp<CR>
513 an 40.410 &Tools.&Older\ List<Tab>:cold                 :colder<CR>
514 an 40.420 &Tools.N&ewer\ List<Tab>:cnew                 :cnewer<CR>
515 an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin    :cwin<CR>
516 an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen     :copen<CR>
517 an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose   :cclose<CR>
519 an 40.520 &Tools.-SEP3-                                 <Nop>
520 an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
521         \ :call <SID>XxdConv()<CR>
522 an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
523         \ :call <SID>XxdBack()<CR>
525 " Use a function to do the conversion, so that it also works with 'insertmode'
526 " set.
527 func! s:XxdConv()
528   let mod = &mod
529   if has("vms")
530     %!mc vim:xxd
531   else
532     call s:XxdFind()
533     exe '%!"' . g:xxdprogram . '"'
534   endif
535   if getline(1) =~ "^0000000:"          " only if it worked
536     set ft=xxd
537   endif
538   let &mod = mod
539 endfun
541 func! s:XxdBack()
542   let mod = &mod
543   if has("vms")
544     %!mc vim:xxd -r
545   else
546     call s:XxdFind()
547     exe '%!"' . g:xxdprogram . '" -r'
548   endif
549   set ft=
550   doautocmd filetypedetect BufReadPost
551   let &mod = mod
552 endfun
554 func! s:XxdFind()
555   if !exists("g:xxdprogram")
556     " On the PC xxd may not be in the path but in the install directory
557     if (has("win32") || has("dos32")) && !executable("xxd")
558       let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
559     else
560       let g:xxdprogram = "xxd"
561     endif
562   endif
563 endfun
565 " Setup the Tools.Compiler submenu
566 let s:n = globpath(&runtimepath, "compiler/*.vim")
567 let s:idx = 100
568 while strlen(s:n) > 0
569   let s:i = stridx(s:n, "\n")
570   if s:i < 0
571     let s:name = s:n
572     let s:n = ""
573   else
574     let s:name = strpart(s:n, 0, s:i)
575     let s:n = strpart(s:n, s:i + 1, 19999)
576   endif
577   " Ignore case for VMS and windows
578   let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
579   exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
580   unlet s:name
581   unlet s:i
582   let s:idx = s:idx + 10
583 endwhile
584 unlet s:n
585 unlet s:idx
587 if !exists("no_buffers_menu")
589 " Buffer list menu -- Setup functions & actions
591 " wait with building the menu until after loading 'session' files. Makes
592 " startup faster.
593 let s:bmenu_wait = 1
595 if !exists("bmenu_priority")
596   let bmenu_priority = 60
597 endif
599 func! s:BMAdd()
600   if s:bmenu_wait == 0
601     " when adding too many buffers, redraw in short format
602     if s:bmenu_count == &menuitems && s:bmenu_short == 0
603       call s:BMShow()
604     else
605       call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
606       let s:bmenu_count = s:bmenu_count + 1
607     endif
608   endif
609 endfunc
611 func! s:BMRemove()
612   if s:bmenu_wait == 0
613     let name = expand("<afile>")
614     if isdirectory(name)
615       return
616     endif
617     let munge = <SID>BMMunge(name, expand("<abuf>"))
619     if s:bmenu_short == 0
620       exe 'silent! aun &Buffers.' . munge
621     else
622       exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
623     endif
624     let s:bmenu_count = s:bmenu_count - 1
625   endif
626 endfunc
628 " Create the buffer menu (delete an existing one first).
629 func! s:BMShow(...)
630   let s:bmenu_wait = 1
631   let s:bmenu_short = 1
632   let s:bmenu_count = 0
633   "
634   " get new priority, if exists
635   if a:0 == 1
636     let g:bmenu_priority = a:1
637   endif
639   " remove old menu, if exists; keep one entry to avoid a torn off menu to
640   " disappear.
641   silent! unmenu &Buffers
642   exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
643   silent! unmenu! &Buffers
645   " create new menu; set 'cpo' to include the <CR>
646   let cpo_save = &cpo
647   set cpo&vim
648   exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
649   exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
650   exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
651   exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
652   exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
653   exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
654   let &cpo = cpo_save
655   unmenu &Buffers.Dummy
657   " figure out how many buffers there are
658   let buf = 1
659   while buf <= bufnr('$')
660     if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
661       let s:bmenu_count = s:bmenu_count + 1
662     endif
663     let buf = buf + 1
664   endwhile
665   if s:bmenu_count <= &menuitems
666     let s:bmenu_short = 0
667   endif
669   " iterate through buffer list, adding each buffer to the menu:
670   let buf = 1
671   while buf <= bufnr('$')
672     if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
673       call <SID>BMFilename(bufname(buf), buf)
674     endif
675     let buf = buf + 1
676   endwhile
677   let s:bmenu_wait = 0
678   aug buffer_list
679   au!
680   au BufCreate,BufFilePost * call <SID>BMAdd()
681   au BufDelete,BufFilePre * call <SID>BMRemove()
682   aug END
683 endfunc
685 func! s:BMHash(name)
686   " Make name all upper case, so that chars are between 32 and 96
687   let nm = substitute(a:name, ".*", '\U\0', "")
688   if has("ebcdic")
689     " HACK: Replace all non alphabetics with 'Z'
690     "       Just to make it work for now.
691     let nm = substitute(nm, "[^A-Z]", 'Z', "g")
692     let sp = char2nr('A') - 1
693   else
694     let sp = char2nr(' ')
695   endif
696   " convert first six chars into a number for sorting:
697   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)
698 endfunc
700 func! s:BMHash2(name)
701   let nm = substitute(a:name, ".", '\L\0', "")
702   " Not exactly right for EBCDIC...
703   if nm[0] < 'a' || nm[0] > 'z'
704     return '&others.'
705   elseif nm[0] <= 'd'
706     return '&abcd.'
707   elseif nm[0] <= 'h'
708     return '&efgh.'
709   elseif nm[0] <= 'l'
710     return '&ijkl.'
711   elseif nm[0] <= 'p'
712     return '&mnop.'
713   elseif nm[0] <= 't'
714     return '&qrst.'
715   else
716     return '&u-z.'
717   endif
718 endfunc
720 " insert a buffer name into the buffer menu:
721 func! s:BMFilename(name, num)
722   if isdirectory(a:name)
723     return
724   endif
725   let munge = <SID>BMMunge(a:name, a:num)
726   let hash = <SID>BMHash(munge)
727   if s:bmenu_short == 0
728     let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
729   else
730     let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
731   endif
732   " set 'cpo' to include the <CR>
733   let cpo_save = &cpo
734   set cpo&vim
735   exe name . ' :confirm b' . a:num . '<CR>'
736   let &cpo = cpo_save
737 endfunc
739 " Truncate a long path to fit it in a menu item.
740 if !exists("g:bmenu_max_pathlen")
741   let g:bmenu_max_pathlen = 35
742 endif
743 func! s:BMTruncName(fname)
744   let name = a:fname
745   if g:bmenu_max_pathlen < 5
746     let name = ""
747   else
748     let len = strlen(name)
749     if len > g:bmenu_max_pathlen
750       let amountl = (g:bmenu_max_pathlen / 2) - 2
751       let amountr = g:bmenu_max_pathlen - amountl - 3
752       let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
753       let left = substitute(name, pattern, '\1', '')
754       let right = substitute(name, pattern, '\2', '')
755       if strlen(left) + strlen(right) < len
756         let name = left . '...' . right
757       endif
758     endif
759   endif
760   return name
761 endfunc
763 func! s:BMMunge(fname, bnum)
764   let name = a:fname
765   if name == ''
766     if !exists("g:menutrans_no_file")
767       let g:menutrans_no_file = "[No file]"
768     endif
769     let name = g:menutrans_no_file
770   else
771     let name = fnamemodify(name, ':p:~')
772   endif
773   " detach file name and separate it out:
774   let name2 = fnamemodify(name, ':t')
775   if a:bnum >= 0
776     let name2 = name2 . ' (' . a:bnum . ')'
777   endif
778   let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
779   let name = escape(name, "\\. \t|")
780   let name = substitute(name, "&", "&&", "g")
781   let name = substitute(name, "\n", "^@", "g")
782   return name
783 endfunc
785 " When just starting Vim, load the buffer menu later
786 if has("vim_starting")
787   augroup LoadBufferMenu
788     au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
789     au  VimEnter * au! LoadBufferMenu
790   augroup END
791 else
792   call <SID>BMShow()
793 endif
795 endif " !exists("no_buffers_menu")
797 " Window menu
798 an 70.300 &Window.&New<Tab>^Wn                  <C-W>n
799 an 70.310 &Window.S&plit<Tab>^Ws                <C-W>s
800 an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^        <C-W><C-^>
801 an 70.330 &Window.Split\ &Vertically<Tab>^Wv    <C-W>v
802 if has("vertsplit")
803   an <silent> 70.332 &Window.Split\ File\ E&xplorer     :call MenuExplOpen()<CR>
804   if !exists("*MenuExplOpen")
805     fun MenuExplOpen()
806       if @% == ""
807         20vsp .
808       else
809         exe "20vsp " . expand("%:p:h")
810       endif
811     endfun
812   endif
813 endif
814 an 70.335 &Window.-SEP1-                                <Nop>
815 an 70.340 &Window.&Close<Tab>^Wc                        :confirm close<CR>
816 an 70.345 &Window.Close\ &Other(s)<Tab>^Wo              :confirm only<CR>
817 an 70.350 &Window.-SEP2-                                <Nop>
818 an 70.355 &Window.Move\ &To.&Top<Tab>^WK                <C-W>K
819 an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ             <C-W>J
820 an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH         <C-W>H
821 an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL        <C-W>L
822 an 70.360 &Window.Rotate\ &Up<Tab>^WR                   <C-W>R
823 an 70.362 &Window.Rotate\ &Down<Tab>^Wr                 <C-W>r
824 an 70.365 &Window.-SEP3-                                <Nop>
825 an 70.370 &Window.&Equal\ Size<Tab>^W=                  <C-W>=
826 an 70.380 &Window.&Max\ Height<Tab>^W_                  <C-W>_
827 an 70.390 &Window.M&in\ Height<Tab>^W1_                 <C-W>1_
828 an 70.400 &Window.Max\ &Width<Tab>^W\|                  <C-W>\|
829 an 70.410 &Window.Min\ Widt&h<Tab>^W1\|                 <C-W>1\|
831 " The popup menu
832 an 1.10 PopUp.&Undo                     u
833 an 1.15 PopUp.-SEP1-                    <Nop>
834 vnoremenu 1.20 PopUp.Cu&t               "+x
835 vnoremenu 1.30 PopUp.&Copy              "+y
836 cnoremenu 1.30 PopUp.&Copy              <C-Y>
837 nnoremenu 1.40 PopUp.&Paste             "+gP
838 cnoremenu 1.40 PopUp.&Paste             <C-R>+
839 exe 'vnoremenu <script> 1.40 PopUp.&Paste       ' . paste#paste_cmd['v']
840 exe 'inoremenu <script> 1.40 PopUp.&Paste       ' . paste#paste_cmd['i']
841 vnoremenu 1.50 PopUp.&Delete            x
842 an 1.55 PopUp.-SEP2-                    <Nop>
843 vnoremenu 1.60 PopUp.Select\ Blockwise  <C-V>
845 nnoremenu 1.70 PopUp.Select\ &Word      vaw
846 onoremenu 1.70 PopUp.Select\ &Word      aw
847 vnoremenu 1.70 PopUp.Select\ &Word      <C-C>vaw
848 inoremenu 1.70 PopUp.Select\ &Word      <C-O>vaw
849 cnoremenu 1.70 PopUp.Select\ &Word      <C-C>vaw
851 nnoremenu 1.73 PopUp.Select\ &Sentence  vas
852 onoremenu 1.73 PopUp.Select\ &Sentence  as
853 vnoremenu 1.73 PopUp.Select\ &Sentence  <C-C>vas
854 inoremenu 1.73 PopUp.Select\ &Sentence  <C-O>vas
855 cnoremenu 1.73 PopUp.Select\ &Sentence  <C-C>vas
857 nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
858 onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
859 vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
860 inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
861 cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
863 nnoremenu 1.80 PopUp.Select\ &Line      V
864 onoremenu 1.80 PopUp.Select\ &Line      <C-C>V
865 vnoremenu 1.80 PopUp.Select\ &Line      <C-C>V
866 inoremenu 1.80 PopUp.Select\ &Line      <C-O>V
867 cnoremenu 1.80 PopUp.Select\ &Line      <C-C>V
869 nnoremenu 1.90 PopUp.Select\ &Block     <C-V>
870 onoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
871 vnoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
872 inoremenu 1.90 PopUp.Select\ &Block     <C-O><C-V>
873 cnoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
875 noremenu  <script> <silent> 1.100 PopUp.Select\ &All    :<C-U>call <SID>SelectAll()<CR>
876 inoremenu <script> <silent> 1.100 PopUp.Select\ &All    <C-O>:call <SID>SelectAll()<CR>
877 cnoremenu <script> <silent> 1.100 PopUp.Select\ &All    <C-U>call <SID>SelectAll()<CR>
879 if has("spell")
880   " Spell suggestions in the popup menu.  Note that this will slow down the
881   " appearance of the menu!
882   func! <SID>SpellPopup()
883     if exists("s:changeitem") && s:changeitem != ''
884       call <SID>SpellDel()
885     endif
887     " Return quickly if spell checking is not enabled.
888     if !&spell || &spelllang == ''
889       return
890     endif
892     let curcol = col('.')
893     let [w, a] = spellbadword()
894     if col('.') > curcol                " don't use word after the cursor
895       let w = ''
896       call cursor(0, curcol)    " put the cursor back where it was
897     endif
898     if w != ''
899       if a == 'caps'
900         let s:suglist = [substitute(w, '.*', '\u&', '')]
901       else
902         let s:suglist = spellsuggest(w, 10)
903       endif
904       if len(s:suglist) <= 0
905         call cursor(0, curcol)  " put the cursor back where it was
906       else
907         let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
908         let s:fromword = w
909         let pri = 1
910         for sug in s:suglist
911           exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
912                 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
913           let pri += 1
914         endfor
916         let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
917         exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
919         let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
920         exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
922         anoremenu 1.8 PopUp.-SpellSep- :
923       endif
924     endif
925   endfunc
927   func! <SID>SpellReplace(n)
928     let l = getline('.')
929     call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
930           \ . strpart(l, col('.') + len(s:fromword) - 1))
931   endfunc
933   func! <SID>SpellDel()
934     exe "aunmenu PopUp." . s:changeitem
935     exe "aunmenu PopUp." . s:additem
936     exe "aunmenu PopUp." . s:ignoreitem
937     aunmenu PopUp.-SpellSep-
938     let s:changeitem = ''
939   endfun
941   augroup SpellPopupMenu
942     au! MenuPopup * call <SID>SpellPopup()
943   augroup END
944 endif
946 " The GUI toolbar (for MS-Windows and GTK)
947 if has("toolbar")
948   an 1.10 ToolBar.Open                  :browse confirm e<CR>
949   an <silent> 1.20 ToolBar.Save         :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
950   an 1.30 ToolBar.SaveAll               :browse confirm wa<CR>
952   if has("printer")
953     an 1.40   ToolBar.Print             :hardcopy<CR>
954     vunmenu   ToolBar.Print
955     vnoremenu ToolBar.Print             :hardcopy<CR>
956   elseif has("unix")
957     an 1.40   ToolBar.Print             :w !lpr<CR>
958     vunmenu   ToolBar.Print
959     vnoremenu ToolBar.Print             :w !lpr<CR>
960   endif
962   an 1.45 ToolBar.-sep1-                <Nop>
963   an 1.50 ToolBar.Undo                  u
964   an 1.60 ToolBar.Redo                  <C-R>
966   an 1.65 ToolBar.-sep2-                <Nop>
967   vnoremenu 1.70 ToolBar.Cut            "+x
968   vnoremenu 1.80 ToolBar.Copy           "+y
969   cnoremenu 1.80 ToolBar.Copy           <C-Y>
970   nnoremenu 1.90 ToolBar.Paste          "+gP
971   cnoremenu      ToolBar.Paste          <C-R>+
972   exe 'vnoremenu <script>        ToolBar.Paste  ' . paste#paste_cmd['v']
973   exe 'inoremenu <script>        ToolBar.Paste  ' . paste#paste_cmd['i']
975   if !has("gui_athena")
976     an 1.95   ToolBar.-sep3-            <Nop>
977     an 1.100  ToolBar.Replace           :promptrepl<CR>
978     vunmenu   ToolBar.Replace
979     vnoremenu ToolBar.Replace           y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
980     an 1.110  ToolBar.FindNext          n
981     an 1.120  ToolBar.FindPrev          N
982   endif
984   an 1.215 ToolBar.-sep5-               <Nop>
985   an <silent> 1.220 ToolBar.LoadSesn    :call <SID>LoadVimSesn()<CR>
986   an <silent> 1.230 ToolBar.SaveSesn    :call <SID>SaveVimSesn()<CR>
987   an 1.240 ToolBar.RunScript            :browse so<CR>
989   an 1.245 ToolBar.-sep6-               <Nop>
990   an 1.250 ToolBar.Make                 :make<CR>
991   an 1.270 ToolBar.RunCtags             :exe "!" . g:ctags_command<CR>
992   an 1.280 ToolBar.TagJump              g<C-]>
994   an 1.295 ToolBar.-sep7-               <Nop>
995   an 1.300 ToolBar.Help                 :help<CR>
996   an <silent> 1.310 ToolBar.FindHelp    :call <SID>Helpfind()<CR>
998 " Only set the tooltips here if not done in a language menu file
999 if exists("*Do_toolbar_tmenu")
1000   call Do_toolbar_tmenu()
1001 else
1002   let did_toolbar_tmenu = 1
1003   tmenu ToolBar.Open            Open file
1004   tmenu ToolBar.Save            Save current file
1005   tmenu ToolBar.SaveAll         Save all files
1006   tmenu ToolBar.Print           Print
1007   tmenu ToolBar.Undo            Undo
1008   tmenu ToolBar.Redo            Redo
1009   tmenu ToolBar.Cut             Cut to clipboard
1010   tmenu ToolBar.Copy            Copy to clipboard
1011   tmenu ToolBar.Paste           Paste from Clipboard
1012   if !has("gui_athena")
1013     tmenu ToolBar.Find          Find...
1014     tmenu ToolBar.FindNext      Find Next
1015     tmenu ToolBar.FindPrev      Find Previous
1016     tmenu ToolBar.Replace               Find / Replace...
1017   endif
1018   tmenu ToolBar.LoadSesn        Choose a session to load
1019   tmenu ToolBar.SaveSesn        Save current session
1020   tmenu ToolBar.RunScript       Choose a Vim Script to run
1021   tmenu ToolBar.Make            Make current project (:make)
1022   tmenu ToolBar.RunCtags        Build tags in current directory tree (!ctags -R .)
1023   tmenu ToolBar.TagJump         Jump to tag under cursor
1024   tmenu ToolBar.Help            Vim Help
1025   tmenu ToolBar.FindHelp        Search Vim Help
1026 endif
1028 " Select a session to load; default to current session name if present
1029 fun! s:LoadVimSesn()
1030   if strlen(v:this_session) > 0
1031     let name = escape(v:this_session, ' \t#%$|<>"*?[{`')
1032   else
1033     let name = "Session.vim"
1034   endif
1035   execute "browse so " . name
1036 endfun
1038 " Select a session to save; default to current session name if present
1039 fun! s:SaveVimSesn()
1040   if strlen(v:this_session) == 0
1041     let v:this_session = "Session.vim"
1042   endif
1043   execute "browse mksession! " . escape(v:this_session, ' \t#%$|<>"*?[{`')
1044 endfun
1046 endif
1048 endif " !exists("did_install_default_menus")
1050 " Define these items always, so that syntax can be switched on when it wasn't.
1051 " But skip them when the Syntax menu was disabled by the user.
1052 if !exists("did_install_syntax_menu")
1053   an 50.212 &Syntax.&Manual             :syn manual<CR>
1054   an 50.214 &Syntax.A&utomatic          :syn on<CR>
1055   an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1056   if !exists("*s:SynOnOff")
1057     fun s:SynOnOff()
1058       if has("syntax_items")
1059         syn clear
1060       else
1061         if !exists("g:syntax_on")
1062           syn manual
1063         endif
1064         set syn=ON
1065       endif
1066     endfun
1067   endif
1068 endif
1071 " Install the Syntax menu only when filetype.vim has been loaded or when
1072 " manual syntax highlighting is enabled.
1073 " Avoid installing the Syntax menu twice.
1074 if (exists("did_load_filetypes") || exists("syntax_on"))
1075         \ && !exists("did_install_syntax_menu")
1076   let did_install_syntax_menu = 1
1078 " Skip setting up the individual syntax selection menus unless
1079 " do_syntax_sel_menu is defined (it takes quite a bit of time).
1080 if exists("do_syntax_sel_menu")
1081   runtime! synmenu.vim
1082 else
1083   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>
1084   an 50.195 &Syntax.-SEP1-              <Nop>
1085 endif
1087 an 50.210 &Syntax.&Off                  :syn off<CR>
1088 an 50.700 &Syntax.-SEP3-                <Nop>
1089 an 50.710 &Syntax.Co&lor\ test          :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1090 an 50.720 &Syntax.&Highlight\ test      :runtime syntax/hitest.vim<CR>
1091 an 50.730 &Syntax.&Convert\ to\ HTML    :runtime syntax/2html.vim<CR>
1093 endif " !exists("did_install_syntax_menu")
1095 " Restore the previous value of 'cpoptions'.
1096 let &cpo = s:cpo_save
1097 unlet s:cpo_save
1099 " vim: set sw=2 :