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