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