Merge branch 'vim-with-runtime' into feat/quickfix-title
[vim_extended.git] / runtime / menu.vim
blobb7eccea301129d64ebd9d53636920758d06686c7
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.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
280 an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
281 an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr!      :set lbr! lbr?<CR>
282 an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et!   :set et! et?<CR>
283 an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai!  :set ai! ai?<CR>
284 an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
286 " other options
287 an 20.440.600 &Edit.F&ile\ Settings.-SEP2-              <Nop>
288 an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2    :set sw=2 sw?<CR>
289 an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3    :set sw=3 sw?<CR>
290 an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4    :set sw=4 sw?<CR>
291 an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5    :set sw=5 sw?<CR>
292 an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6    :set sw=6 sw?<CR>
293 an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8    :set sw=8 sw?<CR>
295 an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
296 an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
297 an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
298 an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
299 an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
300 an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
302 an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\.  :call <SID>TextWidth()<CR>
303 an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\.  :call <SID>FileFormat()<CR>
304 fun! s:TextWidth()
305   if !exists("g:menutrans_textwidth_dialog")
306     let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
307   endif
308   let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
309   if n != ""
310     " remove leading zeros to avoid it being used as an octal number
311     let &tw = substitute(n, "^0*", "", "")
312   endif
313 endfun
315 fun! s:FileFormat()
316   if !exists("g:menutrans_fileformat_dialog")
317     let g:menutrans_fileformat_dialog = "Select format for writing the file"
318   endif
319   if !exists("g:menutrans_fileformat_choices")
320     let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
321   endif
322   if &ff == "dos"
323     let def = 2
324   elseif &ff == "mac"
325     let def = 3
326   else
327     let def = 1
328   endif
329   let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
330   if n == 1
331     set ff=unix
332   elseif n == 2
333     set ff=dos
334   elseif n == 3
335     set ff=mac
336   endif
337 endfun
339 " Setup the Edit.Color Scheme submenu
340 let s:n = globpath(&runtimepath, "colors/*.vim")
341 let s:idx = 100
342 while strlen(s:n) > 0
343   let s:i = stridx(s:n, "\n")
344   if s:i < 0
345     let s:name = s:n
346     let s:n = ""
347   else
348     let s:name = strpart(s:n, 0, s:i)
349     let s:n = strpart(s:n, s:i + 1, 19999)
350   endif
351   " Ignore case for VMS and windows
352   let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
353   exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
354   unlet s:name
355   unlet s:i
356   let s:idx = s:idx + 10
357 endwhile
358 unlet s:n
359 unlet s:idx
361 " Setup the Edit.Keymap submenu
362 if has("keymap")
363   let s:n = globpath(&runtimepath, "keymap/*.vim")
364   if s:n != ""
365     let s:idx = 100
366     an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
367     while strlen(s:n) > 0
368       let s:i = stridx(s:n, "\n")
369       if s:i < 0
370         let s:name = s:n
371         let s:n = ""
372       else
373         let s:name = strpart(s:n, 0, s:i)
374         let s:n = strpart(s:n, s:i + 1, 19999)
375       endif
376       " Ignore case for VMS and windows
377       let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
378       exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
379       unlet s:name
380       unlet s:i
381       let s:idx = s:idx + 10
382     endwhile
383     unlet s:idx
384   endif
385   unlet s:n
386 endif
387 if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
388   an 20.470 &Edit.Select\ Fo&nt\.\.\.   :set guifont=*<CR>
389 endif
391 " Programming menu
392 if !exists("g:ctags_command")
393   if has("vms")
394     let g:ctags_command = "mc vim:ctags *.*"
395   else
396     let g:ctags_command = "ctags -R ."
397   endif
398 endif
400 an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^]   g<C-]>
401 vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
402 vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^]   g<C-]>
403 an 40.310 &Tools.Jump\ &back<Tab>^T             <C-T>
404 an 40.320 &Tools.Build\ &Tags\ File             :exe "!" . g:ctags_command<CR>
406 if has("folding") || has("spell")
407   an 40.330 &Tools.-SEP1-                                               <Nop>
408 endif
410 " Tools.Spelling Menu
411 if has("spell")
412   an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On              :set spell<CR>
413   an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off             :set nospell<CR>
414   an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s        ]s
415   an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s    [s
416   an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z=   z=
417   an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall   :spellrepall<CR>
418   an 40.335.200 &Tools.&Spelling.-SEP1-                         <Nop>
419   an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en"        :set spl=en spell<CR>
420   an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au"     :set spl=en_au spell<CR>
421   an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca"     :set spl=en_ca spell<CR>
422   an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb"     :set spl=en_gb spell<CR>
423   an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz"     :set spl=en_nz spell<CR>
424   an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us"     :set spl=en_us spell<CR>
425   an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages        :call <SID>SpellLang()<CR>
427   let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
428   func! s:SpellLang()
429     for cmd in s:undo_spellang
430       exe "silent! " . cmd
431     endfor
432     let s:undo_spellang = []
434     if &enc == "iso-8859-15"
435       let enc = "latin1"
436     else
437       let enc = &enc
438     endif
440     let found = 0
441     let s = globpath(&rtp, "spell/*." . enc . ".spl")
442     if s != ""
443       let n = 300
444       for f in split(s, "\n")
445         let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
446         if nm != "en" && nm !~ '/'
447           let found += 1
448           let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
449           exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
450           let s:undo_spellang += ['aun ' . menuname]
451         endif
452         let n += 10
453       endfor
454     endif
455     if found == 0
456       echomsg "Could not find other spell files"
457     elseif found == 1
458       echomsg "Found spell file " . nm
459     else
460       echomsg "Found " . found . " more spell files"
461     endif
462     " Need to redo this when 'encoding' is changed.
463     augroup spellmenu
464     au! EncodingChanged * call <SID>SpellLang()
465     augroup END
466   endfun
468 endif
470 " Tools.Fold Menu
471 if has("folding")
472   " open close folds
473   an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi           zi
474   an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv              zv
475   an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx      zMzx
476   an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm              zm
477   an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM               zM
478   an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr               zr
479   an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR                zR
480   " fold method
481   an 40.340.200 &Tools.&Folding.-SEP1-                  <Nop>
482   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual   :set fdm=manual<CR>
483   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent   :set fdm=indent<CR>
484   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
485   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax   :set fdm=syntax<CR>
486   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff     :set fdm=diff<CR>
487   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker   :set fdm=marker<CR>
488   " create and delete folds
489   vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf     zf
490   an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd            zd
491   an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD      zD
492   " moving around in folds
493   an 40.340.300 &Tools.&Folding.-SEP2-                          <Nop>
494   an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\   :set fdc=0<CR>
495   an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\   :set fdc=2<CR>
496   an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\   :set fdc=3<CR>
497   an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\   :set fdc=4<CR>
498   an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\   :set fdc=5<CR>
499   an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\   :set fdc=6<CR>
500   an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\   :set fdc=7<CR>
501   an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\   :set fdc=8<CR>
502 endif  " has folding
504 if has("diff")
505   an 40.350.100 &Tools.&Diff.&Update            :diffupdate<CR>
506   an 40.350.110 &Tools.&Diff.&Get\ Block        :diffget<CR>
507   vunmenu &Tools.&Diff.&Get\ Block
508   vnoremenu &Tools.&Diff.&Get\ Block            :diffget<CR>
509   an 40.350.120 &Tools.&Diff.&Put\ Block        :diffput<CR>
510   vunmenu &Tools.&Diff.&Put\ Block
511   vnoremenu &Tools.&Diff.&Put\ Block            :diffput<CR>
512 endif
514 an 40.358 &Tools.-SEP2-                                 <Nop>
515 an 40.360 &Tools.&Make<Tab>:make                        :make<CR>
516 an 40.370 &Tools.&List\ Errors<Tab>:cl                  :cl<CR>
517 an 40.380 &Tools.L&ist\ Messages<Tab>:cl!               :cl!<CR>
518 an 40.390 &Tools.&Next\ Error<Tab>:cn                   :cn<CR>
519 an 40.400 &Tools.&Previous\ Error<Tab>:cp               :cp<CR>
520 an 40.410 &Tools.&Older\ List<Tab>:cold                 :colder<CR>
521 an 40.420 &Tools.N&ewer\ List<Tab>:cnew                 :cnewer<CR>
522 an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin    :cwin<CR>
523 an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen     :copen<CR>
524 an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose   :cclose<CR>
526 an 40.520 &Tools.-SEP3-                                 <Nop>
527 an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
528         \ :call <SID>XxdConv()<CR>
529 an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
530         \ :call <SID>XxdBack()<CR>
532 " Use a function to do the conversion, so that it also works with 'insertmode'
533 " set.
534 func! s:XxdConv()
535   let mod = &mod
536   if has("vms")
537     %!mc vim:xxd
538   else
539     call s:XxdFind()
540     exe '%!"' . g:xxdprogram . '"'
541   endif
542   if getline(1) =~ "^0000000:"          " only if it worked
543     set ft=xxd
544   endif
545   let &mod = mod
546 endfun
548 func! s:XxdBack()
549   let mod = &mod
550   if has("vms")
551     %!mc vim:xxd -r
552   else
553     call s:XxdFind()
554     exe '%!"' . g:xxdprogram . '" -r'
555   endif
556   set ft=
557   doautocmd filetypedetect BufReadPost
558   let &mod = mod
559 endfun
561 func! s:XxdFind()
562   if !exists("g:xxdprogram")
563     " On the PC xxd may not be in the path but in the install directory
564     if (has("win32") || has("dos32")) && !executable("xxd")
565       let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
566     else
567       let g:xxdprogram = "xxd"
568     endif
569   endif
570 endfun
572 " Setup the Tools.Compiler submenu
573 let s:n = globpath(&runtimepath, "compiler/*.vim")
574 let s:idx = 100
575 while strlen(s:n) > 0
576   let s:i = stridx(s:n, "\n")
577   if s:i < 0
578     let s:name = s:n
579     let s:n = ""
580   else
581     let s:name = strpart(s:n, 0, s:i)
582     let s:n = strpart(s:n, s:i + 1, 19999)
583   endif
584   " Ignore case for VMS and windows
585   let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
586   exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
587   unlet s:name
588   unlet s:i
589   let s:idx = s:idx + 10
590 endwhile
591 unlet s:n
592 unlet s:idx
594 if !exists("no_buffers_menu")
596 " Buffer list menu -- Setup functions & actions
598 " wait with building the menu until after loading 'session' files. Makes
599 " startup faster.
600 let s:bmenu_wait = 1
602 if !exists("bmenu_priority")
603   let bmenu_priority = 60
604 endif
606 func! s:BMAdd()
607   if s:bmenu_wait == 0
608     " when adding too many buffers, redraw in short format
609     if s:bmenu_count == &menuitems && s:bmenu_short == 0
610       call s:BMShow()
611     else
612       call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
613       let s:bmenu_count = s:bmenu_count + 1
614     endif
615   endif
616 endfunc
618 func! s:BMRemove()
619   if s:bmenu_wait == 0
620     let name = expand("<afile>")
621     if isdirectory(name)
622       return
623     endif
624     let munge = <SID>BMMunge(name, expand("<abuf>"))
626     if s:bmenu_short == 0
627       exe 'silent! aun &Buffers.' . munge
628     else
629       exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
630     endif
631     let s:bmenu_count = s:bmenu_count - 1
632   endif
633 endfunc
635 " Create the buffer menu (delete an existing one first).
636 func! s:BMShow(...)
637   let s:bmenu_wait = 1
638   let s:bmenu_short = 1
639   let s:bmenu_count = 0
640   "
641   " get new priority, if exists
642   if a:0 == 1
643     let g:bmenu_priority = a:1
644   endif
646   " remove old menu, if exists; keep one entry to avoid a torn off menu to
647   " disappear.
648   silent! unmenu &Buffers
649   exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
650   silent! unmenu! &Buffers
652   " create new menu; set 'cpo' to include the <CR>
653   let cpo_save = &cpo
654   set cpo&vim
655   exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
656   exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
657   exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
658   exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
659   exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
660   exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
661   let &cpo = cpo_save
662   unmenu &Buffers.Dummy
664   " figure out how many buffers there are
665   let buf = 1
666   while buf <= bufnr('$')
667     if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
668       let s:bmenu_count = s:bmenu_count + 1
669     endif
670     let buf = buf + 1
671   endwhile
672   if s:bmenu_count <= &menuitems
673     let s:bmenu_short = 0
674   endif
676   " iterate through buffer list, adding each buffer to the menu:
677   let buf = 1
678   while buf <= bufnr('$')
679     if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
680       call <SID>BMFilename(bufname(buf), buf)
681     endif
682     let buf = buf + 1
683   endwhile
684   let s:bmenu_wait = 0
685   aug buffer_list
686   au!
687   au BufCreate,BufFilePost * call <SID>BMAdd()
688   au BufDelete,BufFilePre * call <SID>BMRemove()
689   aug END
690 endfunc
692 func! s:BMHash(name)
693   " Make name all upper case, so that chars are between 32 and 96
694   let nm = substitute(a:name, ".*", '\U\0', "")
695   if has("ebcdic")
696     " HACK: Replace all non alphabetics with 'Z'
697     "       Just to make it work for now.
698     let nm = substitute(nm, "[^A-Z]", 'Z', "g")
699     let sp = char2nr('A') - 1
700   else
701     let sp = char2nr(' ')
702   endif
703   " convert first six chars into a number for sorting:
704   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)
705 endfunc
707 func! s:BMHash2(name)
708   let nm = substitute(a:name, ".", '\L\0', "")
709   " Not exactly right for EBCDIC...
710   if nm[0] < 'a' || nm[0] > 'z'
711     return '&others.'
712   elseif nm[0] <= 'd'
713     return '&abcd.'
714   elseif nm[0] <= 'h'
715     return '&efgh.'
716   elseif nm[0] <= 'l'
717     return '&ijkl.'
718   elseif nm[0] <= 'p'
719     return '&mnop.'
720   elseif nm[0] <= 't'
721     return '&qrst.'
722   else
723     return '&u-z.'
724   endif
725 endfunc
727 " insert a buffer name into the buffer menu:
728 func! s:BMFilename(name, num)
729   if isdirectory(a:name)
730     return
731   endif
732   let munge = <SID>BMMunge(a:name, a:num)
733   let hash = <SID>BMHash(munge)
734   if s:bmenu_short == 0
735     let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
736   else
737     let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
738   endif
739   " set 'cpo' to include the <CR>
740   let cpo_save = &cpo
741   set cpo&vim
742   exe name . ' :confirm b' . a:num . '<CR>'
743   let &cpo = cpo_save
744 endfunc
746 " Truncate a long path to fit it in a menu item.
747 if !exists("g:bmenu_max_pathlen")
748   let g:bmenu_max_pathlen = 35
749 endif
750 func! s:BMTruncName(fname)
751   let name = a:fname
752   if g:bmenu_max_pathlen < 5
753     let name = ""
754   else
755     let len = strlen(name)
756     if len > g:bmenu_max_pathlen
757       let amountl = (g:bmenu_max_pathlen / 2) - 2
758       let amountr = g:bmenu_max_pathlen - amountl - 3
759       let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
760       let left = substitute(name, pattern, '\1', '')
761       let right = substitute(name, pattern, '\2', '')
762       if strlen(left) + strlen(right) < len
763         let name = left . '...' . right
764       endif
765     endif
766   endif
767   return name
768 endfunc
770 func! s:BMMunge(fname, bnum)
771   let name = a:fname
772   if name == ''
773     if !exists("g:menutrans_no_file")
774       let g:menutrans_no_file = "[No file]"
775     endif
776     let name = g:menutrans_no_file
777   else
778     let name = fnamemodify(name, ':p:~')
779   endif
780   " detach file name and separate it out:
781   let name2 = fnamemodify(name, ':t')
782   if a:bnum >= 0
783     let name2 = name2 . ' (' . a:bnum . ')'
784   endif
785   let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
786   let name = escape(name, "\\. \t|")
787   let name = substitute(name, "&", "&&", "g")
788   let name = substitute(name, "\n", "^@", "g")
789   return name
790 endfunc
792 " When just starting Vim, load the buffer menu later
793 if has("vim_starting")
794   augroup LoadBufferMenu
795     au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
796     au  VimEnter * au! LoadBufferMenu
797   augroup END
798 else
799   call <SID>BMShow()
800 endif
802 endif " !exists("no_buffers_menu")
804 " Window menu
805 an 70.300 &Window.&New<Tab>^Wn                  <C-W>n
806 an 70.310 &Window.S&plit<Tab>^Ws                <C-W>s
807 an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^        <C-W><C-^>
808 an 70.330 &Window.Split\ &Vertically<Tab>^Wv    <C-W>v
809 if has("vertsplit")
810   an <silent> 70.332 &Window.Split\ File\ E&xplorer     :call MenuExplOpen()<CR>
811   if !exists("*MenuExplOpen")
812     fun MenuExplOpen()
813       if @% == ""
814         20vsp .
815       else
816         exe "20vsp " . s:FnameEscape(expand("%:p:h"))
817       endif
818     endfun
819   endif
820 endif
821 an 70.335 &Window.-SEP1-                                <Nop>
822 an 70.340 &Window.&Close<Tab>^Wc                        :confirm close<CR>
823 an 70.345 &Window.Close\ &Other(s)<Tab>^Wo              :confirm only<CR>
824 an 70.350 &Window.-SEP2-                                <Nop>
825 an 70.355 &Window.Move\ &To.&Top<Tab>^WK                <C-W>K
826 an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ             <C-W>J
827 an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH         <C-W>H
828 an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL        <C-W>L
829 an 70.360 &Window.Rotate\ &Up<Tab>^WR                   <C-W>R
830 an 70.362 &Window.Rotate\ &Down<Tab>^Wr                 <C-W>r
831 an 70.365 &Window.-SEP3-                                <Nop>
832 an 70.370 &Window.&Equal\ Size<Tab>^W=                  <C-W>=
833 an 70.380 &Window.&Max\ Height<Tab>^W_                  <C-W>_
834 an 70.390 &Window.M&in\ Height<Tab>^W1_                 <C-W>1_
835 an 70.400 &Window.Max\ &Width<Tab>^W\|                  <C-W>\|
836 an 70.410 &Window.Min\ Widt&h<Tab>^W1\|                 <C-W>1\|
838 " The popup menu
839 an 1.10 PopUp.&Undo                     u
840 an 1.15 PopUp.-SEP1-                    <Nop>
841 vnoremenu 1.20 PopUp.Cu&t               "+x
842 vnoremenu 1.30 PopUp.&Copy              "+y
843 cnoremenu 1.30 PopUp.&Copy              <C-Y>
844 nnoremenu 1.40 PopUp.&Paste             "+gP
845 cnoremenu 1.40 PopUp.&Paste             <C-R>+
846 exe 'vnoremenu <script> 1.40 PopUp.&Paste       ' . paste#paste_cmd['v']
847 exe 'inoremenu <script> 1.40 PopUp.&Paste       ' . paste#paste_cmd['i']
848 vnoremenu 1.50 PopUp.&Delete            x
849 an 1.55 PopUp.-SEP2-                    <Nop>
850 vnoremenu 1.60 PopUp.Select\ Blockwise  <C-V>
852 nnoremenu 1.70 PopUp.Select\ &Word      vaw
853 onoremenu 1.70 PopUp.Select\ &Word      aw
854 vnoremenu 1.70 PopUp.Select\ &Word      <C-C>vaw
855 inoremenu 1.70 PopUp.Select\ &Word      <C-O>vaw
856 cnoremenu 1.70 PopUp.Select\ &Word      <C-C>vaw
858 nnoremenu 1.73 PopUp.Select\ &Sentence  vas
859 onoremenu 1.73 PopUp.Select\ &Sentence  as
860 vnoremenu 1.73 PopUp.Select\ &Sentence  <C-C>vas
861 inoremenu 1.73 PopUp.Select\ &Sentence  <C-O>vas
862 cnoremenu 1.73 PopUp.Select\ &Sentence  <C-C>vas
864 nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
865 onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
866 vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
867 inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
868 cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
870 nnoremenu 1.80 PopUp.Select\ &Line      V
871 onoremenu 1.80 PopUp.Select\ &Line      <C-C>V
872 vnoremenu 1.80 PopUp.Select\ &Line      <C-C>V
873 inoremenu 1.80 PopUp.Select\ &Line      <C-O>V
874 cnoremenu 1.80 PopUp.Select\ &Line      <C-C>V
876 nnoremenu 1.90 PopUp.Select\ &Block     <C-V>
877 onoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
878 vnoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
879 inoremenu 1.90 PopUp.Select\ &Block     <C-O><C-V>
880 cnoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
882 noremenu  <script> <silent> 1.100 PopUp.Select\ &All    :<C-U>call <SID>SelectAll()<CR>
883 inoremenu <script> <silent> 1.100 PopUp.Select\ &All    <C-O>:call <SID>SelectAll()<CR>
884 cnoremenu <script> <silent> 1.100 PopUp.Select\ &All    <C-U>call <SID>SelectAll()<CR>
886 if has("spell")
887   " Spell suggestions in the popup menu.  Note that this will slow down the
888   " appearance of the menu!
889   func! <SID>SpellPopup()
890     if exists("s:changeitem") && s:changeitem != ''
891       call <SID>SpellDel()
892     endif
894     " Return quickly if spell checking is not enabled.
895     if !&spell || &spelllang == ''
896       return
897     endif
899     let curcol = col('.')
900     let [w, a] = spellbadword()
901     if col('.') > curcol                " don't use word after the cursor
902       let w = ''
903       call cursor(0, curcol)    " put the cursor back where it was
904     endif
905     if w != ''
906       if a == 'caps'
907         let s:suglist = [substitute(w, '.*', '\u&', '')]
908       else
909         let s:suglist = spellsuggest(w, 10)
910       endif
911       if len(s:suglist) <= 0
912         call cursor(0, curcol)  " put the cursor back where it was
913       else
914         let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
915         let s:fromword = w
916         let pri = 1
917         for sug in s:suglist
918           exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
919                 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
920           let pri += 1
921         endfor
923         let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
924         exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
926         let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
927         exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
929         anoremenu 1.8 PopUp.-SpellSep- :
930       endif
931     endif
932   endfunc
934   func! <SID>SpellReplace(n)
935     let l = getline('.')
936     call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
937           \ . strpart(l, col('.') + len(s:fromword) - 1))
938   endfunc
940   func! <SID>SpellDel()
941     exe "aunmenu PopUp." . s:changeitem
942     exe "aunmenu PopUp." . s:additem
943     exe "aunmenu PopUp." . s:ignoreitem
944     aunmenu PopUp.-SpellSep-
945     let s:changeitem = ''
946   endfun
948   augroup SpellPopupMenu
949     au! MenuPopup * call <SID>SpellPopup()
950   augroup END
951 endif
953 " The GUI toolbar (for MS-Windows and GTK)
954 if has("toolbar")
955   an 1.10 ToolBar.Open                  :browse confirm e<CR>
956   an <silent> 1.20 ToolBar.Save         :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
957   an 1.30 ToolBar.SaveAll               :browse confirm wa<CR>
959   if has("printer")
960     an 1.40   ToolBar.Print             :hardcopy<CR>
961     vunmenu   ToolBar.Print
962     vnoremenu ToolBar.Print             :hardcopy<CR>
963   elseif has("unix")
964     an 1.40   ToolBar.Print             :w !lpr<CR>
965     vunmenu   ToolBar.Print
966     vnoremenu ToolBar.Print             :w !lpr<CR>
967   endif
969   an 1.45 ToolBar.-sep1-                <Nop>
970   an 1.50 ToolBar.Undo                  u
971   an 1.60 ToolBar.Redo                  <C-R>
973   an 1.65 ToolBar.-sep2-                <Nop>
974   vnoremenu 1.70 ToolBar.Cut            "+x
975   vnoremenu 1.80 ToolBar.Copy           "+y
976   cnoremenu 1.80 ToolBar.Copy           <C-Y>
977   nnoremenu 1.90 ToolBar.Paste          "+gP
978   cnoremenu      ToolBar.Paste          <C-R>+
979   exe 'vnoremenu <script>        ToolBar.Paste  ' . paste#paste_cmd['v']
980   exe 'inoremenu <script>        ToolBar.Paste  ' . paste#paste_cmd['i']
982   if !has("gui_athena")
983     an 1.95   ToolBar.-sep3-            <Nop>
984     an 1.100  ToolBar.Replace           :promptrepl<CR>
985     vunmenu   ToolBar.Replace
986     vnoremenu ToolBar.Replace           y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
987     an 1.110  ToolBar.FindNext          n
988     an 1.120  ToolBar.FindPrev          N
989   endif
991   an 1.215 ToolBar.-sep5-               <Nop>
992   an <silent> 1.220 ToolBar.LoadSesn    :call <SID>LoadVimSesn()<CR>
993   an <silent> 1.230 ToolBar.SaveSesn    :call <SID>SaveVimSesn()<CR>
994   an 1.240 ToolBar.RunScript            :browse so<CR>
996   an 1.245 ToolBar.-sep6-               <Nop>
997   an 1.250 ToolBar.Make                 :make<CR>
998   an 1.270 ToolBar.RunCtags             :exe "!" . g:ctags_command<CR>
999   an 1.280 ToolBar.TagJump              g<C-]>
1001   an 1.295 ToolBar.-sep7-               <Nop>
1002   an 1.300 ToolBar.Help                 :help<CR>
1003   an <silent> 1.310 ToolBar.FindHelp    :call <SID>Helpfind()<CR>
1005 " Only set the tooltips here if not done in a language menu file
1006 if exists("*Do_toolbar_tmenu")
1007   call Do_toolbar_tmenu()
1008 else
1009   let did_toolbar_tmenu = 1
1010   tmenu ToolBar.Open            Open file
1011   tmenu ToolBar.Save            Save current file
1012   tmenu ToolBar.SaveAll         Save all files
1013   tmenu ToolBar.Print           Print
1014   tmenu ToolBar.Undo            Undo
1015   tmenu ToolBar.Redo            Redo
1016   tmenu ToolBar.Cut             Cut to clipboard
1017   tmenu ToolBar.Copy            Copy to clipboard
1018   tmenu ToolBar.Paste           Paste from Clipboard
1019   if !has("gui_athena")
1020     tmenu ToolBar.Replace       Find / Replace...
1021     tmenu ToolBar.FindNext      Find Next
1022     tmenu ToolBar.FindPrev      Find Previous
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 :