blob: 2b5acb982ab597c504cdfc61b9d2bcb629a51837 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim support file to define the default menus
2" You can also use this as a start for your own set of menus.
3"
4" Maintainer: Bram Moolenaar <Bram@vim.org>
Bram Moolenaar3a0d8092012-10-21 03:02:54 +02005" Last Change: 2012 Oct 21
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
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.
9
10" Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise
11" <CR> would not be recognized. See ":help 'cpoptions'".
12let s:cpo_save = &cpo
13set cpo&vim
14
15" Avoid installing the menus twice
16if !exists("did_install_default_menus")
17let did_install_default_menus = 1
18
19
20if 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
37
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"
52
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, '\.[^.]*', "", "")
Bram Moolenaar05159a02005-02-26 23:04:13 +000057 exe "runtime! lang/menu_" . s:lang . "[^a-z]*vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000058
Bram Moolenaare2cc9702005-03-15 22:43:58 +000059 if !exists("did_menu_trans") && strlen($LANG) > 1 && s:lang !~ '^en_us'
Bram Moolenaar071d4272004-06-13 20:20:40 +000060 " On windows locale names are complicated, try using $LANG, it might
Bram Moolenaare2cc9702005-03-15 22:43:58 +000061 " have been set by set_init_1(). But don't do this for "en" or "en_us".
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000062 " But don't match "slovak" when $LANG is "sl".
63 exe "runtime! lang/menu_" . tolower($LANG) . "[^a-z]*vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000064 endif
65 endif
66 endif
67endif
68
69
70" Help menu
71an 9999.10 &Help.&Overview<Tab><F1> :help<CR>
72an 9999.20 &Help.&User\ Manual :help usr_toc<CR>
73an 9999.30 &Help.&How-to\ links :help how-to<CR>
74an <silent> 9999.40 &Help.&Find\.\.\. :call <SID>Helpfind()<CR>
75an 9999.45 &Help.-sep1- <Nop>
76an 9999.50 &Help.&Credits :help credits<CR>
77an 9999.60 &Help.Co&pying :help copying<CR>
78an 9999.70 &Help.&Sponsor/Register :help sponsor<CR>
79an 9999.70 &Help.O&rphans :help kcc<CR>
80an 9999.75 &Help.-sep2- <Nop>
81an 9999.80 &Help.&Version :version<CR>
82an 9999.90 &Help.&About :intro<CR>
83
84fun! 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
96endfun
97
98" File menu
99an 10.310 &File.&Open\.\.\.<Tab>:e :browse confirm e<CR>
100an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp :browse sp<CR>
Bram Moolenaar5c8837f2006-02-25 21:52:33 +0000101an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew :browse tabnew<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102an 10.325 &File.&New<Tab>:enew :confirm enew<CR>
103an <silent> 10.330 &File.&Close<Tab>:close
Bram Moolenaarcab49df2011-03-22 17:40:10 +0100104 \ :if winheight(2) < 0 && tabpagewinnr(2) == 0 <Bar>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105 \ confirm enew <Bar>
106 \ else <Bar>
107 \ confirm close <Bar>
108 \ endif<CR>
109an 10.335 &File.-SEP1- <Nop>
110an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
111an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR>
112
113if 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>
117endif
118
119if 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>
124elseif 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>
129endif
130an 10.600 &File.-SEP4- <Nop>
131an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR>
132an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR>
133
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134func! <SID>SelectAll()
135 exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
136endfunc
137
Bram Moolenaaraba88572008-06-25 20:13:35 +0000138func! s:FnameEscape(fname)
139 if exists('*fnameescape')
140 return fnameescape(a:fname)
Bram Moolenaar5c736222010-01-06 20:54:52 +0100141 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000142 return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
143endfunc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144
145" Edit menu
146an 20.310 &Edit.&Undo<Tab>u u
147an 20.320 &Edit.&Redo<Tab>^R <C-R>
148an 20.330 &Edit.Rep&eat<Tab>\. .
149
150an 20.335 &Edit.-SEP1- <Nop>
151vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
152vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
153cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
154nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
155cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000156exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v']
157exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000158nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
159inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
160nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
161inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
162if has("win32") || has("win16")
163 vnoremenu 20.390 &Edit.&Delete<Tab>x x
164endif
165noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
166inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
167cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
168
169an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar843ee412004-06-30 16:16:41 +0000170if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
172 vunmenu &Edit.&Find\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000173 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
175 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000176 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000177else
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/
182endif
183
184an 20.425 &Edit.-SEP3- <Nop>
185an 20.430 &Edit.Settings\ &Window :options<CR>
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000186an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
187
188fun! s:EditVimrc()
189 if $MYVIMRC != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000190 let fname = $MYVIMRC
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000191 elseif has("win32") || has("dos32") || has("dos16") || has("os2")
192 if $HOME != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000193 let fname = $HOME . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000194 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000195 let fname = $VIM . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000196 endif
197 elseif has("amiga")
198 let fname = "s:.vimrc"
199 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000200 let fname = $HOME . "/.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000201 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000202 let fname = s:FnameEscape(fname)
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000203 if &mod
204 exe "split " . fname
205 else
206 exe "edit " . fname
207 endif
208endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000210fun! s:FixFText()
211 " Fix text in nameless register to be used with :promptfind.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000212 return substitute(@", "[\r\n]", '\\n', 'g')
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000213endfun
214
Bram Moolenaar071d4272004-06-13 20:20:40 +0000215" Edit/Global Settings
216an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
217an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic! :set ic! ic?<CR>
218an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm! :set sm! sm?<CR>
219
220an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\ :set so=1<CR>
221an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\ :set so=2<CR>
222an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\ :set so=3<CR>
223an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\ :set so=4<CR>
224an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\ :set so=5<CR>
225an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\ :set so=7<CR>
226an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\ :set so=10<CR>
227an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\ :set so=100<CR>
228
229an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
230an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
231an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
232an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
233an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
234an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
235an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp! :set cp!<CR>
236an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
237an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
238"
239" GUI options
240an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
241an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
242an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
243an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
244an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
245
246fun! 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
254endfun
255
256fun! 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
264endfun
265
266fun! 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
273endfun
274
275" Edit/File Settings
276
277" Boolean options
278an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
Bram Moolenaar64486672010-05-16 15:46:46 +0200279an 20.440.105 &Edit.F&ile\ Settings.Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! :set rnu! rnu?<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
281an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
282an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr! :set lbr! lbr?<CR>
283an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et! :set et! et?<CR>
284an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai! :set ai! ai?<CR>
285an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
286
287" other options
288an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
289an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
290an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
291an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
292an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
293an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
294an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
295
296an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
297an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
298an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
299an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
300an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
301an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
302
303an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
304an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
305fun! s:TextWidth()
306 if !exists("g:menutrans_textwidth_dialog")
307 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
308 endif
309 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
310 if n != ""
311 " remove leading zeros to avoid it being used as an octal number
312 let &tw = substitute(n, "^0*", "", "")
313 endif
314endfun
315
316fun! s:FileFormat()
317 if !exists("g:menutrans_fileformat_dialog")
318 let g:menutrans_fileformat_dialog = "Select format for writing the file"
319 endif
320 if !exists("g:menutrans_fileformat_choices")
321 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
322 endif
323 if &ff == "dos"
324 let def = 2
325 elseif &ff == "mac"
326 let def = 3
327 else
328 let def = 1
329 endif
330 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
331 if n == 1
332 set ff=unix
333 elseif n == 2
334 set ff=dos
335 elseif n == 3
336 set ff=mac
337 endif
338endfun
339
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200340
Bram Moolenaar071d4272004-06-13 20:20:40 +0000341" Setup the Edit.Color Scheme submenu
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200342
343" get NL separated string with file names
Bram Moolenaar071d4272004-06-13 20:20:40 +0000344let s:n = globpath(&runtimepath, "colors/*.vim")
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200345
346" split at NL, Ignore case for VMS and windows, sort on name
347let s:names = sort(map(split(s:n, "\n"), 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
348
349" define all the submenu entries
Bram Moolenaar071d4272004-06-13 20:20:40 +0000350let s:idx = 100
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200351for s:name in s:names
Bram Moolenaar071d4272004-06-13 20:20:40 +0000352 exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000353 let s:idx = s:idx + 10
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200354endfor
355unlet s:name s:names s:n s:idx
356
Bram Moolenaar071d4272004-06-13 20:20:40 +0000357
358" Setup the Edit.Keymap submenu
359if has("keymap")
360 let s:n = globpath(&runtimepath, "keymap/*.vim")
361 if s:n != ""
362 let s:idx = 100
363 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
364 while strlen(s:n) > 0
365 let s:i = stridx(s:n, "\n")
366 if s:i < 0
367 let s:name = s:n
368 let s:n = ""
369 else
370 let s:name = strpart(s:n, 0, s:i)
371 let s:n = strpart(s:n, s:i + 1, 19999)
372 endif
373 " Ignore case for VMS and windows
374 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
375 exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
376 unlet s:name
377 unlet s:i
378 let s:idx = s:idx + 10
379 endwhile
380 unlet s:idx
381 endif
382 unlet s:n
383endif
Bram Moolenaardfccaf02004-12-31 20:56:11 +0000384if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000385 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
386endif
387
388" Programming menu
389if !exists("g:ctags_command")
390 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000391 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000392 else
393 let g:ctags_command = "ctags -R ."
394 endif
395endif
396
397an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
398vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
399vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
400an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
401an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
402
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000403if has("folding") || has("spell")
404 an 40.330 &Tools.-SEP1- <Nop>
405endif
406
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000407" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000408if has("spell")
409 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
410 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
411 an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s ]s
Bram Moolenaardc27ac12005-07-06 22:35:45 +0000412 an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000413 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +0000414 an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000415 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
416 an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en" :set spl=en spell<CR>
417 an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au" :set spl=en_au spell<CR>
418 an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca" :set spl=en_ca spell<CR>
419 an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb" :set spl=en_gb spell<CR>
420 an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz" :set spl=en_nz spell<CR>
421 an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us" :set spl=en_us spell<CR>
422 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
423
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000424 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000425 func! s:SpellLang()
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000426 for cmd in s:undo_spellang
427 exe "silent! " . cmd
428 endfor
429 let s:undo_spellang = []
430
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000431 if &enc == "iso-8859-15"
432 let enc = "latin1"
433 else
434 let enc = &enc
435 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000436
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200437 if !exists("g:menutrans_set_lang_to")
438 let g:menutrans_set_lang_to = 'Set language to'
439 endif
440
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000441 let found = 0
442 let s = globpath(&rtp, "spell/*." . enc . ".spl")
443 if s != ""
444 let n = 300
445 for f in split(s, "\n")
446 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000447 if nm != "en" && nm !~ '/'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200448 let _nm = nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000449 let found += 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200450 let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"'
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000451 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
452 let s:undo_spellang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000453 endif
454 let n += 10
455 endfor
456 endif
457 if found == 0
458 echomsg "Could not find other spell files"
459 elseif found == 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200460 echomsg "Found spell file " . _nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000461 else
462 echomsg "Found " . found . " more spell files"
463 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000464 " Need to redo this when 'encoding' is changed.
465 augroup spellmenu
466 au! EncodingChanged * call <SID>SpellLang()
467 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000468 endfun
469
470endif
471
Bram Moolenaar071d4272004-06-13 20:20:40 +0000472" Tools.Fold Menu
473if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000474 " open close folds
475 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
476 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
477 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
478 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
479 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
480 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
481 an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR
482 " fold method
483 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
484 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
485 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
486 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
487 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
488 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
489 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
490 " create and delete folds
491 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
492 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
493 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
494 " moving around in folds
495 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
496 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
497 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
498 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
499 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
500 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
501 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
502 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
503 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
504endif " has folding
505
506if has("diff")
507 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
508 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
509 vunmenu &Tools.&Diff.&Get\ Block
510 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
511 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
512 vunmenu &Tools.&Diff.&Put\ Block
513 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
514endif
515
516an 40.358 &Tools.-SEP2- <Nop>
517an 40.360 &Tools.&Make<Tab>:make :make<CR>
518an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
519an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
520an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
521an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
522an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
523an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
524an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
525an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
526an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
527
528an 40.520 &Tools.-SEP3- <Nop>
529an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
530 \ :call <SID>XxdConv()<CR>
531an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
532 \ :call <SID>XxdBack()<CR>
533
534" Use a function to do the conversion, so that it also works with 'insertmode'
535" set.
536func! s:XxdConv()
537 let mod = &mod
538 if has("vms")
539 %!mc vim:xxd
540 else
541 call s:XxdFind()
542 exe '%!"' . g:xxdprogram . '"'
543 endif
544 if getline(1) =~ "^0000000:" " only if it worked
545 set ft=xxd
546 endif
547 let &mod = mod
548endfun
549
550func! s:XxdBack()
551 let mod = &mod
552 if has("vms")
553 %!mc vim:xxd -r
554 else
555 call s:XxdFind()
556 exe '%!"' . g:xxdprogram . '" -r'
557 endif
558 set ft=
559 doautocmd filetypedetect BufReadPost
560 let &mod = mod
561endfun
562
563func! s:XxdFind()
564 if !exists("g:xxdprogram")
565 " On the PC xxd may not be in the path but in the install directory
566 if (has("win32") || has("dos32")) && !executable("xxd")
567 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
568 else
569 let g:xxdprogram = "xxd"
570 endif
571 endif
572endfun
573
574" Setup the Tools.Compiler submenu
575let s:n = globpath(&runtimepath, "compiler/*.vim")
576let s:idx = 100
577while strlen(s:n) > 0
578 let s:i = stridx(s:n, "\n")
579 if s:i < 0
580 let s:name = s:n
581 let s:n = ""
582 else
583 let s:name = strpart(s:n, 0, s:i)
584 let s:n = strpart(s:n, s:i + 1, 19999)
585 endif
586 " Ignore case for VMS and windows
587 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
Bram Moolenaar045e82d2005-07-08 22:25:33 +0000588 exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000589 unlet s:name
590 unlet s:i
591 let s:idx = s:idx + 10
592endwhile
593unlet s:n
594unlet s:idx
595
596if !exists("no_buffers_menu")
597
598" Buffer list menu -- Setup functions & actions
599
600" wait with building the menu until after loading 'session' files. Makes
601" startup faster.
602let s:bmenu_wait = 1
603
604if !exists("bmenu_priority")
605 let bmenu_priority = 60
606endif
607
608func! s:BMAdd()
609 if s:bmenu_wait == 0
610 " when adding too many buffers, redraw in short format
611 if s:bmenu_count == &menuitems && s:bmenu_short == 0
612 call s:BMShow()
613 else
614 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
615 let s:bmenu_count = s:bmenu_count + 1
616 endif
617 endif
618endfunc
619
620func! s:BMRemove()
621 if s:bmenu_wait == 0
622 let name = expand("<afile>")
623 if isdirectory(name)
624 return
625 endif
626 let munge = <SID>BMMunge(name, expand("<abuf>"))
627
628 if s:bmenu_short == 0
629 exe 'silent! aun &Buffers.' . munge
630 else
631 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
632 endif
633 let s:bmenu_count = s:bmenu_count - 1
634 endif
635endfunc
636
637" Create the buffer menu (delete an existing one first).
638func! s:BMShow(...)
639 let s:bmenu_wait = 1
640 let s:bmenu_short = 1
641 let s:bmenu_count = 0
642 "
643 " get new priority, if exists
644 if a:0 == 1
645 let g:bmenu_priority = a:1
646 endif
647
648 " remove old menu, if exists; keep one entry to avoid a torn off menu to
649 " disappear.
650 silent! unmenu &Buffers
651 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
652 silent! unmenu! &Buffers
653
654 " create new menu; set 'cpo' to include the <CR>
655 let cpo_save = &cpo
656 set cpo&vim
657 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
658 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
659 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
660 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
661 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
662 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
663 let &cpo = cpo_save
664 unmenu &Buffers.Dummy
665
666 " figure out how many buffers there are
667 let buf = 1
668 while buf <= bufnr('$')
669 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000670 let s:bmenu_count = s:bmenu_count + 1
671 endif
672 let buf = buf + 1
673 endwhile
674 if s:bmenu_count <= &menuitems
675 let s:bmenu_short = 0
676 endif
677
678 " iterate through buffer list, adding each buffer to the menu:
679 let buf = 1
680 while buf <= bufnr('$')
681 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000682 call <SID>BMFilename(bufname(buf), buf)
683 endif
684 let buf = buf + 1
685 endwhile
686 let s:bmenu_wait = 0
687 aug buffer_list
688 au!
689 au BufCreate,BufFilePost * call <SID>BMAdd()
690 au BufDelete,BufFilePre * call <SID>BMRemove()
691 aug END
692endfunc
693
694func! s:BMHash(name)
695 " Make name all upper case, so that chars are between 32 and 96
696 let nm = substitute(a:name, ".*", '\U\0', "")
697 if has("ebcdic")
698 " HACK: Replace all non alphabetics with 'Z'
699 " Just to make it work for now.
700 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
701 let sp = char2nr('A') - 1
702 else
703 let sp = char2nr(' ')
704 endif
705 " convert first six chars into a number for sorting:
706 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)
707endfunc
708
709func! s:BMHash2(name)
710 let nm = substitute(a:name, ".", '\L\0', "")
711 " Not exactly right for EBCDIC...
712 if nm[0] < 'a' || nm[0] > 'z'
713 return '&others.'
714 elseif nm[0] <= 'd'
715 return '&abcd.'
716 elseif nm[0] <= 'h'
717 return '&efgh.'
718 elseif nm[0] <= 'l'
719 return '&ijkl.'
720 elseif nm[0] <= 'p'
721 return '&mnop.'
722 elseif nm[0] <= 't'
723 return '&qrst.'
724 else
725 return '&u-z.'
726 endif
727endfunc
728
729" insert a buffer name into the buffer menu:
730func! s:BMFilename(name, num)
731 if isdirectory(a:name)
732 return
733 endif
734 let munge = <SID>BMMunge(a:name, a:num)
735 let hash = <SID>BMHash(munge)
736 if s:bmenu_short == 0
737 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
738 else
739 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
740 endif
741 " set 'cpo' to include the <CR>
742 let cpo_save = &cpo
743 set cpo&vim
744 exe name . ' :confirm b' . a:num . '<CR>'
745 let &cpo = cpo_save
746endfunc
747
748" Truncate a long path to fit it in a menu item.
749if !exists("g:bmenu_max_pathlen")
750 let g:bmenu_max_pathlen = 35
751endif
752func! s:BMTruncName(fname)
753 let name = a:fname
754 if g:bmenu_max_pathlen < 5
755 let name = ""
756 else
757 let len = strlen(name)
758 if len > g:bmenu_max_pathlen
759 let amountl = (g:bmenu_max_pathlen / 2) - 2
760 let amountr = g:bmenu_max_pathlen - amountl - 3
761 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
762 let left = substitute(name, pattern, '\1', '')
763 let right = substitute(name, pattern, '\2', '')
764 if strlen(left) + strlen(right) < len
765 let name = left . '...' . right
766 endif
767 endif
768 endif
769 return name
770endfunc
771
772func! s:BMMunge(fname, bnum)
773 let name = a:fname
774 if name == ''
775 if !exists("g:menutrans_no_file")
776 let g:menutrans_no_file = "[No file]"
777 endif
778 let name = g:menutrans_no_file
779 else
780 let name = fnamemodify(name, ':p:~')
781 endif
782 " detach file name and separate it out:
783 let name2 = fnamemodify(name, ':t')
784 if a:bnum >= 0
785 let name2 = name2 . ' (' . a:bnum . ')'
786 endif
787 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
788 let name = escape(name, "\\. \t|")
789 let name = substitute(name, "&", "&&", "g")
790 let name = substitute(name, "\n", "^@", "g")
791 return name
792endfunc
793
794" When just starting Vim, load the buffer menu later
795if has("vim_starting")
796 augroup LoadBufferMenu
797 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
798 au VimEnter * au! LoadBufferMenu
799 augroup END
800else
801 call <SID>BMShow()
802endif
803
804endif " !exists("no_buffers_menu")
805
806" Window menu
807an 70.300 &Window.&New<Tab>^Wn <C-W>n
808an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
809an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
810an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
811if has("vertsplit")
812 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
813 if !exists("*MenuExplOpen")
814 fun MenuExplOpen()
815 if @% == ""
816 20vsp .
817 else
Bram Moolenaaraba88572008-06-25 20:13:35 +0000818 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000819 endif
820 endfun
821 endif
822endif
823an 70.335 &Window.-SEP1- <Nop>
824an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
825an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
826an 70.350 &Window.-SEP2- <Nop>
827an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
828an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
829an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
830an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
831an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
832an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
833an 70.365 &Window.-SEP3- <Nop>
834an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
835an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
836an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
837an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
838an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
839
840" The popup menu
841an 1.10 PopUp.&Undo u
842an 1.15 PopUp.-SEP1- <Nop>
843vnoremenu 1.20 PopUp.Cu&t "+x
844vnoremenu 1.30 PopUp.&Copy "+y
845cnoremenu 1.30 PopUp.&Copy <C-Y>
846nnoremenu 1.40 PopUp.&Paste "+gP
847cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000848exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
849exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000850vnoremenu 1.50 PopUp.&Delete x
851an 1.55 PopUp.-SEP2- <Nop>
852vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000853
854nnoremenu 1.70 PopUp.Select\ &Word vaw
855onoremenu 1.70 PopUp.Select\ &Word aw
856vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
857inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
858cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
859
860nnoremenu 1.73 PopUp.Select\ &Sentence vas
861onoremenu 1.73 PopUp.Select\ &Sentence as
862vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
863inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
864cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
865
866nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
867onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
868vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
869inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
870cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
871
872nnoremenu 1.80 PopUp.Select\ &Line V
873onoremenu 1.80 PopUp.Select\ &Line <C-C>V
874vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
875inoremenu 1.80 PopUp.Select\ &Line <C-O>V
876cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
877
878nnoremenu 1.90 PopUp.Select\ &Block <C-V>
879onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
880vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
881inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
882cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
883
Bram Moolenaar071d4272004-06-13 20:20:40 +0000884noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
885inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
886cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
887
Bram Moolenaar45360022005-07-21 21:08:21 +0000888if has("spell")
889 " Spell suggestions in the popup menu. Note that this will slow down the
890 " appearance of the menu!
891 func! <SID>SpellPopup()
892 if exists("s:changeitem") && s:changeitem != ''
893 call <SID>SpellDel()
894 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000895
896 " Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000897 if !&spell || &spelllang == ''
898 return
899 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000900
901 let curcol = col('.')
Bram Moolenaar1c7715d2005-10-03 22:02:18 +0000902 let [w, a] = spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000903 if col('.') > curcol " don't use word after the cursor
904 let w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +0000905 endif
906 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000907 if a == 'caps'
908 let s:suglist = [substitute(w, '.*', '\u&', '')]
909 else
910 let s:suglist = spellsuggest(w, 10)
911 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200912 if len(s:suglist) > 0
Bram Moolenaar45360022005-07-21 21:08:21 +0000913 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
914 let s:fromword = w
915 let pri = 1
Bram Moolenaar62292582010-07-10 16:36:59 +0200916 " set 'cpo' to include the <CR>
917 let cpo_save = &cpo
918 set cpo&vim
Bram Moolenaar45360022005-07-21 21:08:21 +0000919 for sug in s:suglist
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000920 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
Bram Moolenaar45360022005-07-21 21:08:21 +0000921 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
922 let pri += 1
923 endfor
924
925 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000926 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000927
928 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000929 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000930
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000931 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar62292582010-07-10 16:36:59 +0200932 let &cpo = cpo_save
Bram Moolenaar45360022005-07-21 21:08:21 +0000933 endif
934 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200935 call cursor(0, curcol) " put the cursor back where it was
Bram Moolenaar45360022005-07-21 21:08:21 +0000936 endfunc
937
938 func! <SID>SpellReplace(n)
939 let l = getline('.')
Bram Moolenaar62292582010-07-10 16:36:59 +0200940 " Move the cursor to the start of the word.
941 call spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000942 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
943 \ . strpart(l, col('.') + len(s:fromword) - 1))
944 endfunc
945
946 func! <SID>SpellDel()
947 exe "aunmenu PopUp." . s:changeitem
948 exe "aunmenu PopUp." . s:additem
949 exe "aunmenu PopUp." . s:ignoreitem
950 aunmenu PopUp.-SpellSep-
951 let s:changeitem = ''
952 endfun
953
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000954 augroup SpellPopupMenu
955 au! MenuPopup * call <SID>SpellPopup()
956 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +0000957endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000958
959" The GUI toolbar (for MS-Windows and GTK)
960if has("toolbar")
961 an 1.10 ToolBar.Open :browse confirm e<CR>
962 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
963 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
964
965 if has("printer")
966 an 1.40 ToolBar.Print :hardcopy<CR>
967 vunmenu ToolBar.Print
968 vnoremenu ToolBar.Print :hardcopy<CR>
969 elseif has("unix")
970 an 1.40 ToolBar.Print :w !lpr<CR>
971 vunmenu ToolBar.Print
972 vnoremenu ToolBar.Print :w !lpr<CR>
973 endif
974
975 an 1.45 ToolBar.-sep1- <Nop>
976 an 1.50 ToolBar.Undo u
977 an 1.60 ToolBar.Redo <C-R>
978
979 an 1.65 ToolBar.-sep2- <Nop>
980 vnoremenu 1.70 ToolBar.Cut "+x
981 vnoremenu 1.80 ToolBar.Copy "+y
982 cnoremenu 1.80 ToolBar.Copy <C-Y>
983 nnoremenu 1.90 ToolBar.Paste "+gP
984 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000985 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
986 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000987
988 if !has("gui_athena")
989 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000990 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000991 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000992 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000993 an 1.110 ToolBar.FindNext n
994 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +0000995 endif
996
Bram Moolenaar071d4272004-06-13 20:20:40 +0000997 an 1.215 ToolBar.-sep5- <Nop>
998 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
999 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
1000 an 1.240 ToolBar.RunScript :browse so<CR>
1001
1002 an 1.245 ToolBar.-sep6- <Nop>
1003 an 1.250 ToolBar.Make :make<CR>
1004 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
1005 an 1.280 ToolBar.TagJump g<C-]>
1006
1007 an 1.295 ToolBar.-sep7- <Nop>
1008 an 1.300 ToolBar.Help :help<CR>
1009 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1010
1011" Only set the tooltips here if not done in a language menu file
1012if exists("*Do_toolbar_tmenu")
1013 call Do_toolbar_tmenu()
1014else
1015 let did_toolbar_tmenu = 1
1016 tmenu ToolBar.Open Open file
1017 tmenu ToolBar.Save Save current file
1018 tmenu ToolBar.SaveAll Save all files
1019 tmenu ToolBar.Print Print
1020 tmenu ToolBar.Undo Undo
1021 tmenu ToolBar.Redo Redo
1022 tmenu ToolBar.Cut Cut to clipboard
1023 tmenu ToolBar.Copy Copy to clipboard
1024 tmenu ToolBar.Paste Paste from Clipboard
1025 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001026 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001027 tmenu ToolBar.FindNext Find Next
1028 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001029 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001030 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001031 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001032 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001033 tmenu ToolBar.Make Make current project (:make)
1034 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001035 tmenu ToolBar.TagJump Jump to tag under cursor
1036 tmenu ToolBar.Help Vim Help
1037 tmenu ToolBar.FindHelp Search Vim Help
1038endif
1039
1040" Select a session to load; default to current session name if present
1041fun! s:LoadVimSesn()
1042 if strlen(v:this_session) > 0
Bram Moolenaaraba88572008-06-25 20:13:35 +00001043 let name = s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001044 else
1045 let name = "Session.vim"
1046 endif
1047 execute "browse so " . name
1048endfun
1049
1050" Select a session to save; default to current session name if present
1051fun! s:SaveVimSesn()
1052 if strlen(v:this_session) == 0
1053 let v:this_session = "Session.vim"
1054 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +00001055 execute "browse mksession! " . s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001056endfun
1057
1058endif
1059
1060endif " !exists("did_install_default_menus")
1061
1062" Define these items always, so that syntax can be switched on when it wasn't.
1063" But skip them when the Syntax menu was disabled by the user.
1064if !exists("did_install_syntax_menu")
1065 an 50.212 &Syntax.&Manual :syn manual<CR>
1066 an 50.214 &Syntax.A&utomatic :syn on<CR>
1067 an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1068 if !exists("*s:SynOnOff")
1069 fun s:SynOnOff()
1070 if has("syntax_items")
1071 syn clear
1072 else
1073 if !exists("g:syntax_on")
1074 syn manual
1075 endif
1076 set syn=ON
1077 endif
1078 endfun
1079 endif
1080endif
1081
1082
1083" Install the Syntax menu only when filetype.vim has been loaded or when
1084" manual syntax highlighting is enabled.
1085" Avoid installing the Syntax menu twice.
1086if (exists("did_load_filetypes") || exists("syntax_on"))
1087 \ && !exists("did_install_syntax_menu")
1088 let did_install_syntax_menu = 1
1089
1090" Skip setting up the individual syntax selection menus unless
1091" do_syntax_sel_menu is defined (it takes quite a bit of time).
1092if exists("do_syntax_sel_menu")
1093 runtime! synmenu.vim
1094else
1095 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>
1096 an 50.195 &Syntax.-SEP1- <Nop>
1097endif
1098
1099an 50.210 &Syntax.&Off :syn off<CR>
1100an 50.700 &Syntax.-SEP3- <Nop>
1101an 50.710 &Syntax.Co&lor\ test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1102an 50.720 &Syntax.&Highlight\ test :runtime syntax/hitest.vim<CR>
1103an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1104
1105endif " !exists("did_install_syntax_menu")
1106
Bram Moolenaar071d4272004-06-13 20:20:40 +00001107" Restore the previous value of 'cpoptions'.
1108let &cpo = s:cpo_save
1109unlet s:cpo_save
1110
1111" vim: set sw=2 :