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