blob: 52607235ce0db5693d1c69766df66a33bc7e77bf [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 Moolenaar5a8684e2005-07-30 22:43:24 +00005" Last Change: 2005 Jul 30
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
143 normal `^
144 if @+ != ''
145 normal "+gP
146 endif
147 let c = col(".")
148 normal i
149 if col(".") < c " compensate for i<ESC> moving the cursor left
150 normal l
151 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\.\.\.
201 vnoremenu &Edit.&Find\.\.\. y:promptfind <C-R>"<CR>
202 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
203 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
204 vnoremenu &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>"<CR>
205else
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
215" 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>
279an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
280an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
281an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr! :set lbr! lbr?<CR>
282an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et! :set et! et?<CR>
283an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai! :set ai! ai?<CR>
284an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
285
286" other options
287an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
288an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
289an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
290an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
291an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
292an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
293an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
294
295an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
296an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
297an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
298an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
299an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
300an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
301
302an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
303an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
304fun! s:TextWidth()
305 if !exists("g:menutrans_textwidth_dialog")
306 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
307 endif
308 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
309 if n != ""
310 " remove leading zeros to avoid it being used as an octal number
311 let &tw = substitute(n, "^0*", "", "")
312 endif
313endfun
314
315fun! s:FileFormat()
316 if !exists("g:menutrans_fileformat_dialog")
317 let g:menutrans_fileformat_dialog = "Select format for writing the file"
318 endif
319 if !exists("g:menutrans_fileformat_choices")
320 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
321 endif
322 if &ff == "dos"
323 let def = 2
324 elseif &ff == "mac"
325 let def = 3
326 else
327 let def = 1
328 endif
329 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
330 if n == 1
331 set ff=unix
332 elseif n == 2
333 set ff=dos
334 elseif n == 3
335 set ff=mac
336 endif
337endfun
338
339" Setup the Edit.Color Scheme submenu
340let s:n = globpath(&runtimepath, "colors/*.vim")
341let s:idx = 100
342while strlen(s:n) > 0
343 let s:i = stridx(s:n, "\n")
344 if s:i < 0
345 let s:name = s:n
346 let s:n = ""
347 else
348 let s:name = strpart(s:n, 0, s:i)
349 let s:n = strpart(s:n, s:i + 1, 19999)
350 endif
351 " Ignore case for VMS and windows
352 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
353 exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
354 unlet s:name
355 unlet s:i
356 let s:idx = s:idx + 10
357endwhile
358unlet s:n
359unlet s:idx
360
361" Setup the Edit.Keymap submenu
362if has("keymap")
363 let s:n = globpath(&runtimepath, "keymap/*.vim")
364 if s:n != ""
365 let s:idx = 100
366 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
367 while strlen(s:n) > 0
368 let s:i = stridx(s:n, "\n")
369 if s:i < 0
370 let s:name = s:n
371 let s:n = ""
372 else
373 let s:name = strpart(s:n, 0, s:i)
374 let s:n = strpart(s:n, s:i + 1, 19999)
375 endif
376 " Ignore case for VMS and windows
377 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
378 exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
379 unlet s:name
380 unlet s:i
381 let s:idx = s:idx + 10
382 endwhile
383 unlet s:idx
384 endif
385 unlet s:n
386endif
Bram Moolenaardfccaf02004-12-31 20:56:11 +0000387if 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 +0000388 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
389endif
390
391" Programming menu
392if !exists("g:ctags_command")
393 if has("vms")
394 let g:ctags_command = "mc vim:ctags ."
395 else
396 let g:ctags_command = "ctags -R ."
397 endif
398endif
399
400an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
401vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
402vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
403an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
404an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
405
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000406if has("folding") || has("spell")
407 an 40.330 &Tools.-SEP1- <Nop>
408endif
409
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000410" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000411if has("spell")
412 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
413 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
414 an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s ]s
Bram Moolenaardc27ac12005-07-06 22:35:45 +0000415 an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s [s
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +0000416 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z? z?
417 an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000418 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
419 an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en" :set spl=en spell<CR>
420 an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au" :set spl=en_au spell<CR>
421 an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca" :set spl=en_ca spell<CR>
422 an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb" :set spl=en_gb spell<CR>
423 an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz" :set spl=en_nz spell<CR>
424 an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us" :set spl=en_us spell<CR>
425 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
426
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000427 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000428 func! s:SpellLang()
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000429 for cmd in s:undo_spellang
430 exe "silent! " . cmd
431 endfor
432 let s:undo_spellang = []
433
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000434 if &enc == "iso-8859-15"
435 let enc = "latin1"
436 else
437 let enc = &enc
438 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000439
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000440 let found = 0
441 let s = globpath(&rtp, "spell/*." . enc . ".spl")
442 if s != ""
443 let n = 300
444 for f in split(s, "\n")
445 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000446 if nm != "en" && nm !~ '/'
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000447 let found += 1
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000448 let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
449 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
450 let s:undo_spellang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000451 endif
452 let n += 10
453 endfor
454 endif
455 if found == 0
456 echomsg "Could not find other spell files"
457 elseif found == 1
458 echomsg "Found spell file " . nm
459 else
460 echomsg "Found " . found . " more spell files"
461 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000462 " Need to redo this when 'encoding' is changed.
463 augroup spellmenu
464 au! EncodingChanged * call <SID>SpellLang()
465 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000466 endfun
467
468endif
469
Bram Moolenaar071d4272004-06-13 20:20:40 +0000470" Tools.Fold Menu
471if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000472 " open close folds
473 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
474 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
475 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
476 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
477 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
478 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
479 an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR
480 " fold method
481 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
482 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
483 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
484 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
485 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
486 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
487 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
488 " create and delete folds
489 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
490 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
491 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
492 " moving around in folds
493 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
494 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
495 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
496 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
497 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
498 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
499 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
500 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
501 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
502endif " has folding
503
504if has("diff")
505 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
506 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
507 vunmenu &Tools.&Diff.&Get\ Block
508 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
509 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
510 vunmenu &Tools.&Diff.&Put\ Block
511 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
512endif
513
514an 40.358 &Tools.-SEP2- <Nop>
515an 40.360 &Tools.&Make<Tab>:make :make<CR>
516an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
517an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
518an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
519an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
520an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
521an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
522an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
523an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
524an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
525
526an 40.520 &Tools.-SEP3- <Nop>
527an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
528 \ :call <SID>XxdConv()<CR>
529an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
530 \ :call <SID>XxdBack()<CR>
531
532" Use a function to do the conversion, so that it also works with 'insertmode'
533" set.
534func! s:XxdConv()
535 let mod = &mod
536 if has("vms")
537 %!mc vim:xxd
538 else
539 call s:XxdFind()
540 exe '%!"' . g:xxdprogram . '"'
541 endif
542 if getline(1) =~ "^0000000:" " only if it worked
543 set ft=xxd
544 endif
545 let &mod = mod
546endfun
547
548func! s:XxdBack()
549 let mod = &mod
550 if has("vms")
551 %!mc vim:xxd -r
552 else
553 call s:XxdFind()
554 exe '%!"' . g:xxdprogram . '" -r'
555 endif
556 set ft=
557 doautocmd filetypedetect BufReadPost
558 let &mod = mod
559endfun
560
561func! s:XxdFind()
562 if !exists("g:xxdprogram")
563 " On the PC xxd may not be in the path but in the install directory
564 if (has("win32") || has("dos32")) && !executable("xxd")
565 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
566 else
567 let g:xxdprogram = "xxd"
568 endif
569 endif
570endfun
571
572" Setup the Tools.Compiler submenu
573let s:n = globpath(&runtimepath, "compiler/*.vim")
574let s:idx = 100
575while strlen(s:n) > 0
576 let s:i = stridx(s:n, "\n")
577 if s:i < 0
578 let s:name = s:n
579 let s:n = ""
580 else
581 let s:name = strpart(s:n, 0, s:i)
582 let s:n = strpart(s:n, s:i + 1, 19999)
583 endif
584 " Ignore case for VMS and windows
585 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
Bram Moolenaar045e82d2005-07-08 22:25:33 +0000586 exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000587 unlet s:name
588 unlet s:i
589 let s:idx = s:idx + 10
590endwhile
591unlet s:n
592unlet s:idx
593
594if !exists("no_buffers_menu")
595
596" Buffer list menu -- Setup functions & actions
597
598" wait with building the menu until after loading 'session' files. Makes
599" startup faster.
600let s:bmenu_wait = 1
601
602if !exists("bmenu_priority")
603 let bmenu_priority = 60
604endif
605
606func! s:BMAdd()
607 if s:bmenu_wait == 0
608 " when adding too many buffers, redraw in short format
609 if s:bmenu_count == &menuitems && s:bmenu_short == 0
610 call s:BMShow()
611 else
612 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
613 let s:bmenu_count = s:bmenu_count + 1
614 endif
615 endif
616endfunc
617
618func! s:BMRemove()
619 if s:bmenu_wait == 0
620 let name = expand("<afile>")
621 if isdirectory(name)
622 return
623 endif
624 let munge = <SID>BMMunge(name, expand("<abuf>"))
625
626 if s:bmenu_short == 0
627 exe 'silent! aun &Buffers.' . munge
628 else
629 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
630 endif
631 let s:bmenu_count = s:bmenu_count - 1
632 endif
633endfunc
634
635" Create the buffer menu (delete an existing one first).
636func! s:BMShow(...)
637 let s:bmenu_wait = 1
638 let s:bmenu_short = 1
639 let s:bmenu_count = 0
640 "
641 " get new priority, if exists
642 if a:0 == 1
643 let g:bmenu_priority = a:1
644 endif
645
646 " remove old menu, if exists; keep one entry to avoid a torn off menu to
647 " disappear.
648 silent! unmenu &Buffers
649 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
650 silent! unmenu! &Buffers
651
652 " create new menu; set 'cpo' to include the <CR>
653 let cpo_save = &cpo
654 set cpo&vim
655 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
656 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
657 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
658 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
659 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
660 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
661 let &cpo = cpo_save
662 unmenu &Buffers.Dummy
663
664 " figure out how many buffers there are
665 let buf = 1
666 while buf <= bufnr('$')
667 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
668 \ && !getbufvar(buf, "&bufsecret")
669 let s:bmenu_count = s:bmenu_count + 1
670 endif
671 let buf = buf + 1
672 endwhile
673 if s:bmenu_count <= &menuitems
674 let s:bmenu_short = 0
675 endif
676
677 " iterate through buffer list, adding each buffer to the menu:
678 let buf = 1
679 while buf <= bufnr('$')
680 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
681 \ && !getbufvar(buf, "&bufsecret")
682 call <SID>BMFilename(bufname(buf), buf)
683 endif
684 let buf = buf + 1
685 endwhile
686 let s:bmenu_wait = 0
687 aug buffer_list
688 au!
689 au BufCreate,BufFilePost * call <SID>BMAdd()
690 au BufDelete,BufFilePre * call <SID>BMRemove()
691 aug END
692endfunc
693
694func! s:BMHash(name)
695 " Make name all upper case, so that chars are between 32 and 96
696 let nm = substitute(a:name, ".*", '\U\0', "")
697 if has("ebcdic")
698 " HACK: Replace all non alphabetics with 'Z'
699 " Just to make it work for now.
700 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
701 let sp = char2nr('A') - 1
702 else
703 let sp = char2nr(' ')
704 endif
705 " convert first six chars into a number for sorting:
706 return (char2nr(nm[0]) - sp) * 0x800000 + (char2nr(nm[1]) - sp) * 0x20000 + (char2nr(nm[2]) - sp) * 0x1000 + (char2nr(nm[3]) - sp) * 0x80 + (char2nr(nm[4]) - sp) * 0x20 + (char2nr(nm[5]) - sp)
707endfunc
708
709func! s:BMHash2(name)
710 let nm = substitute(a:name, ".", '\L\0', "")
711 " Not exactly right for EBCDIC...
712 if nm[0] < 'a' || nm[0] > 'z'
713 return '&others.'
714 elseif nm[0] <= 'd'
715 return '&abcd.'
716 elseif nm[0] <= 'h'
717 return '&efgh.'
718 elseif nm[0] <= 'l'
719 return '&ijkl.'
720 elseif nm[0] <= 'p'
721 return '&mnop.'
722 elseif nm[0] <= 't'
723 return '&qrst.'
724 else
725 return '&u-z.'
726 endif
727endfunc
728
729" insert a buffer name into the buffer menu:
730func! s:BMFilename(name, num)
731 if isdirectory(a:name)
732 return
733 endif
734 let munge = <SID>BMMunge(a:name, a:num)
735 let hash = <SID>BMHash(munge)
736 if s:bmenu_short == 0
737 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
738 else
739 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
740 endif
741 " set 'cpo' to include the <CR>
742 let cpo_save = &cpo
743 set cpo&vim
744 exe name . ' :confirm b' . a:num . '<CR>'
745 let &cpo = cpo_save
746endfunc
747
748" Truncate a long path to fit it in a menu item.
749if !exists("g:bmenu_max_pathlen")
750 let g:bmenu_max_pathlen = 35
751endif
752func! s:BMTruncName(fname)
753 let name = a:fname
754 if g:bmenu_max_pathlen < 5
755 let name = ""
756 else
757 let len = strlen(name)
758 if len > g:bmenu_max_pathlen
759 let amountl = (g:bmenu_max_pathlen / 2) - 2
760 let amountr = g:bmenu_max_pathlen - amountl - 3
761 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
762 let left = substitute(name, pattern, '\1', '')
763 let right = substitute(name, pattern, '\2', '')
764 if strlen(left) + strlen(right) < len
765 let name = left . '...' . right
766 endif
767 endif
768 endif
769 return name
770endfunc
771
772func! s:BMMunge(fname, bnum)
773 let name = a:fname
774 if name == ''
775 if !exists("g:menutrans_no_file")
776 let g:menutrans_no_file = "[No file]"
777 endif
778 let name = g:menutrans_no_file
779 else
780 let name = fnamemodify(name, ':p:~')
781 endif
782 " detach file name and separate it out:
783 let name2 = fnamemodify(name, ':t')
784 if a:bnum >= 0
785 let name2 = name2 . ' (' . a:bnum . ')'
786 endif
787 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
788 let name = escape(name, "\\. \t|")
789 let name = substitute(name, "&", "&&", "g")
790 let name = substitute(name, "\n", "^@", "g")
791 return name
792endfunc
793
794" When just starting Vim, load the buffer menu later
795if has("vim_starting")
796 augroup LoadBufferMenu
797 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
798 au VimEnter * au! LoadBufferMenu
799 augroup END
800else
801 call <SID>BMShow()
802endif
803
804endif " !exists("no_buffers_menu")
805
806" Window menu
807an 70.300 &Window.&New<Tab>^Wn <C-W>n
808an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
809an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
810an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
811if has("vertsplit")
812 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
813 if !exists("*MenuExplOpen")
814 fun MenuExplOpen()
815 if @% == ""
816 20vsp .
817 else
818 exe "20vsp " . expand("%:p:h")
819 endif
820 endfun
821 endif
822endif
823an 70.335 &Window.-SEP1- <Nop>
824an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
825an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
826an 70.350 &Window.-SEP2- <Nop>
827an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
828an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
829an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
830an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
831an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
832an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
833an 70.365 &Window.-SEP3- <Nop>
834an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
835an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
836an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
837an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
838an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
839
840" The popup menu
841an 1.10 PopUp.&Undo u
842an 1.15 PopUp.-SEP1- <Nop>
843vnoremenu 1.20 PopUp.Cu&t "+x
844vnoremenu 1.30 PopUp.&Copy "+y
845cnoremenu 1.30 PopUp.&Copy <C-Y>
846nnoremenu 1.40 PopUp.&Paste "+gP
847cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +0000848exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . s:paste_v_cmd
849exe 'inoremenu <script> 1.40 PopUp.&Paste ' . s:paste_i_cmd
Bram Moolenaar071d4272004-06-13 20:20:40 +0000850vnoremenu 1.50 PopUp.&Delete x
851an 1.55 PopUp.-SEP2- <Nop>
852vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000853
854nnoremenu 1.70 PopUp.Select\ &Word vaw
855onoremenu 1.70 PopUp.Select\ &Word aw
856vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
857inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
858cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
859
860nnoremenu 1.73 PopUp.Select\ &Sentence vas
861onoremenu 1.73 PopUp.Select\ &Sentence as
862vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
863inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
864cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
865
866nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
867onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
868vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
869inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
870cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
871
872nnoremenu 1.80 PopUp.Select\ &Line V
873onoremenu 1.80 PopUp.Select\ &Line <C-C>V
874vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
875inoremenu 1.80 PopUp.Select\ &Line <C-O>V
876cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
877
878nnoremenu 1.90 PopUp.Select\ &Block <C-V>
879onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
880vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
881inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
882cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
883
Bram Moolenaar071d4272004-06-13 20:20:40 +0000884noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
885inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
886cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
887
Bram Moolenaar45360022005-07-21 21:08:21 +0000888if has("spell")
889 " Spell suggestions in the popup menu. Note that this will slow down the
890 " appearance of the menu!
891 func! <SID>SpellPopup()
892 if exists("s:changeitem") && s:changeitem != ''
893 call <SID>SpellDel()
894 endif
Bram Moolenaard8c00872005-07-22 21:52:15 +0000895 if !&spell || &spelllang == ''
896 return
897 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000898
899 let curcol = col('.')
900 let w = spellbadword()
901 if col('.') > curcol " don't use word after the cursor
902 let w = ''
903 call cursor(0, curcol) " put the cursor back where it was
904 endif
905 if w != ''
906 let s:suglist = spellsuggest(w, 10)
907 if len(s:suglist) <= 0
908 call cursor(0, curcol) " put the cursor back where it was
909 else
910 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
911 let s:fromword = w
912 let pri = 1
913 for sug in s:suglist
914 exe 'amenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
915 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
916 let pri += 1
917 endfor
918
919 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
920 exe 'amenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
921
922 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
923 exe 'amenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
924
925 amenu 1.8 PopUp.-SpellSep- :
926 endif
927 endif
928 endfunc
929
930 func! <SID>SpellReplace(n)
931 let l = getline('.')
932 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
933 \ . strpart(l, col('.') + len(s:fromword) - 1))
934 endfunc
935
936 func! <SID>SpellDel()
937 exe "aunmenu PopUp." . s:changeitem
938 exe "aunmenu PopUp." . s:additem
939 exe "aunmenu PopUp." . s:ignoreitem
940 aunmenu PopUp.-SpellSep-
941 let s:changeitem = ''
942 endfun
943
944 au! MenuPopup * call <SID>SpellPopup()
945endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000946
947" The GUI toolbar (for MS-Windows and GTK)
948if has("toolbar")
949 an 1.10 ToolBar.Open :browse confirm e<CR>
950 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
951 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
952
953 if has("printer")
954 an 1.40 ToolBar.Print :hardcopy<CR>
955 vunmenu ToolBar.Print
956 vnoremenu ToolBar.Print :hardcopy<CR>
957 elseif has("unix")
958 an 1.40 ToolBar.Print :w !lpr<CR>
959 vunmenu ToolBar.Print
960 vnoremenu ToolBar.Print :w !lpr<CR>
961 endif
962
963 an 1.45 ToolBar.-sep1- <Nop>
964 an 1.50 ToolBar.Undo u
965 an 1.60 ToolBar.Redo <C-R>
966
967 an 1.65 ToolBar.-sep2- <Nop>
968 vnoremenu 1.70 ToolBar.Cut "+x
969 vnoremenu 1.80 ToolBar.Copy "+y
970 cnoremenu 1.80 ToolBar.Copy <C-Y>
971 nnoremenu 1.90 ToolBar.Paste "+gP
972 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +0000973 exe 'vnoremenu <script> ToolBar.Paste ' . s:paste_v_cmd
974 exe 'inoremenu <script> ToolBar.Paste ' . s:paste_i_cmd
Bram Moolenaar071d4272004-06-13 20:20:40 +0000975
976 if !has("gui_athena")
977 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000978 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000979 vunmenu ToolBar.Replace
980 vnoremenu ToolBar.Replace y:promptrepl <C-R>"<CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000981 an 1.110 ToolBar.FindNext n
982 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +0000983 endif
984
Bram Moolenaar071d4272004-06-13 20:20:40 +0000985 an 1.215 ToolBar.-sep5- <Nop>
986 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
987 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
988 an 1.240 ToolBar.RunScript :browse so<CR>
989
990 an 1.245 ToolBar.-sep6- <Nop>
991 an 1.250 ToolBar.Make :make<CR>
992 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
993 an 1.280 ToolBar.TagJump g<C-]>
994
995 an 1.295 ToolBar.-sep7- <Nop>
996 an 1.300 ToolBar.Help :help<CR>
997 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
998
999" Only set the tooltips here if not done in a language menu file
1000if exists("*Do_toolbar_tmenu")
1001 call Do_toolbar_tmenu()
1002else
1003 let did_toolbar_tmenu = 1
1004 tmenu ToolBar.Open Open file
1005 tmenu ToolBar.Save Save current file
1006 tmenu ToolBar.SaveAll Save all files
1007 tmenu ToolBar.Print Print
1008 tmenu ToolBar.Undo Undo
1009 tmenu ToolBar.Redo Redo
1010 tmenu ToolBar.Cut Cut to clipboard
1011 tmenu ToolBar.Copy Copy to clipboard
1012 tmenu ToolBar.Paste Paste from Clipboard
1013 if !has("gui_athena")
1014 tmenu ToolBar.Find Find...
1015 tmenu ToolBar.FindNext Find Next
1016 tmenu ToolBar.FindPrev Find Previous
1017 tmenu ToolBar.Replace Find / Replace...
1018 endif
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001019 tmenu ToolBar.LoadSesn Chose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001020 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001021 tmenu ToolBar.RunScript Chose a Vim Script to run
1022 tmenu ToolBar.Make Make current project (:make)
1023 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001024 tmenu ToolBar.TagJump Jump to tag under cursor
1025 tmenu ToolBar.Help Vim Help
1026 tmenu ToolBar.FindHelp Search Vim Help
1027endif
1028
1029" Select a session to load; default to current session name if present
1030fun! s:LoadVimSesn()
1031 if strlen(v:this_session) > 0
1032 let name = v:this_session
1033 else
1034 let name = "Session.vim"
1035 endif
1036 execute "browse so " . name
1037endfun
1038
1039" Select a session to save; default to current session name if present
1040fun! s:SaveVimSesn()
1041 if strlen(v:this_session) == 0
1042 let v:this_session = "Session.vim"
1043 endif
1044 execute "browse mksession! " . v:this_session
1045endfun
1046
1047endif
1048
1049endif " !exists("did_install_default_menus")
1050
1051" Define these items always, so that syntax can be switched on when it wasn't.
1052" But skip them when the Syntax menu was disabled by the user.
1053if !exists("did_install_syntax_menu")
1054 an 50.212 &Syntax.&Manual :syn manual<CR>
1055 an 50.214 &Syntax.A&utomatic :syn on<CR>
1056 an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1057 if !exists("*s:SynOnOff")
1058 fun s:SynOnOff()
1059 if has("syntax_items")
1060 syn clear
1061 else
1062 if !exists("g:syntax_on")
1063 syn manual
1064 endif
1065 set syn=ON
1066 endif
1067 endfun
1068 endif
1069endif
1070
1071
1072" Install the Syntax menu only when filetype.vim has been loaded or when
1073" manual syntax highlighting is enabled.
1074" Avoid installing the Syntax menu twice.
1075if (exists("did_load_filetypes") || exists("syntax_on"))
1076 \ && !exists("did_install_syntax_menu")
1077 let did_install_syntax_menu = 1
1078
1079" Skip setting up the individual syntax selection menus unless
1080" do_syntax_sel_menu is defined (it takes quite a bit of time).
1081if exists("do_syntax_sel_menu")
1082 runtime! synmenu.vim
1083else
1084 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>
1085 an 50.195 &Syntax.-SEP1- <Nop>
1086endif
1087
1088an 50.210 &Syntax.&Off :syn off<CR>
1089an 50.700 &Syntax.-SEP3- <Nop>
1090an 50.710 &Syntax.Co&lor\ test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1091an 50.720 &Syntax.&Highlight\ test :runtime syntax/hitest.vim<CR>
1092an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1093
1094endif " !exists("did_install_syntax_menu")
1095
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00001096unlet! s:paste_i_cmd s:paste_v_cmd s:paste_cmd
1097
Bram Moolenaar071d4272004-06-13 20:20:40 +00001098" Restore the previous value of 'cpoptions'.
1099let &cpo = s:cpo_save
1100unlet s:cpo_save
1101
1102" vim: set sw=2 :