blob: 056a26fa26b173293d653e0461a3e6f74649cc14 [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 Moolenaar5c8837f2006-02-25 21:52:33 +00005" Last Change: 2006 Feb 25
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
134" Pasting blockwise and linewise selections is not possible in Insert and
135" Visual mode without the +virtualedit feature. They are pasted as if they
136" were characterwise instead. Add to that some tricks to leave the cursor in
137" the right position, also for "gi".
138" Note: the same stuff appears in mswin.vim.
139if has("virtualedit")
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +0000140 let s:paste_cmd = ":call <SID>Paste()<CR>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000141 func! <SID>Paste()
142 let ove = &ve
143 set ve=all
Bram Moolenaar98692072006-02-04 00:57:42 +0000144 normal! `^
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145 if @+ != ''
Bram Moolenaar98692072006-02-04 00:57:42 +0000146 normal! "+gP
Bram Moolenaar071d4272004-06-13 20:20:40 +0000147 endif
148 let c = col(".")
Bram Moolenaar98692072006-02-04 00:57:42 +0000149 normal! i
Bram Moolenaar071d4272004-06-13 20:20:40 +0000150 if col(".") < c " compensate for i<ESC> moving the cursor left
Bram Moolenaar98692072006-02-04 00:57:42 +0000151 normal! l
Bram Moolenaar071d4272004-06-13 20:20:40 +0000152 endif
153 let &ve = ove
154 endfunc
155else
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +0000156 let s:paste_cmd = "\"=@+.'xy'<CR>gPFx\"_2x"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000157endif
158
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +0000159" Define the string to use for items that are present both in Edit, Popup and
160" Toolbar menu.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000161if has("virtualedit")
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +0000162 let s:paste_v_cmd = '"-c<Esc>' . s:paste_cmd
163 let s:paste_i_cmd = '<Esc>' . s:paste_cmd . 'gi'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000164else
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +0000165 let s:paste_v_cmd = '"-c<Esc>gix<Esc>' . s:paste_cmd . '"_x'
166 let s:paste_i_cmd = 'x<Esc>' . s:paste_cmd . '"_s'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000167endif
168
169func! <SID>SelectAll()
170 exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
171endfunc
172
173
174" Edit menu
175an 20.310 &Edit.&Undo<Tab>u u
176an 20.320 &Edit.&Redo<Tab>^R <C-R>
177an 20.330 &Edit.Rep&eat<Tab>\. .
178
179an 20.335 &Edit.-SEP1- <Nop>
180vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
181vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
182cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
183nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
184cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +0000185exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . s:paste_v_cmd
186exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . s:paste_i_cmd
Bram Moolenaar071d4272004-06-13 20:20:40 +0000187nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
188inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
189nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
190inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
191if has("win32") || has("win16")
192 vnoremenu 20.390 &Edit.&Delete<Tab>x x
193endif
194noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
195inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
196cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
197
198an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar843ee412004-06-30 16:16:41 +0000199if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000200 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
201 vunmenu &Edit.&Find\.\.\.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000202 vnoremenu <silent> &Edit.&Find\.\.\. y:call <SID>FixFText()<CR>:promptfind <C-R>"<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000203 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
204 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000205 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:call <SID>FixFText()<CR>:promptrepl <C-R>"<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000206else
207 an 20.410 &Edit.&Find<Tab>/ /
208 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
209 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
210 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
211endif
212
213an 20.425 &Edit.-SEP3- <Nop>
214an 20.430 &Edit.Settings\ &Window :options<CR>
215
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000216fun! s:FixFText()
217 " Fix text in nameless register to be used with :promptfind.
218 let @" = substitute(@", "[\r\n]", '\\n', 'g')
219endfun
220
Bram Moolenaar071d4272004-06-13 20:20:40 +0000221" Edit/Global Settings
222an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
223an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic! :set ic! ic?<CR>
224an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm! :set sm! sm?<CR>
225
226an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\ :set so=1<CR>
227an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\ :set so=2<CR>
228an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\ :set so=3<CR>
229an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\ :set so=4<CR>
230an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\ :set so=5<CR>
231an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\ :set so=7<CR>
232an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\ :set so=10<CR>
233an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\ :set so=100<CR>
234
235an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
236an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
237an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
238an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
239an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
240an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
241an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp! :set cp!<CR>
242an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
243an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
244"
245" GUI options
246an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
247an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
248an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
249an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
250an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
251
252fun! s:SearchP()
253 if !exists("g:menutrans_path_dialog")
254 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
255 endif
256 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
257 if n != ""
258 let &path = substitute(n, ' ', '\\ ', 'g')
259 endif
260endfun
261
262fun! s:TagFiles()
263 if !exists("g:menutrans_tags_dialog")
264 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
265 endif
266 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
267 if n != ""
268 let &tags = substitute(n, ' ', '\\ ', 'g')
269 endif
270endfun
271
272fun! s:ToggleGuiOption(option)
273 " If a:option is already set in guioptions, then we want to remove it
274 if match(&guioptions, "\\C" . a:option) > -1
275 exec "set go-=" . a:option
276 else
277 exec "set go+=" . a:option
278 endif
279endfun
280
281" Edit/File Settings
282
283" Boolean options
284an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
285an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
286an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
287an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr! :set lbr! lbr?<CR>
288an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et! :set et! et?<CR>
289an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai! :set ai! ai?<CR>
290an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
291
292" other options
293an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
294an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
295an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
296an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
297an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
298an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
299an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
300
301an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
302an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
303an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
304an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
305an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
306an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
307
308an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
309an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
310fun! s:TextWidth()
311 if !exists("g:menutrans_textwidth_dialog")
312 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
313 endif
314 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
315 if n != ""
316 " remove leading zeros to avoid it being used as an octal number
317 let &tw = substitute(n, "^0*", "", "")
318 endif
319endfun
320
321fun! s:FileFormat()
322 if !exists("g:menutrans_fileformat_dialog")
323 let g:menutrans_fileformat_dialog = "Select format for writing the file"
324 endif
325 if !exists("g:menutrans_fileformat_choices")
326 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
327 endif
328 if &ff == "dos"
329 let def = 2
330 elseif &ff == "mac"
331 let def = 3
332 else
333 let def = 1
334 endif
335 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
336 if n == 1
337 set ff=unix
338 elseif n == 2
339 set ff=dos
340 elseif n == 3
341 set ff=mac
342 endif
343endfun
344
345" Setup the Edit.Color Scheme submenu
346let s:n = globpath(&runtimepath, "colors/*.vim")
347let s:idx = 100
348while strlen(s:n) > 0
349 let s:i = stridx(s:n, "\n")
350 if s:i < 0
351 let s:name = s:n
352 let s:n = ""
353 else
354 let s:name = strpart(s:n, 0, s:i)
355 let s:n = strpart(s:n, s:i + 1, 19999)
356 endif
357 " Ignore case for VMS and windows
358 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
359 exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
360 unlet s:name
361 unlet s:i
362 let s:idx = s:idx + 10
363endwhile
364unlet s:n
365unlet s:idx
366
367" Setup the Edit.Keymap submenu
368if has("keymap")
369 let s:n = globpath(&runtimepath, "keymap/*.vim")
370 if s:n != ""
371 let s:idx = 100
372 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
373 while strlen(s:n) > 0
374 let s:i = stridx(s:n, "\n")
375 if s:i < 0
376 let s:name = s:n
377 let s:n = ""
378 else
379 let s:name = strpart(s:n, 0, s:i)
380 let s:n = strpart(s:n, s:i + 1, 19999)
381 endif
382 " Ignore case for VMS and windows
383 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
384 exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
385 unlet s:name
386 unlet s:i
387 let s:idx = s:idx + 10
388 endwhile
389 unlet s:idx
390 endif
391 unlet s:n
392endif
Bram Moolenaardfccaf02004-12-31 20:56:11 +0000393if 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 +0000394 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
395endif
396
397" Programming menu
398if !exists("g:ctags_command")
399 if has("vms")
400 let g:ctags_command = "mc vim:ctags ."
401 else
402 let g:ctags_command = "ctags -R ."
403 endif
404endif
405
406an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
407vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
408vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
409an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
410an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
411
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000412if has("folding") || has("spell")
413 an 40.330 &Tools.-SEP1- <Nop>
414endif
415
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000416" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000417if has("spell")
418 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
419 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
420 an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s ]s
Bram Moolenaardc27ac12005-07-06 22:35:45 +0000421 an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s [s
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +0000422 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z? z?
423 an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000424 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
425 an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en" :set spl=en spell<CR>
426 an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au" :set spl=en_au spell<CR>
427 an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca" :set spl=en_ca spell<CR>
428 an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb" :set spl=en_gb spell<CR>
429 an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz" :set spl=en_nz spell<CR>
430 an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us" :set spl=en_us spell<CR>
431 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
432
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000433 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000434 func! s:SpellLang()
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000435 for cmd in s:undo_spellang
436 exe "silent! " . cmd
437 endfor
438 let s:undo_spellang = []
439
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000440 if &enc == "iso-8859-15"
441 let enc = "latin1"
442 else
443 let enc = &enc
444 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000445
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000446 let found = 0
447 let s = globpath(&rtp, "spell/*." . enc . ".spl")
448 if s != ""
449 let n = 300
450 for f in split(s, "\n")
451 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000452 if nm != "en" && nm !~ '/'
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000453 let found += 1
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000454 let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
455 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
456 let s:undo_spellang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000457 endif
458 let n += 10
459 endfor
460 endif
461 if found == 0
462 echomsg "Could not find other spell files"
463 elseif found == 1
464 echomsg "Found spell file " . nm
465 else
466 echomsg "Found " . found . " more spell files"
467 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000468 " Need to redo this when 'encoding' is changed.
469 augroup spellmenu
470 au! EncodingChanged * call <SID>SpellLang()
471 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000472 endfun
473
474endif
475
Bram Moolenaar071d4272004-06-13 20:20:40 +0000476" Tools.Fold Menu
477if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000478 " open close folds
479 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
480 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
481 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
482 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
483 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
484 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
485 an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR
486 " fold method
487 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
488 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
489 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
490 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
491 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
492 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
493 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
494 " create and delete folds
495 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
496 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
497 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
498 " moving around in folds
499 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
500 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
501 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
502 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
503 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
504 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
505 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
506 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
507 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
508endif " has folding
509
510if has("diff")
511 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
512 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
513 vunmenu &Tools.&Diff.&Get\ Block
514 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
515 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
516 vunmenu &Tools.&Diff.&Put\ Block
517 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
518endif
519
520an 40.358 &Tools.-SEP2- <Nop>
521an 40.360 &Tools.&Make<Tab>:make :make<CR>
522an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
523an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
524an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
525an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
526an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
527an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
528an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
529an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
530an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
531
532an 40.520 &Tools.-SEP3- <Nop>
533an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
534 \ :call <SID>XxdConv()<CR>
535an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
536 \ :call <SID>XxdBack()<CR>
537
538" Use a function to do the conversion, so that it also works with 'insertmode'
539" set.
540func! s:XxdConv()
541 let mod = &mod
542 if has("vms")
543 %!mc vim:xxd
544 else
545 call s:XxdFind()
546 exe '%!"' . g:xxdprogram . '"'
547 endif
548 if getline(1) =~ "^0000000:" " only if it worked
549 set ft=xxd
550 endif
551 let &mod = mod
552endfun
553
554func! s:XxdBack()
555 let mod = &mod
556 if has("vms")
557 %!mc vim:xxd -r
558 else
559 call s:XxdFind()
560 exe '%!"' . g:xxdprogram . '" -r'
561 endif
562 set ft=
563 doautocmd filetypedetect BufReadPost
564 let &mod = mod
565endfun
566
567func! s:XxdFind()
568 if !exists("g:xxdprogram")
569 " On the PC xxd may not be in the path but in the install directory
570 if (has("win32") || has("dos32")) && !executable("xxd")
571 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
572 else
573 let g:xxdprogram = "xxd"
574 endif
575 endif
576endfun
577
578" Setup the Tools.Compiler submenu
579let s:n = globpath(&runtimepath, "compiler/*.vim")
580let s:idx = 100
581while strlen(s:n) > 0
582 let s:i = stridx(s:n, "\n")
583 if s:i < 0
584 let s:name = s:n
585 let s:n = ""
586 else
587 let s:name = strpart(s:n, 0, s:i)
588 let s:n = strpart(s:n, s:i + 1, 19999)
589 endif
590 " Ignore case for VMS and windows
591 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
Bram Moolenaar045e82d2005-07-08 22:25:33 +0000592 exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000593 unlet s:name
594 unlet s:i
595 let s:idx = s:idx + 10
596endwhile
597unlet s:n
598unlet s:idx
599
600if !exists("no_buffers_menu")
601
602" Buffer list menu -- Setup functions & actions
603
604" wait with building the menu until after loading 'session' files. Makes
605" startup faster.
606let s:bmenu_wait = 1
607
608if !exists("bmenu_priority")
609 let bmenu_priority = 60
610endif
611
612func! s:BMAdd()
613 if s:bmenu_wait == 0
614 " when adding too many buffers, redraw in short format
615 if s:bmenu_count == &menuitems && s:bmenu_short == 0
616 call s:BMShow()
617 else
618 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
619 let s:bmenu_count = s:bmenu_count + 1
620 endif
621 endif
622endfunc
623
624func! s:BMRemove()
625 if s:bmenu_wait == 0
626 let name = expand("<afile>")
627 if isdirectory(name)
628 return
629 endif
630 let munge = <SID>BMMunge(name, expand("<abuf>"))
631
632 if s:bmenu_short == 0
633 exe 'silent! aun &Buffers.' . munge
634 else
635 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
636 endif
637 let s:bmenu_count = s:bmenu_count - 1
638 endif
639endfunc
640
641" Create the buffer menu (delete an existing one first).
642func! s:BMShow(...)
643 let s:bmenu_wait = 1
644 let s:bmenu_short = 1
645 let s:bmenu_count = 0
646 "
647 " get new priority, if exists
648 if a:0 == 1
649 let g:bmenu_priority = a:1
650 endif
651
652 " remove old menu, if exists; keep one entry to avoid a torn off menu to
653 " disappear.
654 silent! unmenu &Buffers
655 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
656 silent! unmenu! &Buffers
657
658 " create new menu; set 'cpo' to include the <CR>
659 let cpo_save = &cpo
660 set cpo&vim
661 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
662 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
663 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
664 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
665 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
666 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
667 let &cpo = cpo_save
668 unmenu &Buffers.Dummy
669
670 " figure out how many buffers there are
671 let buf = 1
672 while buf <= bufnr('$')
673 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
674 \ && !getbufvar(buf, "&bufsecret")
675 let s:bmenu_count = s:bmenu_count + 1
676 endif
677 let buf = buf + 1
678 endwhile
679 if s:bmenu_count <= &menuitems
680 let s:bmenu_short = 0
681 endif
682
683 " iterate through buffer list, adding each buffer to the menu:
684 let buf = 1
685 while buf <= bufnr('$')
686 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
687 \ && !getbufvar(buf, "&bufsecret")
688 call <SID>BMFilename(bufname(buf), buf)
689 endif
690 let buf = buf + 1
691 endwhile
692 let s:bmenu_wait = 0
693 aug buffer_list
694 au!
695 au BufCreate,BufFilePost * call <SID>BMAdd()
696 au BufDelete,BufFilePre * call <SID>BMRemove()
697 aug END
698endfunc
699
700func! s:BMHash(name)
701 " Make name all upper case, so that chars are between 32 and 96
702 let nm = substitute(a:name, ".*", '\U\0', "")
703 if has("ebcdic")
704 " HACK: Replace all non alphabetics with 'Z'
705 " Just to make it work for now.
706 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
707 let sp = char2nr('A') - 1
708 else
709 let sp = char2nr(' ')
710 endif
711 " convert first six chars into a number for sorting:
712 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)
713endfunc
714
715func! s:BMHash2(name)
716 let nm = substitute(a:name, ".", '\L\0', "")
717 " Not exactly right for EBCDIC...
718 if nm[0] < 'a' || nm[0] > 'z'
719 return '&others.'
720 elseif nm[0] <= 'd'
721 return '&abcd.'
722 elseif nm[0] <= 'h'
723 return '&efgh.'
724 elseif nm[0] <= 'l'
725 return '&ijkl.'
726 elseif nm[0] <= 'p'
727 return '&mnop.'
728 elseif nm[0] <= 't'
729 return '&qrst.'
730 else
731 return '&u-z.'
732 endif
733endfunc
734
735" insert a buffer name into the buffer menu:
736func! s:BMFilename(name, num)
737 if isdirectory(a:name)
738 return
739 endif
740 let munge = <SID>BMMunge(a:name, a:num)
741 let hash = <SID>BMHash(munge)
742 if s:bmenu_short == 0
743 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
744 else
745 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
746 endif
747 " set 'cpo' to include the <CR>
748 let cpo_save = &cpo
749 set cpo&vim
750 exe name . ' :confirm b' . a:num . '<CR>'
751 let &cpo = cpo_save
752endfunc
753
754" Truncate a long path to fit it in a menu item.
755if !exists("g:bmenu_max_pathlen")
756 let g:bmenu_max_pathlen = 35
757endif
758func! s:BMTruncName(fname)
759 let name = a:fname
760 if g:bmenu_max_pathlen < 5
761 let name = ""
762 else
763 let len = strlen(name)
764 if len > g:bmenu_max_pathlen
765 let amountl = (g:bmenu_max_pathlen / 2) - 2
766 let amountr = g:bmenu_max_pathlen - amountl - 3
767 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
768 let left = substitute(name, pattern, '\1', '')
769 let right = substitute(name, pattern, '\2', '')
770 if strlen(left) + strlen(right) < len
771 let name = left . '...' . right
772 endif
773 endif
774 endif
775 return name
776endfunc
777
778func! s:BMMunge(fname, bnum)
779 let name = a:fname
780 if name == ''
781 if !exists("g:menutrans_no_file")
782 let g:menutrans_no_file = "[No file]"
783 endif
784 let name = g:menutrans_no_file
785 else
786 let name = fnamemodify(name, ':p:~')
787 endif
788 " detach file name and separate it out:
789 let name2 = fnamemodify(name, ':t')
790 if a:bnum >= 0
791 let name2 = name2 . ' (' . a:bnum . ')'
792 endif
793 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
794 let name = escape(name, "\\. \t|")
795 let name = substitute(name, "&", "&&", "g")
796 let name = substitute(name, "\n", "^@", "g")
797 return name
798endfunc
799
800" When just starting Vim, load the buffer menu later
801if has("vim_starting")
802 augroup LoadBufferMenu
803 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
804 au VimEnter * au! LoadBufferMenu
805 augroup END
806else
807 call <SID>BMShow()
808endif
809
810endif " !exists("no_buffers_menu")
811
812" Window menu
813an 70.300 &Window.&New<Tab>^Wn <C-W>n
814an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
815an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
816an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
817if has("vertsplit")
818 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
819 if !exists("*MenuExplOpen")
820 fun MenuExplOpen()
821 if @% == ""
822 20vsp .
823 else
824 exe "20vsp " . expand("%:p:h")
825 endif
826 endfun
827 endif
828endif
829an 70.335 &Window.-SEP1- <Nop>
830an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
831an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
832an 70.350 &Window.-SEP2- <Nop>
833an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
834an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
835an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
836an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
837an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
838an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
839an 70.365 &Window.-SEP3- <Nop>
840an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
841an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
842an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
843an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
844an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
845
846" The popup menu
847an 1.10 PopUp.&Undo u
848an 1.15 PopUp.-SEP1- <Nop>
849vnoremenu 1.20 PopUp.Cu&t "+x
850vnoremenu 1.30 PopUp.&Copy "+y
851cnoremenu 1.30 PopUp.&Copy <C-Y>
852nnoremenu 1.40 PopUp.&Paste "+gP
853cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +0000854exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . s:paste_v_cmd
855exe 'inoremenu <script> 1.40 PopUp.&Paste ' . s:paste_i_cmd
Bram Moolenaar071d4272004-06-13 20:20:40 +0000856vnoremenu 1.50 PopUp.&Delete x
857an 1.55 PopUp.-SEP2- <Nop>
858vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000859
860nnoremenu 1.70 PopUp.Select\ &Word vaw
861onoremenu 1.70 PopUp.Select\ &Word aw
862vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
863inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
864cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
865
866nnoremenu 1.73 PopUp.Select\ &Sentence vas
867onoremenu 1.73 PopUp.Select\ &Sentence as
868vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
869inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
870cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
871
872nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
873onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
874vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
875inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
876cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
877
878nnoremenu 1.80 PopUp.Select\ &Line V
879onoremenu 1.80 PopUp.Select\ &Line <C-C>V
880vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
881inoremenu 1.80 PopUp.Select\ &Line <C-O>V
882cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
883
884nnoremenu 1.90 PopUp.Select\ &Block <C-V>
885onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
886vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
887inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
888cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
889
Bram Moolenaar071d4272004-06-13 20:20:40 +0000890noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
891inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
892cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
893
Bram Moolenaar45360022005-07-21 21:08:21 +0000894if has("spell")
895 " Spell suggestions in the popup menu. Note that this will slow down the
896 " appearance of the menu!
897 func! <SID>SpellPopup()
898 if exists("s:changeitem") && s:changeitem != ''
899 call <SID>SpellDel()
900 endif
Bram Moolenaard8c00872005-07-22 21:52:15 +0000901 if !&spell || &spelllang == ''
902 return
903 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000904
905 let curcol = col('.')
Bram Moolenaar1c7715d2005-10-03 22:02:18 +0000906 let [w, a] = spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000907 if col('.') > curcol " don't use word after the cursor
908 let w = ''
909 call cursor(0, curcol) " put the cursor back where it was
910 endif
911 if w != ''
912 let s:suglist = spellsuggest(w, 10)
913 if len(s:suglist) <= 0
914 call cursor(0, curcol) " put the cursor back where it was
915 else
916 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
917 let s:fromword = w
918 let pri = 1
919 for sug in s:suglist
920 exe 'amenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
921 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
922 let pri += 1
923 endfor
924
925 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
926 exe 'amenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
927
928 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
929 exe 'amenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
930
931 amenu 1.8 PopUp.-SpellSep- :
932 endif
933 endif
934 endfunc
935
936 func! <SID>SpellReplace(n)
937 let l = getline('.')
938 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
939 \ . strpart(l, col('.') + len(s:fromword) - 1))
940 endfunc
941
942 func! <SID>SpellDel()
943 exe "aunmenu PopUp." . s:changeitem
944 exe "aunmenu PopUp." . s:additem
945 exe "aunmenu PopUp." . s:ignoreitem
946 aunmenu PopUp.-SpellSep-
947 let s:changeitem = ''
948 endfun
949
950 au! MenuPopup * call <SID>SpellPopup()
951endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000952
953" The GUI toolbar (for MS-Windows and GTK)
954if has("toolbar")
955 an 1.10 ToolBar.Open :browse confirm e<CR>
956 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
957 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
958
959 if has("printer")
960 an 1.40 ToolBar.Print :hardcopy<CR>
961 vunmenu ToolBar.Print
962 vnoremenu ToolBar.Print :hardcopy<CR>
963 elseif has("unix")
964 an 1.40 ToolBar.Print :w !lpr<CR>
965 vunmenu ToolBar.Print
966 vnoremenu ToolBar.Print :w !lpr<CR>
967 endif
968
969 an 1.45 ToolBar.-sep1- <Nop>
970 an 1.50 ToolBar.Undo u
971 an 1.60 ToolBar.Redo <C-R>
972
973 an 1.65 ToolBar.-sep2- <Nop>
974 vnoremenu 1.70 ToolBar.Cut "+x
975 vnoremenu 1.80 ToolBar.Copy "+y
976 cnoremenu 1.80 ToolBar.Copy <C-Y>
977 nnoremenu 1.90 ToolBar.Paste "+gP
978 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +0000979 exe 'vnoremenu <script> ToolBar.Paste ' . s:paste_v_cmd
980 exe 'inoremenu <script> ToolBar.Paste ' . s:paste_i_cmd
Bram Moolenaar071d4272004-06-13 20:20:40 +0000981
982 if !has("gui_athena")
983 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000984 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000985 vunmenu ToolBar.Replace
986 vnoremenu ToolBar.Replace y:promptrepl <C-R>"<CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000987 an 1.110 ToolBar.FindNext n
988 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +0000989 endif
990
Bram Moolenaar071d4272004-06-13 20:20:40 +0000991 an 1.215 ToolBar.-sep5- <Nop>
992 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
993 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
994 an 1.240 ToolBar.RunScript :browse so<CR>
995
996 an 1.245 ToolBar.-sep6- <Nop>
997 an 1.250 ToolBar.Make :make<CR>
998 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
999 an 1.280 ToolBar.TagJump g<C-]>
1000
1001 an 1.295 ToolBar.-sep7- <Nop>
1002 an 1.300 ToolBar.Help :help<CR>
1003 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1004
1005" Only set the tooltips here if not done in a language menu file
1006if exists("*Do_toolbar_tmenu")
1007 call Do_toolbar_tmenu()
1008else
1009 let did_toolbar_tmenu = 1
1010 tmenu ToolBar.Open Open file
1011 tmenu ToolBar.Save Save current file
1012 tmenu ToolBar.SaveAll Save all files
1013 tmenu ToolBar.Print Print
1014 tmenu ToolBar.Undo Undo
1015 tmenu ToolBar.Redo Redo
1016 tmenu ToolBar.Cut Cut to clipboard
1017 tmenu ToolBar.Copy Copy to clipboard
1018 tmenu ToolBar.Paste Paste from Clipboard
1019 if !has("gui_athena")
1020 tmenu ToolBar.Find Find...
1021 tmenu ToolBar.FindNext Find Next
1022 tmenu ToolBar.FindPrev Find Previous
1023 tmenu ToolBar.Replace Find / Replace...
1024 endif
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001025 tmenu ToolBar.LoadSesn Chose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001026 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001027 tmenu ToolBar.RunScript Chose a Vim Script to run
1028 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 Moolenaar280f1262006-01-30 00:14:18 +00001038 let name = escape(v:this_session, ' \t#%$|<>"*?[{`')
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 Moolenaar280f1262006-01-30 00:14:18 +00001050 execute "browse mksession! " . escape(v:this_session, ' \t#%$|<>"*?[{`')
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 Moolenaar3a7c85b2005-02-05 21:39:53 +00001102unlet! s:paste_i_cmd s:paste_v_cmd s:paste_cmd
1103
Bram Moolenaar071d4272004-06-13 20:20:40 +00001104" Restore the previous value of 'cpoptions'.
1105let &cpo = s:cpo_save
1106unlet s:cpo_save
1107
1108" vim: set sw=2 :