blob: 2cbd55c4e93054bdb692bf7f90cffe26ec06320a [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
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 Moolenaar82cf9b62005-06-07 21:09:25 +0000437 let found = 0
438 let s = globpath(&rtp, "spell/*." . enc . ".spl")
439 if s != ""
440 let n = 300
441 for f in split(s, "\n")
442 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000443 if nm != "en" && nm !~ '/'
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000444 let found += 1
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000445 let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
446 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
447 let s:undo_spellang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000448 endif
449 let n += 10
450 endfor
451 endif
452 if found == 0
453 echomsg "Could not find other spell files"
454 elseif found == 1
455 echomsg "Found spell file " . nm
456 else
457 echomsg "Found " . found . " more spell files"
458 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000459 " Need to redo this when 'encoding' is changed.
460 augroup spellmenu
461 au! EncodingChanged * call <SID>SpellLang()
462 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000463 endfun
464
465endif
466
Bram Moolenaar071d4272004-06-13 20:20:40 +0000467" Tools.Fold Menu
468if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000469 " open close folds
470 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
471 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
472 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
473 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
474 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
475 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
476 an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR
477 " fold method
478 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
479 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
480 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
481 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
482 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
483 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
484 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
485 " create and delete folds
486 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
487 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
488 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
489 " moving around in folds
490 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
491 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
492 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
493 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
494 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
495 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
496 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
497 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
498 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
499endif " has folding
500
501if has("diff")
502 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
503 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
504 vunmenu &Tools.&Diff.&Get\ Block
505 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
506 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
507 vunmenu &Tools.&Diff.&Put\ Block
508 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
509endif
510
511an 40.358 &Tools.-SEP2- <Nop>
512an 40.360 &Tools.&Make<Tab>:make :make<CR>
513an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
514an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
515an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
516an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
517an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
518an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
519an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
520an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
521an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
522
523an 40.520 &Tools.-SEP3- <Nop>
524an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
525 \ :call <SID>XxdConv()<CR>
526an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
527 \ :call <SID>XxdBack()<CR>
528
529" Use a function to do the conversion, so that it also works with 'insertmode'
530" set.
531func! s:XxdConv()
532 let mod = &mod
533 if has("vms")
534 %!mc vim:xxd
535 else
536 call s:XxdFind()
537 exe '%!"' . g:xxdprogram . '"'
538 endif
539 if getline(1) =~ "^0000000:" " only if it worked
540 set ft=xxd
541 endif
542 let &mod = mod
543endfun
544
545func! s:XxdBack()
546 let mod = &mod
547 if has("vms")
548 %!mc vim:xxd -r
549 else
550 call s:XxdFind()
551 exe '%!"' . g:xxdprogram . '" -r'
552 endif
553 set ft=
554 doautocmd filetypedetect BufReadPost
555 let &mod = mod
556endfun
557
558func! s:XxdFind()
559 if !exists("g:xxdprogram")
560 " On the PC xxd may not be in the path but in the install directory
561 if (has("win32") || has("dos32")) && !executable("xxd")
562 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
563 else
564 let g:xxdprogram = "xxd"
565 endif
566 endif
567endfun
568
569" Setup the Tools.Compiler submenu
570let s:n = globpath(&runtimepath, "compiler/*.vim")
571let s:idx = 100
572while strlen(s:n) > 0
573 let s:i = stridx(s:n, "\n")
574 if s:i < 0
575 let s:name = s:n
576 let s:n = ""
577 else
578 let s:name = strpart(s:n, 0, s:i)
579 let s:n = strpart(s:n, s:i + 1, 19999)
580 endif
581 " Ignore case for VMS and windows
582 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
Bram Moolenaar045e82d2005-07-08 22:25:33 +0000583 exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000584 unlet s:name
585 unlet s:i
586 let s:idx = s:idx + 10
587endwhile
588unlet s:n
589unlet s:idx
590
591if !exists("no_buffers_menu")
592
593" Buffer list menu -- Setup functions & actions
594
595" wait with building the menu until after loading 'session' files. Makes
596" startup faster.
597let s:bmenu_wait = 1
598
599if !exists("bmenu_priority")
600 let bmenu_priority = 60
601endif
602
603func! s:BMAdd()
604 if s:bmenu_wait == 0
605 " when adding too many buffers, redraw in short format
606 if s:bmenu_count == &menuitems && s:bmenu_short == 0
607 call s:BMShow()
608 else
609 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
610 let s:bmenu_count = s:bmenu_count + 1
611 endif
612 endif
613endfunc
614
615func! s:BMRemove()
616 if s:bmenu_wait == 0
617 let name = expand("<afile>")
618 if isdirectory(name)
619 return
620 endif
621 let munge = <SID>BMMunge(name, expand("<abuf>"))
622
623 if s:bmenu_short == 0
624 exe 'silent! aun &Buffers.' . munge
625 else
626 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
627 endif
628 let s:bmenu_count = s:bmenu_count - 1
629 endif
630endfunc
631
632" Create the buffer menu (delete an existing one first).
633func! s:BMShow(...)
634 let s:bmenu_wait = 1
635 let s:bmenu_short = 1
636 let s:bmenu_count = 0
637 "
638 " get new priority, if exists
639 if a:0 == 1
640 let g:bmenu_priority = a:1
641 endif
642
643 " remove old menu, if exists; keep one entry to avoid a torn off menu to
644 " disappear.
645 silent! unmenu &Buffers
646 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
647 silent! unmenu! &Buffers
648
649 " create new menu; set 'cpo' to include the <CR>
650 let cpo_save = &cpo
651 set cpo&vim
652 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
653 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
654 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
655 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
656 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
657 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
658 let &cpo = cpo_save
659 unmenu &Buffers.Dummy
660
661 " figure out how many buffers there are
662 let buf = 1
663 while buf <= bufnr('$')
664 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000665 let s:bmenu_count = s:bmenu_count + 1
666 endif
667 let buf = buf + 1
668 endwhile
669 if s:bmenu_count <= &menuitems
670 let s:bmenu_short = 0
671 endif
672
673 " iterate through buffer list, adding each buffer to the menu:
674 let buf = 1
675 while buf <= bufnr('$')
676 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000677 call <SID>BMFilename(bufname(buf), buf)
678 endif
679 let buf = buf + 1
680 endwhile
681 let s:bmenu_wait = 0
682 aug buffer_list
683 au!
684 au BufCreate,BufFilePost * call <SID>BMAdd()
685 au BufDelete,BufFilePre * call <SID>BMRemove()
686 aug END
687endfunc
688
689func! s:BMHash(name)
690 " Make name all upper case, so that chars are between 32 and 96
691 let nm = substitute(a:name, ".*", '\U\0', "")
692 if has("ebcdic")
693 " HACK: Replace all non alphabetics with 'Z'
694 " Just to make it work for now.
695 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
696 let sp = char2nr('A') - 1
697 else
698 let sp = char2nr(' ')
699 endif
700 " convert first six chars into a number for sorting:
701 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)
702endfunc
703
704func! s:BMHash2(name)
705 let nm = substitute(a:name, ".", '\L\0', "")
706 " Not exactly right for EBCDIC...
707 if nm[0] < 'a' || nm[0] > 'z'
708 return '&others.'
709 elseif nm[0] <= 'd'
710 return '&abcd.'
711 elseif nm[0] <= 'h'
712 return '&efgh.'
713 elseif nm[0] <= 'l'
714 return '&ijkl.'
715 elseif nm[0] <= 'p'
716 return '&mnop.'
717 elseif nm[0] <= 't'
718 return '&qrst.'
719 else
720 return '&u-z.'
721 endif
722endfunc
723
724" insert a buffer name into the buffer menu:
725func! s:BMFilename(name, num)
726 if isdirectory(a:name)
727 return
728 endif
729 let munge = <SID>BMMunge(a:name, a:num)
730 let hash = <SID>BMHash(munge)
731 if s:bmenu_short == 0
732 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
733 else
734 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
735 endif
736 " set 'cpo' to include the <CR>
737 let cpo_save = &cpo
738 set cpo&vim
739 exe name . ' :confirm b' . a:num . '<CR>'
740 let &cpo = cpo_save
741endfunc
742
743" Truncate a long path to fit it in a menu item.
744if !exists("g:bmenu_max_pathlen")
745 let g:bmenu_max_pathlen = 35
746endif
747func! s:BMTruncName(fname)
748 let name = a:fname
749 if g:bmenu_max_pathlen < 5
750 let name = ""
751 else
752 let len = strlen(name)
753 if len > g:bmenu_max_pathlen
754 let amountl = (g:bmenu_max_pathlen / 2) - 2
755 let amountr = g:bmenu_max_pathlen - amountl - 3
756 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
757 let left = substitute(name, pattern, '\1', '')
758 let right = substitute(name, pattern, '\2', '')
759 if strlen(left) + strlen(right) < len
760 let name = left . '...' . right
761 endif
762 endif
763 endif
764 return name
765endfunc
766
767func! s:BMMunge(fname, bnum)
768 let name = a:fname
769 if name == ''
770 if !exists("g:menutrans_no_file")
771 let g:menutrans_no_file = "[No file]"
772 endif
773 let name = g:menutrans_no_file
774 else
775 let name = fnamemodify(name, ':p:~')
776 endif
777 " detach file name and separate it out:
778 let name2 = fnamemodify(name, ':t')
779 if a:bnum >= 0
780 let name2 = name2 . ' (' . a:bnum . ')'
781 endif
782 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
783 let name = escape(name, "\\. \t|")
784 let name = substitute(name, "&", "&&", "g")
785 let name = substitute(name, "\n", "^@", "g")
786 return name
787endfunc
788
789" When just starting Vim, load the buffer menu later
790if has("vim_starting")
791 augroup LoadBufferMenu
792 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
793 au VimEnter * au! LoadBufferMenu
794 augroup END
795else
796 call <SID>BMShow()
797endif
798
799endif " !exists("no_buffers_menu")
800
801" Window menu
802an 70.300 &Window.&New<Tab>^Wn <C-W>n
803an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
804an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
805an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
806if has("vertsplit")
807 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
808 if !exists("*MenuExplOpen")
809 fun MenuExplOpen()
810 if @% == ""
811 20vsp .
812 else
Bram Moolenaaraba88572008-06-25 20:13:35 +0000813 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000814 endif
815 endfun
816 endif
817endif
818an 70.335 &Window.-SEP1- <Nop>
819an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
820an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
821an 70.350 &Window.-SEP2- <Nop>
822an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
823an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
824an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
825an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
826an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
827an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
828an 70.365 &Window.-SEP3- <Nop>
829an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
830an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
831an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
832an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
833an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
834
835" The popup menu
836an 1.10 PopUp.&Undo u
837an 1.15 PopUp.-SEP1- <Nop>
838vnoremenu 1.20 PopUp.Cu&t "+x
839vnoremenu 1.30 PopUp.&Copy "+y
840cnoremenu 1.30 PopUp.&Copy <C-Y>
841nnoremenu 1.40 PopUp.&Paste "+gP
842cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000843exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
844exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000845vnoremenu 1.50 PopUp.&Delete x
846an 1.55 PopUp.-SEP2- <Nop>
847vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000848
849nnoremenu 1.70 PopUp.Select\ &Word vaw
850onoremenu 1.70 PopUp.Select\ &Word aw
851vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
852inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
853cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
854
855nnoremenu 1.73 PopUp.Select\ &Sentence vas
856onoremenu 1.73 PopUp.Select\ &Sentence as
857vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
858inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
859cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
860
861nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
862onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
863vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
864inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
865cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
866
867nnoremenu 1.80 PopUp.Select\ &Line V
868onoremenu 1.80 PopUp.Select\ &Line <C-C>V
869vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
870inoremenu 1.80 PopUp.Select\ &Line <C-O>V
871cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
872
873nnoremenu 1.90 PopUp.Select\ &Block <C-V>
874onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
875vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
876inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
877cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
878
Bram Moolenaar071d4272004-06-13 20:20:40 +0000879noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
880inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
881cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
882
Bram Moolenaar45360022005-07-21 21:08:21 +0000883if has("spell")
884 " Spell suggestions in the popup menu. Note that this will slow down the
885 " appearance of the menu!
886 func! <SID>SpellPopup()
887 if exists("s:changeitem") && s:changeitem != ''
888 call <SID>SpellDel()
889 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000890
891 " Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000892 if !&spell || &spelllang == ''
893 return
894 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000895
896 let curcol = col('.')
Bram Moolenaar1c7715d2005-10-03 22:02:18 +0000897 let [w, a] = spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000898 if col('.') > curcol " don't use word after the cursor
899 let w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +0000900 endif
901 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000902 if a == 'caps'
903 let s:suglist = [substitute(w, '.*', '\u&', '')]
904 else
905 let s:suglist = spellsuggest(w, 10)
906 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200907 if len(s:suglist) > 0
Bram Moolenaar45360022005-07-21 21:08:21 +0000908 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
909 let s:fromword = w
910 let pri = 1
Bram Moolenaar62292582010-07-10 16:36:59 +0200911 " set 'cpo' to include the <CR>
912 let cpo_save = &cpo
913 set cpo&vim
Bram Moolenaar45360022005-07-21 21:08:21 +0000914 for sug in s:suglist
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000915 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
Bram Moolenaar45360022005-07-21 21:08:21 +0000916 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
917 let pri += 1
918 endfor
919
920 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000921 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000922
923 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000924 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000925
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000926 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar62292582010-07-10 16:36:59 +0200927 let &cpo = cpo_save
Bram Moolenaar45360022005-07-21 21:08:21 +0000928 endif
929 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200930 call cursor(0, curcol) " put the cursor back where it was
Bram Moolenaar45360022005-07-21 21:08:21 +0000931 endfunc
932
933 func! <SID>SpellReplace(n)
934 let l = getline('.')
Bram Moolenaar62292582010-07-10 16:36:59 +0200935 " Move the cursor to the start of the word.
936 call spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000937 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 :