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