Merge branch 'MacVim'
[MacVim/KaoriYa.git] / runtime / menu.vim
blobea67c7e8165b8e4bea930315277e4b87cd6a6bcf
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 Aug 29
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 " MacVim Window menu (should be next to Help so give it a high priority)
71 if has("gui_macvim")
72   an <silent> 9998.300 Window.Minimize              <Nop>
73   an <silent> 9998.301 Window.Minimize\ All         <Nop>
74   an <silent> 9998.310 Window.Zoom                  <Nop>
75   an <silent> 9998.311 Window.Zoom\ All             <Nop>
76   an <silent> 9998.320 Window.Toggle\ Full\ Screen\ Mode :set invfullscreen<CR>
77   an 9998.330 Window.-SEP1-                         <Nop>
78   " TODO! Grey out if no tabs are visible.
79   an <silent> 9998.340 Window.Select\ Next\ Tab     :tabnext<CR>
80   an <silent> 9998.350 Window.Select\ Previous\ Tab :tabprevious<CR>
81   an 9998.360 Window.-SEP2-                         <Nop>
82   an <silent> 9998.370 Window.Bring\ All\ To\ Front <Nop>
83 endif
85 " Help menu
86 if has("gui_macvim")
87   an 9999.1 &Help.MacVim\ Help              :h gui_mac<CR>
88   an <silent> 9999.2 Help.MacVim\ Website   <Nop>
89   an 9999.3 &Help.-sep0-                    <Nop>
90 endif
91 an 9999.10 &Help.&Overview<Tab><F1>     :help<CR>
92 an 9999.20 &Help.&User\ Manual          :help usr_toc<CR>
93 an 9999.30 &Help.&How-to\ links         :help how-to<CR>
94 an <silent> 9999.40 &Help.&Find\.\.\.   :call <SID>Helpfind()<CR>
95 an 9999.45 &Help.-sep1-                 <Nop>
96 an 9999.50 &Help.&Credits               :help credits<CR>
97 an 9999.60 &Help.Co&pying               :help copying<CR>
98 an 9999.70 &Help.&Sponsor/Register      :help sponsor<CR>
99 an 9999.70 &Help.O&rphans               :help kcc<CR>
100 an 9999.75 &Help.-sep2-                 <Nop>
101 an 9999.80 &Help.&Version               :version<CR>
102 an 9999.90 &Help.&About                 :intro<CR>
104 fun! s:Helpfind()
105   if !exists("g:menutrans_help_dialog")
106     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')"
107   endif
108   let h = inputdialog(g:menutrans_help_dialog)
109   if h != ""
110     let v:errmsg = ""
111     silent! exe "help " . h
112     if v:errmsg != ""
113       echo v:errmsg
114     endif
115   endif
116 endfun
118 " File menu
119 if has("gui_macvim")
120   an <silent> 10.290 &File.New\ Window              <Nop>
121   an  10.295 &File.New\ Tab                         :tabnew<CR>
122   an <silent> 10.310 &File.Open\.\.\.               <Nop>
123   an <silent> 10.325 &File.Open\ Recent             <Nop>
124   an 10.328 &File.-SEP0-                            <Nop>
125   an <silent> 10.330 &File.Close\ Window<Tab>:qa    :conf qa<CR>
126   an <silent> 10.332 &File.Close                    :conf q<CR>
127   an <silent> 10.341 &File.Save\ All                :browse conf wa<CR>
128   an 10.350 &File.Save\ As\.\.\.<Tab>:sav           :browse confirm saveas<CR>
129 else
130 endif
131 if !has("gui_macvim")
132   an 10.310 &File.&Open\.\.\.<Tab>:e            :browse confirm e<CR>
133 endif
134 an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp       :browse sp<CR>
135 an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew     :browse tabnew<CR>
136 if !has("gui_macvim")
137   an 10.325 &File.&New<Tab>:enew                :confirm enew<CR>
138   an <silent> 10.330 &File.&Close<Tab>:close
139         \ :if winheight(2) < 0 <Bar>
140         \   confirm enew <Bar>
141         \ else <Bar>
142         \   confirm close <Bar>
143         \ endif<CR>
144 endif
145 an 10.335 &File.-SEP1-                          <Nop>
146 an <silent> 10.340 &File.&Save<Tab>:w           :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
147 an 10.350 &File.Save\ &As\.\.\.<Tab>:sav        :browse confirm saveas<CR>
149 if has("diff")
150   an 10.400 &File.-SEP2-                        <Nop>
151   an 10.410 &File.Split\ &Diff\ with\.\.\.      :browse vert diffsplit<CR>
152   an 10.420 &File.Split\ Patched\ &By\.\.\.     :browse vert diffpatch<CR>
153 endif
155 if has("printer")
156   an 10.500 &File.-SEP3-                        <Nop>
157   an 10.510 &File.&Print                        :hardcopy<CR>
158   vunmenu   &File.&Print
159   vnoremenu &File.&Print                        :hardcopy<CR>
160 elseif has("unix")
161   an 10.500 &File.-SEP3-                        <Nop>
162   an 10.510 &File.&Print                        :w !lpr<CR>
163   vunmenu   &File.&Print
164   vnoremenu &File.&Print                        :w !lpr<CR>
165 endif
166 if !has("gui_macvim")
167   an 10.600 &File.-SEP4-                                <Nop>
168   an 10.610 &File.Sa&ve-Exit<Tab>:wqa           :confirm wqa<CR>
169   an 10.620 &File.E&xit<Tab>:qa                 :confirm qa<CR>
170 endif
172 func! <SID>SelectAll()
173   exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
174 endfunc
176 func! s:FnameEscape(fname)
177   if exists('*fnameescape')
178     return fnameescape(a:fname)
179   endif
180   return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
181 endfunc
183 " Edit menu
184 an 20.310 &Edit.&Undo<Tab>u                     u
185 an 20.320 &Edit.&Redo<Tab>^R                    <C-R>
186 an 20.330 &Edit.Rep&eat<Tab>\.                  .
188 an 20.335 &Edit.-SEP1-                          <Nop>
189 vnoremenu 20.340 &Edit.Cu&t<Tab>"+x             "+x
190 vnoremenu 20.350 &Edit.&Copy<Tab>"+y            "+y
191 cnoremenu 20.350 &Edit.&Copy<Tab>"+y            <C-Y>
192 nnoremenu 20.360 &Edit.&Paste<Tab>"+gP          "+gP
193 cnoremenu        &Edit.&Paste<Tab>"+gP          <C-R>+
194 exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP   ' . paste#paste_cmd['v']
195 exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP   ' . paste#paste_cmd['i']
196 nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p      [p
197 inoremenu        &Edit.Put\ &Before<Tab>[p      <C-O>[p
198 nnoremenu 20.380 &Edit.Put\ &After<Tab>]p       ]p
199 inoremenu        &Edit.Put\ &After<Tab>]p       <C-O>]p
200 if has("win32") || has("win16")
201   vnoremenu 20.390 &Edit.&Delete<Tab>x          x
202 endif
203 noremenu  <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG  :<C-U>call <SID>SelectAll()<CR>
204 inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG  <C-O>:call <SID>SelectAll()<CR>
205 cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG  <C-U>call <SID>SelectAll()<CR>
207 an 20.405        &Edit.-SEP2-                           <Nop>
208 if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
209   an 20.410      &Edit.&Find\.\.\.                      :promptfind<CR>
210   vunmenu        &Edit.&Find\.\.\.
211   vnoremenu <silent>     &Edit.&Find\.\.\.              y:promptfind <C-R>=<SID>FixFText()<CR><CR>
212   an 20.420      &Edit.Find\ and\ Rep&lace\.\.\.        :promptrepl<CR>
213   vunmenu        &Edit.Find\ and\ Rep&lace\.\.\.
214   vnoremenu <silent>     &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
215 elseif has("gui_macvim")
216   an <silent> 20.410.10 &Edit.Find.Find\.\.\.   :promptfind<CR>
217   vunmenu &Edit.Find.Find\.\.\.
218   vnoremenu <silent> &Edit.Find.Find\.\.\.      y:promptfind <C-R>=<SID>FixFText()<CR><CR>
219   an 20.410.20 &Edit.Find.Find\ Next                    <Nop>
220   an 20.410.30 &Edit.Find.Find\ Previous                <Nop>
221   vmenu 20.410.35 &Edit.Find.Use\ Selection\ for\ Find  y:let @/=@"<CR>:<BS>
222 else
223   an 20.410      &Edit.&Find<Tab>/                      /
224   an 20.420      &Edit.Find\ and\ Rep&lace<Tab>:%s      :%s/
225   vunmenu        &Edit.Find\ and\ Rep&lace<Tab>:%s
226   vnoremenu      &Edit.Find\ and\ Rep&lace<Tab>:s       :s/
227 endif
229 an 20.425        &Edit.-SEP3-                           <Nop>
230 an 20.430        &Edit.Settings\ &Window                :options<CR>
231 an 20.435        &Edit.Startup\ &Settings               :call <SID>EditVimrc()<CR>
233 fun! s:EditVimrc()
234   if $MYVIMRC != ''
235     let fname = $MYVIMRC
236   elseif has("win32") || has("dos32") || has("dos16") || has("os2")
237     if $HOME != ''
238       let fname = $HOME . "/_vimrc"
239     else
240       let fname = $VIM . "/_vimrc"
241     endif
242   elseif has("amiga")
243     let fname = "s:.vimrc"
244   else
245     let fname = $HOME . "/.vimrc"
246   endif
247   let fname = s:FnameEscape(fname)
248   if &mod
249     exe "split " . fname
250   else
251     exe "edit " . fname
252   endif
253 endfun
255 fun! s:FixFText()
256   " Fix text in nameless register to be used with :promptfind.
257   return substitute(@", "[\r\n]", '\\n', 'g')
258 endfun
260 " Edit/Global Settings
261 an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls!        :set hls! hls?<CR>
262 an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic!        :set ic! ic?<CR>
263 an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm!  :set sm! sm?<CR>
265 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\  :set so=1<CR>
266 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\  :set so=2<CR>
267 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\  :set so=3<CR>
268 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\  :set so=4<CR>
269 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\  :set so=5<CR>
270 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\  :set so=7<CR>
271 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\  :set so=10<CR>
272 an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\  :set so=100<CR>
274 an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
275 an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
276 an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
277 an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
278 an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
279 an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im!       :set im!<CR>
280 an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp!     :set cp!<CR>
281 an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\.  :call <SID>SearchP()<CR>
282 an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\.  :call <SID>TagFiles()<CR>
284 " GUI options
285 an 20.440.300 &Edit.&Global\ Settings.-SEP1-                            <Nop>
286 an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar         :call <SID>ToggleGuiOption("T")<CR>
287 an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
288 an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
289 an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
291 fun! s:SearchP()
292   if !exists("g:menutrans_path_dialog")
293     let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
294   endif
295   let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
296   if n != ""
297     let &path = substitute(n, ' ', '\\ ', 'g')
298   endif
299 endfun
301 fun! s:TagFiles()
302   if !exists("g:menutrans_tags_dialog")
303     let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
304   endif
305   let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
306   if n != ""
307     let &tags = substitute(n, ' ', '\\ ', 'g')
308   endif
309 endfun
311 fun! s:ToggleGuiOption(option)
312     " If a:option is already set in guioptions, then we want to remove it
313     if match(&guioptions, "\\C" . a:option) > -1
314         exec "set go-=" . a:option
315     else
316         exec "set go+=" . a:option
317     endif
318 endfun
320 " Edit/File Settings
322 " Boolean options
323 an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu!      :set nu! nu?<CR>
324 an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
325 an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
326 an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr!      :set lbr! lbr?<CR>
327 an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et!   :set et! et?<CR>
328 an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai!  :set ai! ai?<CR>
329 an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
331 " other options
332 an 20.440.600 &Edit.F&ile\ Settings.-SEP2-              <Nop>
333 an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2    :set sw=2 sw?<CR>
334 an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3    :set sw=3 sw?<CR>
335 an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4    :set sw=4 sw?<CR>
336 an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5    :set sw=5 sw?<CR>
337 an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6    :set sw=6 sw?<CR>
338 an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8    :set sw=8 sw?<CR>
340 an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
341 an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
342 an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
343 an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
344 an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
345 an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
347 an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\.  :call <SID>TextWidth()<CR>
348 an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\.  :call <SID>FileFormat()<CR>
349 fun! s:TextWidth()
350   if !exists("g:menutrans_textwidth_dialog")
351     let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
352   endif
353   let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
354   if n != ""
355     " remove leading zeros to avoid it being used as an octal number
356     let &tw = substitute(n, "^0*", "", "")
357   endif
358 endfun
360 fun! s:FileFormat()
361   if !exists("g:menutrans_fileformat_dialog")
362     let g:menutrans_fileformat_dialog = "Select format for writing the file"
363   endif
364   if !exists("g:menutrans_fileformat_choices")
365     let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
366   endif
367   if &ff == "dos"
368     let def = 2
369   elseif &ff == "mac"
370     let def = 3
371   else
372     let def = 1
373   endif
374   let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
375   if n == 1
376     set ff=unix
377   elseif n == 2
378     set ff=dos
379   elseif n == 3
380     set ff=mac
381   endif
382 endfun
384 " Setup the Edit.Color Scheme submenu
385 let s:n = globpath(&runtimepath, "colors/*.vim")
386 let s:idx = 100
387 while strlen(s:n) > 0
388   let s:i = stridx(s:n, "\n")
389   if s:i < 0
390     let s:name = s:n
391     let s:n = ""
392   else
393     let s:name = strpart(s:n, 0, s:i)
394     let s:n = strpart(s:n, s:i + 1, 19999)
395   endif
396   " Ignore case for VMS and windows
397   let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
398   exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
399   unlet s:name
400   unlet s:i
401   let s:idx = s:idx + 10
402 endwhile
403 unlet s:n
404 unlet s:idx
406 " Setup the Edit.Keymap submenu
407 if has("keymap")
408   let s:n = globpath(&runtimepath, "keymap/*.vim")
409   if s:n != ""
410     let s:idx = 100
411     an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
412     while strlen(s:n) > 0
413       let s:i = stridx(s:n, "\n")
414       if s:i < 0
415         let s:name = s:n
416         let s:n = ""
417       else
418         let s:name = strpart(s:n, 0, s:i)
419         let s:n = strpart(s:n, s:i + 1, 19999)
420       endif
421       " Ignore case for VMS and windows
422       let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
423       exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
424       unlet s:name
425       unlet s:i
426       let s:idx = s:idx + 10
427     endwhile
428     unlet s:idx
429   endif
430   unlet s:n
431 endif
432 if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
433   an 20.470 &Edit.Select\ Fo&nt\.\.\.   :set guifont=*<CR>
434 elseif has("gui_macvim")
435   an 20.470 &Edit.-SEP4-                       <Nop>
436   an 20.475.10 &Edit.Font.Show\ Fonts          <Nop>
437   an 20.475.20 &Edit.Font.-SEP5-               <Nop>
438   an 20.475.30 &Edit.Font.Bigger               <Nop>
439   an 20.475.40 &Edit.Font.Smaller              <Nop>
440   an 20.480 &Edit.Special\ Characters\.\.\.    <Nop>
441 endif
443 " Programming menu
444 if !exists("g:ctags_command")
445   if has("vms")
446     let g:ctags_command = "mc vim:ctags *.*"
447   else
448     let g:ctags_command = "ctags -R ."
449   endif
450 endif
452 an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^]   g<C-]>
453 vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
454 vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^]   g<C-]>
455 an 40.310 &Tools.Jump\ &back<Tab>^T             <C-T>
456 an 40.320 &Tools.Build\ &Tags\ File             :exe "!" . g:ctags_command<CR>
458 if has("folding") || has("spell")
459   an 40.330 &Tools.-SEP1-                                               <Nop>
460 endif
462 " Tools.Spelling Menu
463 if has("spell")
464   an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On              :set spell<CR>
465   an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off             :set nospell<CR>
466   an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s        ]s
467   an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s    [s
468   an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z=   z=
469   an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall   :spellrepall<CR>
470   an 40.335.200 &Tools.&Spelling.-SEP1-                         <Nop>
471   an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en"        :set spl=en spell<CR>
472   an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au"     :set spl=en_au spell<CR>
473   an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca"     :set spl=en_ca spell<CR>
474   an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb"     :set spl=en_gb spell<CR>
475   an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz"     :set spl=en_nz spell<CR>
476   an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us"     :set spl=en_us spell<CR>
477   an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages        :call <SID>SpellLang()<CR>
479   let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
480   func! s:SpellLang()
481     for cmd in s:undo_spellang
482       exe "silent! " . cmd
483     endfor
484     let s:undo_spellang = []
486     if &enc == "iso-8859-15"
487       let enc = "latin1"
488     else
489       let enc = &enc
490     endif
492     let found = 0
493     let s = globpath(&rtp, "spell/*." . enc . ".spl")
494     if s != ""
495       let n = 300
496       for f in split(s, "\n")
497         let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
498         if nm != "en" && nm !~ '/'
499           let found += 1
500           let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
501           exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
502           let s:undo_spellang += ['aun ' . menuname]
503         endif
504         let n += 10
505       endfor
506     endif
507     if found == 0
508       echomsg "Could not find other spell files"
509     elseif found == 1
510       echomsg "Found spell file " . nm
511     else
512       echomsg "Found " . found . " more spell files"
513     endif
514     " Need to redo this when 'encoding' is changed.
515     augroup spellmenu
516     au! EncodingChanged * call <SID>SpellLang()
517     augroup END
518   endfun
520 endif
522 " Tools.Fold Menu
523 if has("folding")
524   " open close folds
525   an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi           zi
526   an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv              zv
527   an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx      zMzx
528   an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm              zm
529   an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM               zM
530   an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr               zr
531   an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR                zR
532   " fold method
533   an 40.340.200 &Tools.&Folding.-SEP1-                  <Nop>
534   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual   :set fdm=manual<CR>
535   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent   :set fdm=indent<CR>
536   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
537   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax   :set fdm=syntax<CR>
538   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff     :set fdm=diff<CR>
539   an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker   :set fdm=marker<CR>
540   " create and delete folds
541   vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf     zf
542   an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd            zd
543   an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD      zD
544   " moving around in folds
545   an 40.340.300 &Tools.&Folding.-SEP2-                          <Nop>
546   an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\   :set fdc=0<CR>
547   an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\   :set fdc=2<CR>
548   an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\   :set fdc=3<CR>
549   an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\   :set fdc=4<CR>
550   an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\   :set fdc=5<CR>
551   an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\   :set fdc=6<CR>
552   an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\   :set fdc=7<CR>
553   an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\   :set fdc=8<CR>
554 endif  " has folding
556 if has("diff")
557   an 40.350.100 &Tools.&Diff.&Update            :diffupdate<CR>
558   an 40.350.110 &Tools.&Diff.&Get\ Block        :diffget<CR>
559   vunmenu &Tools.&Diff.&Get\ Block
560   vnoremenu &Tools.&Diff.&Get\ Block            :diffget<CR>
561   an 40.350.120 &Tools.&Diff.&Put\ Block        :diffput<CR>
562   vunmenu &Tools.&Diff.&Put\ Block
563   vnoremenu &Tools.&Diff.&Put\ Block            :diffput<CR>
564 endif
566 an 40.358 &Tools.-SEP2-                                 <Nop>
567 an 40.360 &Tools.&Make<Tab>:make                        :make<CR>
568 an 40.370 &Tools.&List\ Errors<Tab>:cl                  :cl<CR>
569 an 40.380 &Tools.L&ist\ Messages<Tab>:cl!               :cl!<CR>
570 an 40.390 &Tools.&Next\ Error<Tab>:cn                   :cn<CR>
571 an 40.400 &Tools.&Previous\ Error<Tab>:cp               :cp<CR>
572 an 40.410 &Tools.&Older\ List<Tab>:cold                 :colder<CR>
573 an 40.420 &Tools.N&ewer\ List<Tab>:cnew                 :cnewer<CR>
574 an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin    :cwin<CR>
575 an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen     :copen<CR>
576 an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose   :cclose<CR>
578 an 40.520 &Tools.-SEP3-                                 <Nop>
579 an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
580         \ :call <SID>XxdConv()<CR>
581 an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
582         \ :call <SID>XxdBack()<CR>
584 " Use a function to do the conversion, so that it also works with 'insertmode'
585 " set.
586 func! s:XxdConv()
587   let mod = &mod
588   if has("vms")
589     %!mc vim:xxd
590   else
591     call s:XxdFind()
592     exe '%!"' . g:xxdprogram . '"'
593   endif
594   if getline(1) =~ "^0000000:"          " only if it worked
595     set ft=xxd
596   endif
597   let &mod = mod
598 endfun
600 func! s:XxdBack()
601   let mod = &mod
602   if has("vms")
603     %!mc vim:xxd -r
604   else
605     call s:XxdFind()
606     exe '%!"' . g:xxdprogram . '" -r'
607   endif
608   set ft=
609   doautocmd filetypedetect BufReadPost
610   let &mod = mod
611 endfun
613 func! s:XxdFind()
614   if !exists("g:xxdprogram")
615     " On the PC xxd may not be in the path but in the install directory
616     if (has("win32") || has("dos32")) && !executable("xxd")
617       let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
618     else
619       let g:xxdprogram = "xxd"
620     endif
621   endif
622 endfun
624 " Setup the Tools.Compiler submenu
625 let s:n = globpath(&runtimepath, "compiler/*.vim")
626 let s:idx = 100
627 while strlen(s:n) > 0
628   let s:i = stridx(s:n, "\n")
629   if s:i < 0
630     let s:name = s:n
631     let s:n = ""
632   else
633     let s:name = strpart(s:n, 0, s:i)
634     let s:n = strpart(s:n, s:i + 1, 19999)
635   endif
636   " Ignore case for VMS and windows
637   let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
638   exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
639   unlet s:name
640   unlet s:i
641   let s:idx = s:idx + 10
642 endwhile
643 unlet s:n
644 unlet s:idx
646 if !exists("no_buffers_menu")
648 " Buffer list menu -- Setup functions & actions
650 " wait with building the menu until after loading 'session' files. Makes
651 " startup faster.
652 let s:bmenu_wait = 1
654 if !exists("bmenu_priority")
655   let bmenu_priority = 60
656 endif
658 func! s:BMAdd()
659   if s:bmenu_wait == 0
660     " when adding too many buffers, redraw in short format
661     if s:bmenu_count == &menuitems && s:bmenu_short == 0
662       call s:BMShow()
663     else
664       call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
665       let s:bmenu_count = s:bmenu_count + 1
666     endif
667   endif
668 endfunc
670 func! s:BMRemove()
671   if s:bmenu_wait == 0
672     let name = expand("<afile>")
673     if isdirectory(name)
674       return
675     endif
676     let munge = <SID>BMMunge(name, expand("<abuf>"))
678     if s:bmenu_short == 0
679       exe 'silent! aun &Buffers.' . munge
680     else
681       exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
682     endif
683     let s:bmenu_count = s:bmenu_count - 1
684   endif
685 endfunc
687 " Create the buffer menu (delete an existing one first).
688 func! s:BMShow(...)
689   let s:bmenu_wait = 1
690   let s:bmenu_short = 1
691   let s:bmenu_count = 0
692   "
693   " get new priority, if exists
694   if a:0 == 1
695     let g:bmenu_priority = a:1
696   endif
698   " remove old menu, if exists; keep one entry to avoid a torn off menu to
699   " disappear.
700   silent! unmenu &Buffers
701   exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
702   silent! unmenu! &Buffers
704   " create new menu; set 'cpo' to include the <CR>
705   let cpo_save = &cpo
706   set cpo&vim
707   exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
708   exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
709   exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
710   exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
711   exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
712   exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
713   let &cpo = cpo_save
714   unmenu &Buffers.Dummy
716   " figure out how many buffers there are
717   let buf = 1
718   while buf <= bufnr('$')
719     if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
720       let s:bmenu_count = s:bmenu_count + 1
721     endif
722     let buf = buf + 1
723   endwhile
724   if s:bmenu_count <= &menuitems
725     let s:bmenu_short = 0
726   endif
728   " iterate through buffer list, adding each buffer to the menu:
729   let buf = 1
730   while buf <= bufnr('$')
731     if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
732       call <SID>BMFilename(bufname(buf), buf)
733     endif
734     let buf = buf + 1
735   endwhile
736   let s:bmenu_wait = 0
737   aug buffer_list
738   au!
739   au BufCreate,BufFilePost * call <SID>BMAdd()
740   au BufDelete,BufFilePre * call <SID>BMRemove()
741   aug END
742 endfunc
744 func! s:BMHash(name)
745   " Make name all upper case, so that chars are between 32 and 96
746   let nm = substitute(a:name, ".*", '\U\0', "")
747   if has("ebcdic")
748     " HACK: Replace all non alphabetics with 'Z'
749     "       Just to make it work for now.
750     let nm = substitute(nm, "[^A-Z]", 'Z', "g")
751     let sp = char2nr('A') - 1
752   else
753     let sp = char2nr(' ')
754   endif
755   " convert first six chars into a number for sorting:
756   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)
757 endfunc
759 func! s:BMHash2(name)
760   let nm = substitute(a:name, ".", '\L\0', "")
761   " Not exactly right for EBCDIC...
762   if nm[0] < 'a' || nm[0] > 'z'
763     return '&others.'
764   elseif nm[0] <= 'd'
765     return '&abcd.'
766   elseif nm[0] <= 'h'
767     return '&efgh.'
768   elseif nm[0] <= 'l'
769     return '&ijkl.'
770   elseif nm[0] <= 'p'
771     return '&mnop.'
772   elseif nm[0] <= 't'
773     return '&qrst.'
774   else
775     return '&u-z.'
776   endif
777 endfunc
779 " insert a buffer name into the buffer menu:
780 func! s:BMFilename(name, num)
781   if isdirectory(a:name)
782     return
783   endif
784   let munge = <SID>BMMunge(a:name, a:num)
785   let hash = <SID>BMHash(munge)
786   if s:bmenu_short == 0
787     let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
788   else
789     let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
790   endif
791   " set 'cpo' to include the <CR>
792   let cpo_save = &cpo
793   set cpo&vim
794   exe name . ' :confirm b' . a:num . '<CR>'
795   let &cpo = cpo_save
796 endfunc
798 " Truncate a long path to fit it in a menu item.
799 if !exists("g:bmenu_max_pathlen")
800   let g:bmenu_max_pathlen = 35
801 endif
802 func! s:BMTruncName(fname)
803   let name = a:fname
804   if g:bmenu_max_pathlen < 5
805     let name = ""
806   else
807     let len = strlen(name)
808     if len > g:bmenu_max_pathlen
809       let amountl = (g:bmenu_max_pathlen / 2) - 2
810       let amountr = g:bmenu_max_pathlen - amountl - 3
811       let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
812       let left = substitute(name, pattern, '\1', '')
813       let right = substitute(name, pattern, '\2', '')
814       if strlen(left) + strlen(right) < len
815         let name = left . '...' . right
816       endif
817     endif
818   endif
819   return name
820 endfunc
822 func! s:BMMunge(fname, bnum)
823   let name = a:fname
824   if name == ''
825     if !exists("g:menutrans_no_file")
826       let g:menutrans_no_file = "[No file]"
827     endif
828     let name = g:menutrans_no_file
829   else
830     let name = fnamemodify(name, ':p:~')
831   endif
832   " detach file name and separate it out:
833   let name2 = fnamemodify(name, ':t')
834   if a:bnum >= 0
835     let name2 = name2 . ' (' . a:bnum . ')'
836   endif
837   let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
838   let name = escape(name, "\\. \t|")
839   let name = substitute(name, "&", "&&", "g")
840   let name = substitute(name, "\n", "^@", "g")
841   return name
842 endfunc
844 " When just starting Vim, load the buffer menu later.  Don't do this for MacVim
845 " because it makes the menu flicker each time a new editor window is opened.
846 if has("vim_starting") && !has("gui_macvim")
847   augroup LoadBufferMenu
848     au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
849     au  VimEnter * au! LoadBufferMenu
850   augroup END
851 else
852   call <SID>BMShow()
853 endif
855 endif " !exists("no_buffers_menu")
857 " Window menu
858 if !has("gui_macvim")
859 an 70.300 &Window.&New<Tab>^Wn                  <C-W>n
860 an 70.310 &Window.S&plit<Tab>^Ws                <C-W>s
861 an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^        <C-W><C-^>
862 an 70.330 &Window.Split\ &Vertically<Tab>^Wv    <C-W>v
863 if has("vertsplit")
864   an <silent> 70.332 &Window.Split\ File\ E&xplorer     :call MenuExplOpen()<CR>
865   if !exists("*MenuExplOpen")
866     fun MenuExplOpen()
867       if @% == ""
868         20vsp .
869       else
870         exe "20vsp " . s:FnameEscape(expand("%:p:h"))
871       endif
872     endfun
873   endif
874 endif
875 an 70.335 &Window.-SEP1-                                <Nop>
876 an 70.340 &Window.&Close<Tab>^Wc                        :confirm close<CR>
877 an 70.345 &Window.Close\ &Other(s)<Tab>^Wo              :confirm only<CR>
878 an 70.350 &Window.-SEP2-                                <Nop>
879 an 70.355 &Window.Move\ &To.&Top<Tab>^WK                <C-W>K
880 an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ             <C-W>J
881 an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH         <C-W>H
882 an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL        <C-W>L
883 an 70.360 &Window.Rotate\ &Up<Tab>^WR                   <C-W>R
884 an 70.362 &Window.Rotate\ &Down<Tab>^Wr                 <C-W>r
885 an 70.365 &Window.-SEP3-                                <Nop>
886 an 70.370 &Window.&Equal\ Size<Tab>^W=                  <C-W>=
887 an 70.380 &Window.&Max\ Height<Tab>^W_                  <C-W>_
888 an 70.390 &Window.M&in\ Height<Tab>^W1_                 <C-W>1_
889 an 70.400 &Window.Max\ &Width<Tab>^W\|                  <C-W>\|
890 an 70.410 &Window.Min\ Widt&h<Tab>^W1\|                 <C-W>1\|
891 endif " !has("gui_macvim")
893 " The popup menu
894 an 1.10 PopUp.&Undo                     u
895 an 1.15 PopUp.-SEP1-                    <Nop>
896 vnoremenu 1.20 PopUp.Cu&t               "+x
897 vnoremenu 1.30 PopUp.&Copy              "+y
898 cnoremenu 1.30 PopUp.&Copy              <C-Y>
899 nnoremenu 1.40 PopUp.&Paste             "+gP
900 cnoremenu 1.40 PopUp.&Paste             <C-R>+
901 exe 'vnoremenu <script> 1.40 PopUp.&Paste       ' . paste#paste_cmd['v']
902 exe 'inoremenu <script> 1.40 PopUp.&Paste       ' . paste#paste_cmd['i']
903 vnoremenu 1.50 PopUp.&Delete            x
904 an 1.55 PopUp.-SEP2-                    <Nop>
905 vnoremenu 1.60 PopUp.Select\ Blockwise  <C-V>
907 nnoremenu 1.70 PopUp.Select\ &Word      vaw
908 onoremenu 1.70 PopUp.Select\ &Word      aw
909 vnoremenu 1.70 PopUp.Select\ &Word      <C-C>vaw
910 inoremenu 1.70 PopUp.Select\ &Word      <C-O>vaw
911 cnoremenu 1.70 PopUp.Select\ &Word      <C-C>vaw
913 nnoremenu 1.73 PopUp.Select\ &Sentence  vas
914 onoremenu 1.73 PopUp.Select\ &Sentence  as
915 vnoremenu 1.73 PopUp.Select\ &Sentence  <C-C>vas
916 inoremenu 1.73 PopUp.Select\ &Sentence  <C-O>vas
917 cnoremenu 1.73 PopUp.Select\ &Sentence  <C-C>vas
919 nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
920 onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
921 vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
922 inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
923 cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
925 nnoremenu 1.80 PopUp.Select\ &Line      V
926 onoremenu 1.80 PopUp.Select\ &Line      <C-C>V
927 vnoremenu 1.80 PopUp.Select\ &Line      <C-C>V
928 inoremenu 1.80 PopUp.Select\ &Line      <C-O>V
929 cnoremenu 1.80 PopUp.Select\ &Line      <C-C>V
931 nnoremenu 1.90 PopUp.Select\ &Block     <C-V>
932 onoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
933 vnoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
934 inoremenu 1.90 PopUp.Select\ &Block     <C-O><C-V>
935 cnoremenu 1.90 PopUp.Select\ &Block     <C-C><C-V>
937 noremenu  <script> <silent> 1.100 PopUp.Select\ &All    :<C-U>call <SID>SelectAll()<CR>
938 inoremenu <script> <silent> 1.100 PopUp.Select\ &All    <C-O>:call <SID>SelectAll()<CR>
939 cnoremenu <script> <silent> 1.100 PopUp.Select\ &All    <C-U>call <SID>SelectAll()<CR>
941 if has("spell")
942   " Spell suggestions in the popup menu.  Note that this will slow down the
943   " appearance of the menu!
944   func! <SID>SpellPopup()
945     if exists("s:changeitem") && s:changeitem != ''
946       call <SID>SpellDel()
947     endif
949     " Return quickly if spell checking is not enabled.
950     if !&spell || &spelllang == ''
951       return
952     endif
954     let curcol = col('.')
955     let [w, a] = spellbadword()
956     if col('.') > curcol                " don't use word after the cursor
957       let w = ''
958       call cursor(0, curcol)    " put the cursor back where it was
959     endif
960     if w != ''
961       if a == 'caps'
962         let s:suglist = [substitute(w, '.*', '\u&', '')]
963       else
964         let s:suglist = spellsuggest(w, 10)
965       endif
966       if len(s:suglist) <= 0
967         call cursor(0, curcol)  " put the cursor back where it was
968       else
969         let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
970         let s:fromword = w
971         let pri = 1
972         for sug in s:suglist
973           exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
974                 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
975           let pri += 1
976         endfor
978         let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
979         exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
981         let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
982         exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
984         anoremenu 1.8 PopUp.-SpellSep- :
985       endif
986     endif
987   endfunc
989   func! <SID>SpellReplace(n)
990     let l = getline('.')
991     call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
992           \ . strpart(l, col('.') + len(s:fromword) - 1))
993   endfunc
995   func! <SID>SpellDel()
996     exe "aunmenu PopUp." . s:changeitem
997     exe "aunmenu PopUp." . s:additem
998     exe "aunmenu PopUp." . s:ignoreitem
999     aunmenu PopUp.-SpellSep-
1000     let s:changeitem = ''
1001   endfun
1003   augroup SpellPopupMenu
1004     au! MenuPopup * call <SID>SpellPopup()
1005   augroup END
1006 endif
1008 " The GUI toolbar (for MS-Windows and GTK)
1009 if has("toolbar")
1010   an 1.10 ToolBar.Open                  :browse confirm e<CR>
1011   an <silent> 1.20 ToolBar.Save         :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
1012   an 1.30 ToolBar.SaveAll               :browse confirm wa<CR>
1014   if has("printer")
1015     an 1.40   ToolBar.Print             :hardcopy<CR>
1016     vunmenu   ToolBar.Print
1017     vnoremenu ToolBar.Print             :hardcopy<CR>
1018   elseif has("unix")
1019     an 1.40   ToolBar.Print             :w !lpr<CR>
1020     vunmenu   ToolBar.Print
1021     vnoremenu ToolBar.Print             :w !lpr<CR>
1022   endif
1024   an 1.45 ToolBar.-sep1-                <Nop>
1025   an 1.50 ToolBar.Undo                  u
1026   an 1.60 ToolBar.Redo                  <C-R>
1028   an 1.65 ToolBar.-sep2-                <Nop>
1029   vnoremenu 1.70 ToolBar.Cut            "+x
1030   vnoremenu 1.80 ToolBar.Copy           "+y
1031   cnoremenu 1.80 ToolBar.Copy           <C-Y>
1032   nnoremenu 1.90 ToolBar.Paste          "+gP
1033   cnoremenu      ToolBar.Paste          <C-R>+
1034   exe 'vnoremenu <script>        ToolBar.Paste  ' . paste#paste_cmd['v']
1035   exe 'inoremenu <script>        ToolBar.Paste  ' . paste#paste_cmd['i']
1037   if !has("gui_athena") && !has("gui_macvim")
1038     an 1.95   ToolBar.-sep3-            <Nop>
1039     an 1.100  ToolBar.Replace           :promptrepl<CR>
1040     vunmenu   ToolBar.Replace
1041     vnoremenu ToolBar.Replace           y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
1042     an 1.110  ToolBar.FindNext          n
1043     an 1.120  ToolBar.FindPrev          N
1044   endif
1046   if !has("gui_macvim")
1047     an 1.215 ToolBar.-sep5-             <Nop>
1048   endif
1049   an <silent> 1.220 ToolBar.LoadSesn    :call <SID>LoadVimSesn()<CR>
1050   an <silent> 1.230 ToolBar.SaveSesn    :call <SID>SaveVimSesn()<CR>
1051   an 1.240 ToolBar.RunScript            :browse so<CR>
1053   if !has("gui_macvim")
1054     an 1.245 ToolBar.-sep6-             <Nop>
1055   endif
1056   an 1.250 ToolBar.Make                 :make<CR>
1057   if !has("gui_macvim")
1058     an 1.270 ToolBar.RunCtags           :exe "!" . g:ctags_command<CR>
1059     an 1.280 ToolBar.TagJump            g<C-]>
1060   endif
1062   an 1.295 ToolBar.-sep7-               <Nop>
1063   an 1.300 ToolBar.Help                 :help<CR>
1064   if !has("gui_macvim")
1065     an <silent> 1.310 ToolBar.FindHelp  :call <SID>Helpfind()<CR>
1066   endif
1068 " Only set the tooltips here if not done in a language menu file
1069 if exists("*Do_toolbar_tmenu")
1070   call Do_toolbar_tmenu()
1071 else
1072   let did_toolbar_tmenu = 1
1073   tmenu ToolBar.Open            Open file
1074   tmenu ToolBar.Save            Save current file
1075   tmenu ToolBar.SaveAll         Save all files
1076   tmenu ToolBar.Print           Print
1077   tmenu ToolBar.Undo            Undo
1078   tmenu ToolBar.Redo            Redo
1079   tmenu ToolBar.Cut             Cut to clipboard
1080   tmenu ToolBar.Copy            Copy to clipboard
1081   tmenu ToolBar.Paste           Paste from Clipboard
1082   if !has("gui_athena")
1083     tmenu ToolBar.Replace       Find / Replace...
1084     tmenu ToolBar.FindNext      Find Next
1085     tmenu ToolBar.FindPrev      Find Previous
1086   endif
1087   tmenu ToolBar.LoadSesn        Choose a session to load
1088   tmenu ToolBar.SaveSesn        Save current session
1089   tmenu ToolBar.RunScript       Choose a Vim Script to run
1090   tmenu ToolBar.Make            Make current project (:make)
1091   tmenu ToolBar.RunCtags        Build tags in current directory tree (!ctags -R .)
1092   tmenu ToolBar.TagJump         Jump to tag under cursor
1093   tmenu ToolBar.Help            Vim Help
1094   tmenu ToolBar.FindHelp        Search Vim Help
1095 endif
1097 " Select a session to load; default to current session name if present
1098 fun! s:LoadVimSesn()
1099   if strlen(v:this_session) > 0
1100     let name = s:FnameEscape(v:this_session)
1101   else
1102     let name = "Session.vim"
1103   endif
1104   execute "browse so " . name
1105 endfun
1107 " Select a session to save; default to current session name if present
1108 fun! s:SaveVimSesn()
1109   if strlen(v:this_session) == 0
1110     let v:this_session = "Session.vim"
1111   endif
1112   execute "browse mksession! " . s:FnameEscape(v:this_session)
1113 endfun
1115 endif
1117 endif " !exists("did_install_default_menus")
1119 " Define these items always, so that syntax can be switched on when it wasn't.
1120 " But skip them when the Syntax menu was disabled by the user.
1121 if !exists("did_install_syntax_menu")
1122   an 50.212 &Syntax.&Manual             :syn manual<CR>
1123   an 50.214 &Syntax.A&utomatic          :syn on<CR>
1124   an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1125   if !exists("*s:SynOnOff")
1126     fun s:SynOnOff()
1127       if has("syntax_items")
1128         syn clear
1129       else
1130         if !exists("g:syntax_on")
1131           syn manual
1132         endif
1133         set syn=ON
1134       endif
1135     endfun
1136   endif
1137 endif
1140 " Install the Syntax menu only when filetype.vim has been loaded or when
1141 " manual syntax highlighting is enabled.
1142 " Avoid installing the Syntax menu twice.
1143 if (exists("did_load_filetypes") || exists("syntax_on"))
1144         \ && !exists("did_install_syntax_menu")
1145   let did_install_syntax_menu = 1
1147 " Skip setting up the individual syntax selection menus unless
1148 " do_syntax_sel_menu is defined (it takes quite a bit of time).
1149 if exists("do_syntax_sel_menu")
1150   runtime! synmenu.vim
1151 else
1152   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>
1153   an 50.195 &Syntax.-SEP1-              <Nop>
1154 endif
1156 an 50.210 &Syntax.&Off                  :syn off<CR>
1157 an 50.700 &Syntax.-SEP3-                <Nop>
1158 an 50.710 &Syntax.Co&lor\ test          :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1159 an 50.720 &Syntax.&Highlight\ test      :runtime syntax/hitest.vim<CR>
1160 an 50.730 &Syntax.&Convert\ to\ HTML    :runtime syntax/2html.vim<CR>
1162 endif " !exists("did_install_syntax_menu")
1164 " Restore the previous value of 'cpoptions'.
1165 let &cpo = s:cpo_save
1166 unlet s:cpo_save
1169 if has("gui_macvim")
1170   "
1171   " Set up menu key equivalents (these should always have the 'D' modifier
1172   " set), action bindings, and alternate items.
1173   "
1174   " Note: menu items which should execute an action are bound to <Nop>; the
1175   " action message is specified here via the :macmenu command.
1176   "
1177   macm File.New\ Window                         key=<D-n> action=newWindow:
1178   macm File.New\ Tab                            key=<D-t>
1179   macm File.Open\.\.\.                          key=<D-o> action=fileOpen:
1180   macm File.Open\ Tab\.\.\.<Tab>:tabnew         key=<D-T>
1181   macm File.Open\ Recent                        action=recentFilesDummy:
1182   macm File.Close\ Window<Tab>:qa               key=<D-W>
1183   macm File.Close                               key=<D-w> action=performClose:
1184   macm File.Save<Tab>:w                         key=<D-s>
1185   macm File.Save\ All                           key=<D-M-s> alt=YES
1186   macm File.Save\ As\.\.\.<Tab>:sav             key=<D-S>
1187   macm File.Print                               key=<D-p>
1189   macm Edit.Undo<Tab>u                          key=<D-z> action=undo:
1190   macm Edit.Redo<Tab>^R                         key=<D-Z> action=redo:
1191   macm Edit.Cut<Tab>"+x                         key=<D-x> action=cut:
1192   macm Edit.Copy<Tab>"+y                        key=<D-c> action=copy:
1193   macm Edit.Paste<Tab>"+gP                      key=<D-v> action=paste:
1194   macm Edit.Select\ All<Tab>ggVG                key=<D-a> action=selectAll:
1195   macm Edit.Find.Find\.\.\.                     key=<D-f>
1196   macm Edit.Find.Find\ Next                     key=<D-g> action=findNext:
1197   macm Edit.Find.Find\ Previous                 key=<D-G> action=findPrevious:
1198   macm Edit.Find.Use\ Selection\ for\ Find      key=<D-e>
1199   macm Edit.Font.Show\ Fonts                    action=orderFrontFontPanel:
1200   macm Edit.Font.Bigger                         key=<D-=> action=fontSizeUp:
1201   macm Edit.Font.Smaller                        key=<D--> action=fontSizeDown:
1202   macm Edit.Special\ Characters\.\.\.           key=<D-M-t> action=orderFrontCharacterPalette:
1204   macm Tools.Spelling.To\ Next\ error<Tab>]s    key=<D-;>
1205   macm Tools.Spelling.Suggest\ Corrections<Tab>z=   key=<D-:>
1206   macm Tools.Make<Tab>:make                     key=<D-b>
1207   macm Tools.List\ Errors<Tab>:cl               key=<D-l>
1208   macm Tools.Next\ Error<Tab>:cn                key=<D-C-Right>
1209   macm Tools.Previous\ Error<Tab>:cp            key=<D-C-Left>
1210   macm Tools.Older\ List<Tab>:cold              key=<D-C-Up>
1211   macm Tools.Newer\ List<Tab>:cnew              key=<D-C-Down>
1213   macm Window.Minimize          key=<D-m>       action=performMiniaturize:
1214   macm Window.Minimize\ All     key=<D-M-m>     action=miniaturizeAll:  alt=YES
1215   macm Window.Zoom              key=<D-C-z>     action=performZoom:
1216   macm Window.Zoom\ All         key=<D-M-C-z>   action=zoomAll:         alt=YES
1217   macm Window.Toggle\ Full\ Screen\ Mode        key=<D-F>
1218   macm Window.Select\ Next\ Tab                 key=<D-}>
1219   macm Window.Select\ Previous\ Tab             key=<D-{>
1220   macm Window.Bring\ All\ To\ Front             action=arrangeInFront:
1222   macm Help.MacVim\ Help                        key=<D-?>
1223   macm Help.MacVim\ Website                     action=openWebsite:
1224 endif
1226 " vim: set sw=2 :