blob: 5b5246507cbd39c45d407825354fd3eb0c8b63cc [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 Moolenaar5c736222010-01-06 20:54:52 +01005" Last Change: 2009 Feb 26
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
104 \ :if winheight(2) < 0 <Bar>
105 \ 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
340" Setup the Edit.Color Scheme submenu
341let s:n = globpath(&runtimepath, "colors/*.vim")
342let s:idx = 100
343while strlen(s:n) > 0
344 let s:i = stridx(s:n, "\n")
345 if s:i < 0
346 let s:name = s:n
347 let s:n = ""
348 else
349 let s:name = strpart(s:n, 0, s:i)
350 let s:n = strpart(s:n, s:i + 1, 19999)
351 endif
352 " Ignore case for VMS and windows
353 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
354 exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
355 unlet s:name
356 unlet s:i
357 let s:idx = s:idx + 10
358endwhile
359unlet s:n
360unlet s:idx
361
362" Setup the Edit.Keymap submenu
363if has("keymap")
364 let s:n = globpath(&runtimepath, "keymap/*.vim")
365 if s:n != ""
366 let s:idx = 100
367 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
368 while strlen(s:n) > 0
369 let s:i = stridx(s:n, "\n")
370 if s:i < 0
371 let s:name = s:n
372 let s:n = ""
373 else
374 let s:name = strpart(s:n, 0, s:i)
375 let s:n = strpart(s:n, s:i + 1, 19999)
376 endif
377 " Ignore case for VMS and windows
378 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
379 exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
380 unlet s:name
381 unlet s:i
382 let s:idx = s:idx + 10
383 endwhile
384 unlet s:idx
385 endif
386 unlet s:n
387endif
Bram Moolenaardfccaf02004-12-31 20:56:11 +0000388if 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 +0000389 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
390endif
391
392" Programming menu
393if !exists("g:ctags_command")
394 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000395 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000396 else
397 let g:ctags_command = "ctags -R ."
398 endif
399endif
400
401an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
402vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
403vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
404an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
405an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
406
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000407if has("folding") || has("spell")
408 an 40.330 &Tools.-SEP1- <Nop>
409endif
410
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000411" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000412if has("spell")
413 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
414 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
415 an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s ]s
Bram Moolenaardc27ac12005-07-06 22:35:45 +0000416 an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000417 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +0000418 an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000419 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
420 an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en" :set spl=en spell<CR>
421 an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au" :set spl=en_au spell<CR>
422 an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca" :set spl=en_ca spell<CR>
423 an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb" :set spl=en_gb spell<CR>
424 an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz" :set spl=en_nz spell<CR>
425 an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us" :set spl=en_us spell<CR>
426 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
427
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000428 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000429 func! s:SpellLang()
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000430 for cmd in s:undo_spellang
431 exe "silent! " . cmd
432 endfor
433 let s:undo_spellang = []
434
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000435 if &enc == "iso-8859-15"
436 let enc = "latin1"
437 else
438 let enc = &enc
439 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000440
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 Moolenaar82cf9b62005-06-07 21:09:25 +0000448 let found += 1
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000449 let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
450 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
451 let s:undo_spellang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000452 endif
453 let n += 10
454 endfor
455 endif
456 if found == 0
457 echomsg "Could not find other spell files"
458 elseif found == 1
459 echomsg "Found spell file " . nm
460 else
461 echomsg "Found " . found . " more spell files"
462 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000463 " Need to redo this when 'encoding' is changed.
464 augroup spellmenu
465 au! EncodingChanged * call <SID>SpellLang()
466 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000467 endfun
468
469endif
470
Bram Moolenaar071d4272004-06-13 20:20:40 +0000471" Tools.Fold Menu
472if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000473 " open close folds
474 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
475 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
476 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
477 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
478 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
479 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
480 an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR
481 " fold method
482 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
483 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
484 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
485 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
486 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
487 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
488 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
489 " create and delete folds
490 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
491 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
492 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
493 " moving around in folds
494 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
495 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
496 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
497 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
498 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
499 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
500 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
501 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
502 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
503endif " has folding
504
505if has("diff")
506 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
507 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
508 vunmenu &Tools.&Diff.&Get\ Block
509 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
510 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
511 vunmenu &Tools.&Diff.&Put\ Block
512 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
513endif
514
515an 40.358 &Tools.-SEP2- <Nop>
516an 40.360 &Tools.&Make<Tab>:make :make<CR>
517an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
518an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
519an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
520an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
521an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
522an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
523an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
524an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
525an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
526
527an 40.520 &Tools.-SEP3- <Nop>
528an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
529 \ :call <SID>XxdConv()<CR>
530an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
531 \ :call <SID>XxdBack()<CR>
532
533" Use a function to do the conversion, so that it also works with 'insertmode'
534" set.
535func! s:XxdConv()
536 let mod = &mod
537 if has("vms")
538 %!mc vim:xxd
539 else
540 call s:XxdFind()
541 exe '%!"' . g:xxdprogram . '"'
542 endif
543 if getline(1) =~ "^0000000:" " only if it worked
544 set ft=xxd
545 endif
546 let &mod = mod
547endfun
548
549func! s:XxdBack()
550 let mod = &mod
551 if has("vms")
552 %!mc vim:xxd -r
553 else
554 call s:XxdFind()
555 exe '%!"' . g:xxdprogram . '" -r'
556 endif
557 set ft=
558 doautocmd filetypedetect BufReadPost
559 let &mod = mod
560endfun
561
562func! s:XxdFind()
563 if !exists("g:xxdprogram")
564 " On the PC xxd may not be in the path but in the install directory
565 if (has("win32") || has("dos32")) && !executable("xxd")
566 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
567 else
568 let g:xxdprogram = "xxd"
569 endif
570 endif
571endfun
572
573" Setup the Tools.Compiler submenu
574let s:n = globpath(&runtimepath, "compiler/*.vim")
575let s:idx = 100
576while strlen(s:n) > 0
577 let s:i = stridx(s:n, "\n")
578 if s:i < 0
579 let s:name = s:n
580 let s:n = ""
581 else
582 let s:name = strpart(s:n, 0, s:i)
583 let s:n = strpart(s:n, s:i + 1, 19999)
584 endif
585 " Ignore case for VMS and windows
586 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
Bram Moolenaar045e82d2005-07-08 22:25:33 +0000587 exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000588 unlet s:name
589 unlet s:i
590 let s:idx = s:idx + 10
591endwhile
592unlet s:n
593unlet s:idx
594
595if !exists("no_buffers_menu")
596
597" Buffer list menu -- Setup functions & actions
598
599" wait with building the menu until after loading 'session' files. Makes
600" startup faster.
601let s:bmenu_wait = 1
602
603if !exists("bmenu_priority")
604 let bmenu_priority = 60
605endif
606
607func! s:BMAdd()
608 if s:bmenu_wait == 0
609 " when adding too many buffers, redraw in short format
610 if s:bmenu_count == &menuitems && s:bmenu_short == 0
611 call s:BMShow()
612 else
613 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
614 let s:bmenu_count = s:bmenu_count + 1
615 endif
616 endif
617endfunc
618
619func! s:BMRemove()
620 if s:bmenu_wait == 0
621 let name = expand("<afile>")
622 if isdirectory(name)
623 return
624 endif
625 let munge = <SID>BMMunge(name, expand("<abuf>"))
626
627 if s:bmenu_short == 0
628 exe 'silent! aun &Buffers.' . munge
629 else
630 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
631 endif
632 let s:bmenu_count = s:bmenu_count - 1
633 endif
634endfunc
635
636" Create the buffer menu (delete an existing one first).
637func! s:BMShow(...)
638 let s:bmenu_wait = 1
639 let s:bmenu_short = 1
640 let s:bmenu_count = 0
641 "
642 " get new priority, if exists
643 if a:0 == 1
644 let g:bmenu_priority = a:1
645 endif
646
647 " remove old menu, if exists; keep one entry to avoid a torn off menu to
648 " disappear.
649 silent! unmenu &Buffers
650 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
651 silent! unmenu! &Buffers
652
653 " create new menu; set 'cpo' to include the <CR>
654 let cpo_save = &cpo
655 set cpo&vim
656 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
657 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
658 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
659 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
660 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
661 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
662 let &cpo = cpo_save
663 unmenu &Buffers.Dummy
664
665 " figure out how many buffers there are
666 let buf = 1
667 while buf <= bufnr('$')
668 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000669 let s:bmenu_count = s:bmenu_count + 1
670 endif
671 let buf = buf + 1
672 endwhile
673 if s:bmenu_count <= &menuitems
674 let s:bmenu_short = 0
675 endif
676
677 " iterate through buffer list, adding each buffer to the menu:
678 let buf = 1
679 while buf <= bufnr('$')
680 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000681 call <SID>BMFilename(bufname(buf), buf)
682 endif
683 let buf = buf + 1
684 endwhile
685 let s:bmenu_wait = 0
686 aug buffer_list
687 au!
688 au BufCreate,BufFilePost * call <SID>BMAdd()
689 au BufDelete,BufFilePre * call <SID>BMRemove()
690 aug END
691endfunc
692
693func! s:BMHash(name)
694 " Make name all upper case, so that chars are between 32 and 96
695 let nm = substitute(a:name, ".*", '\U\0', "")
696 if has("ebcdic")
697 " HACK: Replace all non alphabetics with 'Z'
698 " Just to make it work for now.
699 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
700 let sp = char2nr('A') - 1
701 else
702 let sp = char2nr(' ')
703 endif
704 " convert first six chars into a number for sorting:
705 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)
706endfunc
707
708func! s:BMHash2(name)
709 let nm = substitute(a:name, ".", '\L\0', "")
710 " Not exactly right for EBCDIC...
711 if nm[0] < 'a' || nm[0] > 'z'
712 return '&others.'
713 elseif nm[0] <= 'd'
714 return '&abcd.'
715 elseif nm[0] <= 'h'
716 return '&efgh.'
717 elseif nm[0] <= 'l'
718 return '&ijkl.'
719 elseif nm[0] <= 'p'
720 return '&mnop.'
721 elseif nm[0] <= 't'
722 return '&qrst.'
723 else
724 return '&u-z.'
725 endif
726endfunc
727
728" insert a buffer name into the buffer menu:
729func! s:BMFilename(name, num)
730 if isdirectory(a:name)
731 return
732 endif
733 let munge = <SID>BMMunge(a:name, a:num)
734 let hash = <SID>BMHash(munge)
735 if s:bmenu_short == 0
736 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
737 else
738 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
739 endif
740 " set 'cpo' to include the <CR>
741 let cpo_save = &cpo
742 set cpo&vim
743 exe name . ' :confirm b' . a:num . '<CR>'
744 let &cpo = cpo_save
745endfunc
746
747" Truncate a long path to fit it in a menu item.
748if !exists("g:bmenu_max_pathlen")
749 let g:bmenu_max_pathlen = 35
750endif
751func! s:BMTruncName(fname)
752 let name = a:fname
753 if g:bmenu_max_pathlen < 5
754 let name = ""
755 else
756 let len = strlen(name)
757 if len > g:bmenu_max_pathlen
758 let amountl = (g:bmenu_max_pathlen / 2) - 2
759 let amountr = g:bmenu_max_pathlen - amountl - 3
760 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
761 let left = substitute(name, pattern, '\1', '')
762 let right = substitute(name, pattern, '\2', '')
763 if strlen(left) + strlen(right) < len
764 let name = left . '...' . right
765 endif
766 endif
767 endif
768 return name
769endfunc
770
771func! s:BMMunge(fname, bnum)
772 let name = a:fname
773 if name == ''
774 if !exists("g:menutrans_no_file")
775 let g:menutrans_no_file = "[No file]"
776 endif
777 let name = g:menutrans_no_file
778 else
779 let name = fnamemodify(name, ':p:~')
780 endif
781 " detach file name and separate it out:
782 let name2 = fnamemodify(name, ':t')
783 if a:bnum >= 0
784 let name2 = name2 . ' (' . a:bnum . ')'
785 endif
786 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
787 let name = escape(name, "\\. \t|")
788 let name = substitute(name, "&", "&&", "g")
789 let name = substitute(name, "\n", "^@", "g")
790 return name
791endfunc
792
793" When just starting Vim, load the buffer menu later
794if has("vim_starting")
795 augroup LoadBufferMenu
796 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
797 au VimEnter * au! LoadBufferMenu
798 augroup END
799else
800 call <SID>BMShow()
801endif
802
803endif " !exists("no_buffers_menu")
804
805" Window menu
806an 70.300 &Window.&New<Tab>^Wn <C-W>n
807an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
808an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
809an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
810if has("vertsplit")
811 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
812 if !exists("*MenuExplOpen")
813 fun MenuExplOpen()
814 if @% == ""
815 20vsp .
816 else
Bram Moolenaaraba88572008-06-25 20:13:35 +0000817 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000818 endif
819 endfun
820 endif
821endif
822an 70.335 &Window.-SEP1- <Nop>
823an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
824an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
825an 70.350 &Window.-SEP2- <Nop>
826an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
827an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
828an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
829an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
830an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
831an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
832an 70.365 &Window.-SEP3- <Nop>
833an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
834an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
835an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
836an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
837an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
838
839" The popup menu
840an 1.10 PopUp.&Undo u
841an 1.15 PopUp.-SEP1- <Nop>
842vnoremenu 1.20 PopUp.Cu&t "+x
843vnoremenu 1.30 PopUp.&Copy "+y
844cnoremenu 1.30 PopUp.&Copy <C-Y>
845nnoremenu 1.40 PopUp.&Paste "+gP
846cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000847exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
848exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000849vnoremenu 1.50 PopUp.&Delete x
850an 1.55 PopUp.-SEP2- <Nop>
851vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000852
853nnoremenu 1.70 PopUp.Select\ &Word vaw
854onoremenu 1.70 PopUp.Select\ &Word aw
855vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
856inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
857cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
858
859nnoremenu 1.73 PopUp.Select\ &Sentence vas
860onoremenu 1.73 PopUp.Select\ &Sentence as
861vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
862inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
863cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
864
865nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
866onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
867vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
868inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
869cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
870
871nnoremenu 1.80 PopUp.Select\ &Line V
872onoremenu 1.80 PopUp.Select\ &Line <C-C>V
873vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
874inoremenu 1.80 PopUp.Select\ &Line <C-O>V
875cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
876
877nnoremenu 1.90 PopUp.Select\ &Block <C-V>
878onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
879vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
880inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
881cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
882
Bram Moolenaar071d4272004-06-13 20:20:40 +0000883noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
884inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
885cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
886
Bram Moolenaar45360022005-07-21 21:08:21 +0000887if has("spell")
888 " Spell suggestions in the popup menu. Note that this will slow down the
889 " appearance of the menu!
890 func! <SID>SpellPopup()
891 if exists("s:changeitem") && s:changeitem != ''
892 call <SID>SpellDel()
893 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000894
895 " Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000896 if !&spell || &spelllang == ''
897 return
898 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000899
900 let curcol = col('.')
Bram Moolenaar1c7715d2005-10-03 22:02:18 +0000901 let [w, a] = spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000902 if col('.') > curcol " don't use word after the cursor
903 let w = ''
904 call cursor(0, curcol) " put the cursor back where it was
905 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 Moolenaar45360022005-07-21 21:08:21 +0000912 if len(s:suglist) <= 0
913 call cursor(0, curcol) " put the cursor back where it was
914 else
915 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
916 let s:fromword = w
917 let pri = 1
918 for sug in s:suglist
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000919 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
Bram Moolenaar45360022005-07-21 21:08:21 +0000920 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
921 let pri += 1
922 endfor
923
924 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000925 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000926
927 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000928 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000929
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000930 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar45360022005-07-21 21:08:21 +0000931 endif
932 endif
933 endfunc
934
935 func! <SID>SpellReplace(n)
936 let l = getline('.')
937 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
938 \ . strpart(l, col('.') + len(s:fromword) - 1))
939 endfunc
940
941 func! <SID>SpellDel()
942 exe "aunmenu PopUp." . s:changeitem
943 exe "aunmenu PopUp." . s:additem
944 exe "aunmenu PopUp." . s:ignoreitem
945 aunmenu PopUp.-SpellSep-
946 let s:changeitem = ''
947 endfun
948
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000949 augroup SpellPopupMenu
950 au! MenuPopup * call <SID>SpellPopup()
951 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +0000952endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000953
954" The GUI toolbar (for MS-Windows and GTK)
955if has("toolbar")
956 an 1.10 ToolBar.Open :browse confirm e<CR>
957 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
958 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
959
960 if has("printer")
961 an 1.40 ToolBar.Print :hardcopy<CR>
962 vunmenu ToolBar.Print
963 vnoremenu ToolBar.Print :hardcopy<CR>
964 elseif has("unix")
965 an 1.40 ToolBar.Print :w !lpr<CR>
966 vunmenu ToolBar.Print
967 vnoremenu ToolBar.Print :w !lpr<CR>
968 endif
969
970 an 1.45 ToolBar.-sep1- <Nop>
971 an 1.50 ToolBar.Undo u
972 an 1.60 ToolBar.Redo <C-R>
973
974 an 1.65 ToolBar.-sep2- <Nop>
975 vnoremenu 1.70 ToolBar.Cut "+x
976 vnoremenu 1.80 ToolBar.Copy "+y
977 cnoremenu 1.80 ToolBar.Copy <C-Y>
978 nnoremenu 1.90 ToolBar.Paste "+gP
979 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000980 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
981 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000982
983 if !has("gui_athena")
984 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000985 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000986 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000987 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000988 an 1.110 ToolBar.FindNext n
989 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +0000990 endif
991
Bram Moolenaar071d4272004-06-13 20:20:40 +0000992 an 1.215 ToolBar.-sep5- <Nop>
993 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
994 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
995 an 1.240 ToolBar.RunScript :browse so<CR>
996
997 an 1.245 ToolBar.-sep6- <Nop>
998 an 1.250 ToolBar.Make :make<CR>
999 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
1000 an 1.280 ToolBar.TagJump g<C-]>
1001
1002 an 1.295 ToolBar.-sep7- <Nop>
1003 an 1.300 ToolBar.Help :help<CR>
1004 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1005
1006" Only set the tooltips here if not done in a language menu file
1007if exists("*Do_toolbar_tmenu")
1008 call Do_toolbar_tmenu()
1009else
1010 let did_toolbar_tmenu = 1
1011 tmenu ToolBar.Open Open file
1012 tmenu ToolBar.Save Save current file
1013 tmenu ToolBar.SaveAll Save all files
1014 tmenu ToolBar.Print Print
1015 tmenu ToolBar.Undo Undo
1016 tmenu ToolBar.Redo Redo
1017 tmenu ToolBar.Cut Cut to clipboard
1018 tmenu ToolBar.Copy Copy to clipboard
1019 tmenu ToolBar.Paste Paste from Clipboard
1020 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001021 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001022 tmenu ToolBar.FindNext Find Next
1023 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001024 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001025 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001026 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001027 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001028 tmenu ToolBar.Make Make current project (:make)
1029 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001030 tmenu ToolBar.TagJump Jump to tag under cursor
1031 tmenu ToolBar.Help Vim Help
1032 tmenu ToolBar.FindHelp Search Vim Help
1033endif
1034
1035" Select a session to load; default to current session name if present
1036fun! s:LoadVimSesn()
1037 if strlen(v:this_session) > 0
Bram Moolenaaraba88572008-06-25 20:13:35 +00001038 let name = s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001039 else
1040 let name = "Session.vim"
1041 endif
1042 execute "browse so " . name
1043endfun
1044
1045" Select a session to save; default to current session name if present
1046fun! s:SaveVimSesn()
1047 if strlen(v:this_session) == 0
1048 let v:this_session = "Session.vim"
1049 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +00001050 execute "browse mksession! " . s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001051endfun
1052
1053endif
1054
1055endif " !exists("did_install_default_menus")
1056
1057" Define these items always, so that syntax can be switched on when it wasn't.
1058" But skip them when the Syntax menu was disabled by the user.
1059if !exists("did_install_syntax_menu")
1060 an 50.212 &Syntax.&Manual :syn manual<CR>
1061 an 50.214 &Syntax.A&utomatic :syn on<CR>
1062 an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1063 if !exists("*s:SynOnOff")
1064 fun s:SynOnOff()
1065 if has("syntax_items")
1066 syn clear
1067 else
1068 if !exists("g:syntax_on")
1069 syn manual
1070 endif
1071 set syn=ON
1072 endif
1073 endfun
1074 endif
1075endif
1076
1077
1078" Install the Syntax menu only when filetype.vim has been loaded or when
1079" manual syntax highlighting is enabled.
1080" Avoid installing the Syntax menu twice.
1081if (exists("did_load_filetypes") || exists("syntax_on"))
1082 \ && !exists("did_install_syntax_menu")
1083 let did_install_syntax_menu = 1
1084
1085" Skip setting up the individual syntax selection menus unless
1086" do_syntax_sel_menu is defined (it takes quite a bit of time).
1087if exists("do_syntax_sel_menu")
1088 runtime! synmenu.vim
1089else
1090 an 50.10 &Syntax.&Show\ filetypes\ in\ menu :let do_syntax_sel_menu = 1<Bar>runtime! synmenu.vim<Bar>aunmenu &Syntax.&Show\ filetypes\ in\ menu<CR>
1091 an 50.195 &Syntax.-SEP1- <Nop>
1092endif
1093
1094an 50.210 &Syntax.&Off :syn off<CR>
1095an 50.700 &Syntax.-SEP3- <Nop>
1096an 50.710 &Syntax.Co&lor\ test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1097an 50.720 &Syntax.&Highlight\ test :runtime syntax/hitest.vim<CR>
1098an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1099
1100endif " !exists("did_install_syntax_menu")
1101
Bram Moolenaar071d4272004-06-13 20:20:40 +00001102" Restore the previous value of 'cpoptions'.
1103let &cpo = s:cpo_save
1104unlet s:cpo_save
1105
1106" vim: set sw=2 :