Generated configure script
[MacVim.git] / runtime / menu.vim
blob76334193aa42ce065472ad4c19d4827c16e30229
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 Jan 09
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                                             \ && !getbufvar(buf, "&bufsecret")
663       let s:bmenu_count = s:bmenu_count + 1
664     endif
665     let buf = buf + 1
666   endwhile
667   if s:bmenu_count <= &menuitems
668     let s:bmenu_short = 0
669   endif
671   " iterate through buffer list, adding each buffer to the menu:
672   let buf = 1
673   while buf <= bufnr('$')
674     if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
675                                             \ && !getbufvar(buf, "&bufsecret")
676       call <SID>BMFilename(bufname(buf), buf)
677     endif
678     let buf = buf + 1
679   endwhile
680   let s:bmenu_wait = 0
681   aug buffer_list
682   au!
683   au BufCreate,BufFilePost * call <SID>BMAdd()
684   au BufDelete,BufFilePre * call <SID>BMRemove()
685   aug END
686 endfunc
688 func! s:BMHash(name)
689   " Make name all upper case, so that chars are between 32 and 96
690   let nm = substitute(a:name, ".*", '\U\0', "")
691   if has("ebcdic")
692     " HACK: Replace all non alphabetics with 'Z'
693     "       Just to make it work for now.
694     let nm = substitute(nm, "[^A-Z]", 'Z', "g")
695     let sp = char2nr('A') - 1
696   else
697     let sp = char2nr(' ')
698   endif
699   " convert first six chars into a number for sorting:
700   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)
701 endfunc
703 func! s:BMHash2(name)
704   let nm = substitute(a:name, ".", '\L\0', "")
705   " Not exactly right for EBCDIC...
706   if nm[0] < 'a' || nm[0] > 'z'
707     return '&others.'
708   elseif nm[0] <= 'd'
709     return '&abcd.'
710   elseif nm[0] <= 'h'
711     return '&efgh.'
712   elseif nm[0] <= 'l'
713     return '&ijkl.'
714   elseif nm[0] <= 'p'
715     return '&mnop.'
716   elseif nm[0] <= 't'
717     return '&qrst.'
718   else
719     return '&u-z.'
720   endif
721 endfunc
723 " insert a buffer name into the buffer menu:
724 func! s:BMFilename(name, num)
725   if isdirectory(a:name)
726     return
727   endif
728   let munge = <SID>BMMunge(a:name, a:num)
729   let hash = <SID>BMHash(munge)
730   if s:bmenu_short == 0
731     let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
732   else
733     let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
734   endif
735   " set 'cpo' to include the <CR>
736   let cpo_save = &cpo
737   set cpo&vim
738   exe name . ' :confirm b' . a:num . '<CR>'
739   let &cpo = cpo_save
740 endfunc
742 " Truncate a long path to fit it in a menu item.
743 if !exists("g:bmenu_max_pathlen")
744   let g:bmenu_max_pathlen = 35
745 endif
746 func! s:BMTruncName(fname)
747   let name = a:fname
748   if g:bmenu_max_pathlen < 5
749     let name = ""
750   else
751     let len = strlen(name)
752     if len > g:bmenu_max_pathlen
753       let amountl = (g:bmenu_max_pathlen / 2) - 2
754       let amountr = g:bmenu_max_pathlen - amountl - 3
755       let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
756       let left = substitute(name, pattern, '\1', '')
757       let right = substitute(name, pattern, '\2', '')
758       if strlen(left) + strlen(right) < len
759         let name = left . '...' . right
760       endif
761     endif
762   endif
763   return name
764 endfunc
766 func! s:BMMunge(fname, bnum)
767   let name = a:fname
768   if name == ''
769     if !exists("g:menutrans_no_file")
770       let g:menutrans_no_file = "[No file]"
771     endif
772     let name = g:menutrans_no_file
773   else
774     let name = fnamemodify(name, ':p:~')
775   endif
776   " detach file name and separate it out:
777   let name2 = fnamemodify(name, ':t')
778   if a:bnum >= 0
779     let name2 = name2 . ' (' . a:bnum . ')'
780   endif
781   let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
782   let name = escape(name, "\\. \t|")
783   let name = substitute(name, "&", "&&", "g")
784   let name = substitute(name, "\n", "^@", "g")
785   return name
786 endfunc
788 " When just starting Vim, load the buffer menu later
789 if has("vim_starting")
790   augroup LoadBufferMenu
791     au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
792     au  VimEnter * au! LoadBufferMenu
793   augroup END
794 else
795   call <SID>BMShow()
796 endif
798 endif " !exists("no_buffers_menu")
800 " Window menu
801 an 70.300 &Window.&New<Tab>^Wn                  <C-W>n
802 an 70.310 &Window.S&plit<Tab>^Ws                <C-W>s
803 an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^        <C-W><C-^>
804 an 70.330 &Window.Split\ &Vertically<Tab>^Wv    <C-W>v
805 if has("vertsplit")
806   an <silent> 70.332 &Window.Split\ File\ E&xplorer     :call MenuExplOpen()<CR>
807   if !exists("*MenuExplOpen")
808     fun MenuExplOpen()
809       if @% == ""
810         20vsp .
811       else
812         exe "20vsp " . expand("%:p:h")
813       endif
814     endfun
815   endif
816 endif
817 an 70.335 &Window.-SEP1-                                <Nop>
818 an 70.340 &Window.&Close<Tab>^Wc                        :confirm close<CR>
819 an 70.345 &Window.Close\ &Other(s)<Tab>^Wo              :confirm only<CR>
820 an 70.350 &Window.-SEP2-                                <Nop>
821 an 70.355 &Window.Move\ &To.&Top<Tab>^WK                <C-W>K
822 an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ             <C-W>J
823 an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH         <C-W>H
824 an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL        <C-W>L
825 an 70.360 &Window.Rotate\ &Up<Tab>^WR                   <C-W>R
826 an 70.362 &Window.Rotate\ &Down<Tab>^Wr                 <C-W>r
827 an 70.365 &Window.-SEP3-                                <Nop>
828 an 70.370 &Window.&Equal\ Size<Tab>^W=                  <C-W>=
829 an 70.380 &Window.&Max\ Height<Tab>^W_                  <C-W>_
830 an 70.390 &Window.M&in\ Height<Tab>^W1_                 <C-W>1_
831 an 70.400 &Window.Max\ &Width<Tab>^W\|                  <C-W>\|
832 an 70.410 &Window.Min\ Widt&h<Tab>^W1\|                 <C-W>1\|
834 " The popup menu
835 an 1.10 PopUp.&Undo                     u
836 an 1.15 PopUp.-SEP1-                    <Nop>
837 vnoremenu 1.20 PopUp.Cu&t               "+x
838 vnoremenu 1.30 PopUp.&Copy              "+y
839 cnoremenu 1.30 PopUp.&Copy              <C-Y>
840 nnoremenu 1.40 PopUp.&Paste             "+gP
841 cnoremenu 1.40 PopUp.&Paste             <C-R>+
842 exe 'vnoremenu <script> 1.40 PopUp.&Paste       ' . paste#paste_cmd['v']
843 exe 'inoremenu <script> 1.40 PopUp.&Paste       ' . paste#paste_cmd['i']
844 vnoremenu 1.50 PopUp.&Delete            x
845 an 1.55 PopUp.-SEP2-                    <Nop>
846 vnoremenu 1.60 PopUp.Select\ Blockwise  <C-V>
848 nnoremenu 1.70 PopUp.Select\ &Word      vaw
849 onoremenu 1.70 PopUp.Select\ &Word      aw
850 vnoremenu 1.70 PopUp.Select\ &Word      <C-C>vaw
851 inoremenu 1.70 PopUp.Select\ &Word      <C-O>vaw
852 cnoremenu 1.70 PopUp.Select\ &Word      <C-C>vaw
854 nnoremenu 1.73 PopUp.Select\ &Sentence  vas
855 onoremenu 1.73 PopUp.Select\ &Sentence  as
856 vnoremenu 1.73 PopUp.Select\ &Sentence  <C-C>vas
857 inoremenu 1.73 PopUp.Select\ &Sentence  <C-O>vas
858 cnoremenu 1.73 PopUp.Select\ &Sentence  <C-C>vas
860 nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
861 onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
862 vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
863 inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
864 cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
866 nnoremenu 1.80 PopUp.Select\ &Line      V
867 onoremenu 1.80 PopUp.Select\ &Line      <C-C>V
868 vnoremenu 1.80 PopUp.Select\ &Line      <C-C>V
869 inoremenu 1.80 PopUp.Select\ &Line      <C-O>V
870 cnoremenu 1.80 PopUp.Select\ &Line      <C-C>V
872 nnoremenu 1.90 PopUp.Select\ &Block     <C-V>
873 onoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
874 vnoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
875 inoremenu 1.90 PopUp.Select\ &Block     <C-O><C-V>
876 cnoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
878 noremenu  <script> <silent> 1.100 PopUp.Select\ &All    :<C-U>call <SID>SelectAll()<CR>
879 inoremenu <script> <silent> 1.100 PopUp.Select\ &All    <C-O>:call <SID>SelectAll()<CR>
880 cnoremenu <script> <silent> 1.100 PopUp.Select\ &All    <C-U>call <SID>SelectAll()<CR>
882 if has("spell")
883   " Spell suggestions in the popup menu.  Note that this will slow down the
884   " appearance of the menu!
885   func! <SID>SpellPopup()
886     if exists("s:changeitem") && s:changeitem != ''
887       call <SID>SpellDel()
888     endif
890     " Return quickly if spell checking is not enabled.
891     if !&spell || &spelllang == ''
892       return
893     endif
895     let curcol = col('.')
896     let [w, a] = spellbadword()
897     if col('.') > curcol                " don't use word after the cursor
898       let w = ''
899       call cursor(0, curcol)    " put the cursor back where it was
900     endif
901     if w != ''
902       if a == 'caps'
903         let s:suglist = [substitute(w, '.*', '\u&', '')]
904       else
905         let s:suglist = spellsuggest(w, 10)
906       endif
907       if len(s:suglist) <= 0
908         call cursor(0, curcol)  " put the cursor back where it was
909       else
910         let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
911         let s:fromword = w
912         let pri = 1
913         for sug in s:suglist
914           exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
915                 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
916           let pri += 1
917         endfor
919         let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
920         exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
922         let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
923         exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
925         anoremenu 1.8 PopUp.-SpellSep- :
926       endif
927     endif
928   endfunc
930   func! <SID>SpellReplace(n)
931     let l = getline('.')
932     call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
933           \ . strpart(l, col('.') + len(s:fromword) - 1))
934   endfunc
936   func! <SID>SpellDel()
937     exe "aunmenu PopUp." . s:changeitem
938     exe "aunmenu PopUp." . s:additem
939     exe "aunmenu PopUp." . s:ignoreitem
940     aunmenu PopUp.-SpellSep-
941     let s:changeitem = ''
942   endfun
944   augroup SpellPopupMenu
945     au! MenuPopup * call <SID>SpellPopup()
946   augroup END
947 endif
949 " The GUI toolbar (for MS-Windows and GTK)
950 if has("toolbar")
951   an 1.10 ToolBar.Open                  :browse confirm e<CR>
952   an <silent> 1.20 ToolBar.Save         :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
953   an 1.30 ToolBar.SaveAll               :browse confirm wa<CR>
955   if has("printer")
956     an 1.40   ToolBar.Print             :hardcopy<CR>
957     vunmenu   ToolBar.Print
958     vnoremenu ToolBar.Print             :hardcopy<CR>
959   elseif has("unix")
960     an 1.40   ToolBar.Print             :w !lpr<CR>
961     vunmenu   ToolBar.Print
962     vnoremenu ToolBar.Print             :w !lpr<CR>
963   endif
965   an 1.45 ToolBar.-sep1-                <Nop>
966   an 1.50 ToolBar.Undo                  u
967   an 1.60 ToolBar.Redo                  <C-R>
969   an 1.65 ToolBar.-sep2-                <Nop>
970   vnoremenu 1.70 ToolBar.Cut            "+x
971   vnoremenu 1.80 ToolBar.Copy           "+y
972   cnoremenu 1.80 ToolBar.Copy           <C-Y>
973   nnoremenu 1.90 ToolBar.Paste          "+gP
974   cnoremenu      ToolBar.Paste          <C-R>+
975   exe 'vnoremenu <script>        ToolBar.Paste  ' . paste#paste_cmd['v']
976   exe 'inoremenu <script>        ToolBar.Paste  ' . paste#paste_cmd['i']
978   if !has("gui_athena")
979     an 1.95   ToolBar.-sep3-            <Nop>
980     an 1.100  ToolBar.Replace           :promptrepl<CR>
981     vunmenu   ToolBar.Replace
982     vnoremenu ToolBar.Replace           y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
983     an 1.110  ToolBar.FindNext          n
984     an 1.120  ToolBar.FindPrev          N
985   endif
987   an 1.215 ToolBar.-sep5-               <Nop>
988   an <silent> 1.220 ToolBar.LoadSesn    :call <SID>LoadVimSesn()<CR>
989   an <silent> 1.230 ToolBar.SaveSesn    :call <SID>SaveVimSesn()<CR>
990   an 1.240 ToolBar.RunScript            :browse so<CR>
992   an 1.245 ToolBar.-sep6-               <Nop>
993   an 1.250 ToolBar.Make                 :make<CR>
994   an 1.270 ToolBar.RunCtags             :exe "!" . g:ctags_command<CR>
995   an 1.280 ToolBar.TagJump              g<C-]>
997   an 1.295 ToolBar.-sep7-               <Nop>
998   an 1.300 ToolBar.Help                 :help<CR>
999   an <silent> 1.310 ToolBar.FindHelp    :call <SID>Helpfind()<CR>
1001 " Only set the tooltips here if not done in a language menu file
1002 if exists("*Do_toolbar_tmenu")
1003   call Do_toolbar_tmenu()
1004 else
1005   let did_toolbar_tmenu = 1
1006   tmenu ToolBar.Open            Open file
1007   tmenu ToolBar.Save            Save current file
1008   tmenu ToolBar.SaveAll         Save all files
1009   tmenu ToolBar.Print           Print
1010   tmenu ToolBar.Undo            Undo
1011   tmenu ToolBar.Redo            Redo
1012   tmenu ToolBar.Cut             Cut to clipboard
1013   tmenu ToolBar.Copy            Copy to clipboard
1014   tmenu ToolBar.Paste           Paste from Clipboard
1015   if !has("gui_athena")
1016     tmenu ToolBar.Find          Find...
1017     tmenu ToolBar.FindNext      Find Next
1018     tmenu ToolBar.FindPrev      Find Previous
1019     tmenu ToolBar.Replace               Find / Replace...
1020   endif
1021   tmenu ToolBar.LoadSesn        Choose a session to load
1022   tmenu ToolBar.SaveSesn        Save current session
1023   tmenu ToolBar.RunScript       Choose a Vim Script to run
1024   tmenu ToolBar.Make            Make current project (:make)
1025   tmenu ToolBar.RunCtags        Build tags in current directory tree (!ctags -R .)
1026   tmenu ToolBar.TagJump         Jump to tag under cursor
1027   tmenu ToolBar.Help            Vim Help
1028   tmenu ToolBar.FindHelp        Search Vim Help
1029 endif
1031 " Select a session to load; default to current session name if present
1032 fun! s:LoadVimSesn()
1033   if strlen(v:this_session) > 0
1034     let name = escape(v:this_session, ' \t#%$|<>"*?[{`')
1035   else
1036     let name = "Session.vim"
1037   endif
1038   execute "browse so " . name
1039 endfun
1041 " Select a session to save; default to current session name if present
1042 fun! s:SaveVimSesn()
1043   if strlen(v:this_session) == 0
1044     let v:this_session = "Session.vim"
1045   endif
1046   execute "browse mksession! " . escape(v:this_session, ' \t#%$|<>"*?[{`')
1047 endfun
1049 endif
1051 endif " !exists("did_install_default_menus")
1053 " Define these items always, so that syntax can be switched on when it wasn't.
1054 " But skip them when the Syntax menu was disabled by the user.
1055 if !exists("did_install_syntax_menu")
1056   an 50.212 &Syntax.&Manual             :syn manual<CR>
1057   an 50.214 &Syntax.A&utomatic          :syn on<CR>
1058   an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1059   if !exists("*s:SynOnOff")
1060     fun s:SynOnOff()
1061       if has("syntax_items")
1062         syn clear
1063       else
1064         if !exists("g:syntax_on")
1065           syn manual
1066         endif
1067         set syn=ON
1068       endif
1069     endfun
1070   endif
1071 endif
1074 " Install the Syntax menu only when filetype.vim has been loaded or when
1075 " manual syntax highlighting is enabled.
1076 " Avoid installing the Syntax menu twice.
1077 if (exists("did_load_filetypes") || exists("syntax_on"))
1078         \ && !exists("did_install_syntax_menu")
1079   let did_install_syntax_menu = 1
1081 " Skip setting up the individual syntax selection menus unless
1082 " do_syntax_sel_menu is defined (it takes quite a bit of time).
1083 if exists("do_syntax_sel_menu")
1084   runtime! synmenu.vim
1085 else
1086   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>
1087   an 50.195 &Syntax.-SEP1-              <Nop>
1088 endif
1090 an 50.210 &Syntax.&Off                  :syn off<CR>
1091 an 50.700 &Syntax.-SEP3-                <Nop>
1092 an 50.710 &Syntax.Co&lor\ test          :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1093 an 50.720 &Syntax.&Highlight\ test      :runtime syntax/hitest.vim<CR>
1094 an 50.730 &Syntax.&Convert\ to\ HTML    :runtime syntax/2html.vim<CR>
1096 endif " !exists("did_install_syntax_menu")
1098 " Restore the previous value of 'cpoptions'.
1099 let &cpo = s:cpo_save
1100 unlet s:cpo_save
1102 " vim: set sw=2 :