blob: f0c0d699c5dd5c2367dd18df9eb514b3232471bd [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 Moolenaar9273c732007-11-29 16:46:44 +00005" Last Change: 2007 Nov 19
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7" Note that ":an" (short for ":anoremenu") is often used to make a menu work
8" in all modes and avoid side effects from mappings defined by the user.
9
10" Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise
11" <CR> would not be recognized. See ":help 'cpoptions'".
12let s:cpo_save = &cpo
13set cpo&vim
14
15" Avoid installing the menus twice
16if !exists("did_install_default_menus")
17let did_install_default_menus = 1
18
19
20if exists("v:lang") || &langmenu != ""
21 " Try to find a menu translation file for the current language.
22 if &langmenu != ""
23 if &langmenu =~ "none"
24 let s:lang = ""
25 else
26 let s:lang = &langmenu
27 endif
28 else
29 let s:lang = v:lang
30 endif
31 " A language name must be at least two characters, don't accept "C"
32 if strlen(s:lang) > 1
33 " When the language does not include the charset add 'encoding'
34 if s:lang =~ '^\a\a$\|^\a\a_\a\a$'
35 let s:lang = s:lang . '.' . &enc
36 endif
37
38 " We always use a lowercase name.
39 " Change "iso-8859" to "iso_8859" and "iso8859" to "iso_8859", some
40 " systems appear to use this.
41 " Change spaces to underscores.
42 let s:lang = substitute(tolower(s:lang), '\.iso-', ".iso_", "")
43 let s:lang = substitute(s:lang, '\.iso8859', ".iso_8859", "")
44 let s:lang = substitute(s:lang, " ", "_", "g")
45 " Remove "@euro", otherwise "LC_ALL=de_DE@euro gvim" will show English menus
46 let s:lang = substitute(s:lang, "@euro", "", "")
47 " Change "iso_8859-1" and "iso_8859-15" to "latin1", we always use the
48 " same menu file for them.
49 let s:lang = substitute(s:lang, 'iso_8859-15\=$', "latin1", "")
50 menutrans clear
51 exe "runtime! lang/menu_" . s:lang . ".vim"
52
53 if !exists("did_menu_trans")
54 " There is no exact match, try matching with a wildcard added
55 " (e.g. find menu_de_de.iso_8859-1.vim if s:lang == de_DE).
56 let s:lang = substitute(s:lang, '\.[^.]*', "", "")
Bram Moolenaar05159a02005-02-26 23:04:13 +000057 exe "runtime! lang/menu_" . s:lang . "[^a-z]*vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000058
Bram Moolenaare2cc9702005-03-15 22:43:58 +000059 if !exists("did_menu_trans") && strlen($LANG) > 1 && s:lang !~ '^en_us'
Bram Moolenaar071d4272004-06-13 20:20:40 +000060 " On windows locale names are complicated, try using $LANG, it might
Bram Moolenaare2cc9702005-03-15 22:43:58 +000061 " have been set by set_init_1(). But don't do this for "en" or "en_us".
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000062 " But don't match "slovak" when $LANG is "sl".
63 exe "runtime! lang/menu_" . tolower($LANG) . "[^a-z]*vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000064 endif
65 endif
66 endif
67endif
68
69
70" Help menu
71an 9999.10 &Help.&Overview<Tab><F1> :help<CR>
72an 9999.20 &Help.&User\ Manual :help usr_toc<CR>
73an 9999.30 &Help.&How-to\ links :help how-to<CR>
74an <silent> 9999.40 &Help.&Find\.\.\. :call <SID>Helpfind()<CR>
75an 9999.45 &Help.-sep1- <Nop>
76an 9999.50 &Help.&Credits :help credits<CR>
77an 9999.60 &Help.Co&pying :help copying<CR>
78an 9999.70 &Help.&Sponsor/Register :help sponsor<CR>
79an 9999.70 &Help.O&rphans :help kcc<CR>
80an 9999.75 &Help.-sep2- <Nop>
81an 9999.80 &Help.&Version :version<CR>
82an 9999.90 &Help.&About :intro<CR>
83
84fun! s:Helpfind()
85 if !exists("g:menutrans_help_dialog")
86 let g:menutrans_help_dialog = "Enter a command or word to find help on:\n\nPrepend i_ for Input mode commands (e.g.: i_CTRL-X)\nPrepend c_ for command-line editing commands (e.g.: c_<Del>)\nPrepend ' for an option name (e.g.: 'shiftwidth')"
87 endif
88 let h = inputdialog(g:menutrans_help_dialog)
89 if h != ""
90 let v:errmsg = ""
91 silent! exe "help " . h
92 if v:errmsg != ""
93 echo v:errmsg
94 endif
95 endif
96endfun
97
98" File menu
99an 10.310 &File.&Open\.\.\.<Tab>:e :browse confirm e<CR>
100an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp :browse sp<CR>
Bram Moolenaar5c8837f2006-02-25 21:52:33 +0000101an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew :browse tabnew<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102an 10.325 &File.&New<Tab>:enew :confirm enew<CR>
103an <silent> 10.330 &File.&Close<Tab>:close
104 \ :if winheight(2) < 0 <Bar>
105 \ confirm enew <Bar>
106 \ else <Bar>
107 \ confirm close <Bar>
108 \ endif<CR>
109an 10.335 &File.-SEP1- <Nop>
110an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
111an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR>
112
113if has("diff")
114 an 10.400 &File.-SEP2- <Nop>
115 an 10.410 &File.Split\ &Diff\ with\.\.\. :browse vert diffsplit<CR>
116 an 10.420 &File.Split\ Patched\ &By\.\.\. :browse vert diffpatch<CR>
117endif
118
119if has("printer")
120 an 10.500 &File.-SEP3- <Nop>
121 an 10.510 &File.&Print :hardcopy<CR>
122 vunmenu &File.&Print
123 vnoremenu &File.&Print :hardcopy<CR>
124elseif has("unix")
125 an 10.500 &File.-SEP3- <Nop>
126 an 10.510 &File.&Print :w !lpr<CR>
127 vunmenu &File.&Print
128 vnoremenu &File.&Print :w !lpr<CR>
129endif
130an 10.600 &File.-SEP4- <Nop>
131an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR>
132an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR>
133
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134func! <SID>SelectAll()
135 exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
136endfunc
137
138
139" Edit menu
140an 20.310 &Edit.&Undo<Tab>u u
141an 20.320 &Edit.&Redo<Tab>^R <C-R>
142an 20.330 &Edit.Rep&eat<Tab>\. .
143
144an 20.335 &Edit.-SEP1- <Nop>
145vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
146vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
147cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
148nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
149cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000150exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v']
151exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000152nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
153inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
154nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
155inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
156if has("win32") || has("win16")
157 vnoremenu 20.390 &Edit.&Delete<Tab>x x
158endif
159noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
160inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
161cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
162
163an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar843ee412004-06-30 16:16:41 +0000164if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000165 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
166 vunmenu &Edit.&Find\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000167 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000168 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
169 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000170 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171else
172 an 20.410 &Edit.&Find<Tab>/ /
173 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
174 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
175 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
176endif
177
178an 20.425 &Edit.-SEP3- <Nop>
179an 20.430 &Edit.Settings\ &Window :options<CR>
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000180an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
181
182fun! s:EditVimrc()
183 if $MYVIMRC != ''
184 let fname = "$MYVIMRC"
185 elseif has("win32") || has("dos32") || has("dos16") || has("os2")
186 if $HOME != ''
187 let fname = "$HOME/_vimrc"
188 else
189 let fname = "$VIM/_vimrc"
190 endif
191 elseif has("amiga")
192 let fname = "s:.vimrc"
193 else
194 let fname = "$HOME/.vimrc"
195 endif
196 if &mod
197 exe "split " . fname
198 else
199 exe "edit " . fname
200 endif
201endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000202
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000203fun! s:FixFText()
204 " Fix text in nameless register to be used with :promptfind.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000205 return substitute(@", "[\r\n]", '\\n', 'g')
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000206endfun
207
Bram Moolenaar071d4272004-06-13 20:20:40 +0000208" Edit/Global Settings
209an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
210an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic! :set ic! ic?<CR>
211an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm! :set sm! sm?<CR>
212
213an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\ :set so=1<CR>
214an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\ :set so=2<CR>
215an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\ :set so=3<CR>
216an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\ :set so=4<CR>
217an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\ :set so=5<CR>
218an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\ :set so=7<CR>
219an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\ :set so=10<CR>
220an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\ :set so=100<CR>
221
222an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
223an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
224an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
225an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
226an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
227an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
228an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp! :set cp!<CR>
229an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
230an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
231"
232" GUI options
233an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
234an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
235an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
236an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
237an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
238
239fun! s:SearchP()
240 if !exists("g:menutrans_path_dialog")
241 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
242 endif
243 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
244 if n != ""
245 let &path = substitute(n, ' ', '\\ ', 'g')
246 endif
247endfun
248
249fun! s:TagFiles()
250 if !exists("g:menutrans_tags_dialog")
251 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
252 endif
253 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
254 if n != ""
255 let &tags = substitute(n, ' ', '\\ ', 'g')
256 endif
257endfun
258
259fun! s:ToggleGuiOption(option)
260 " If a:option is already set in guioptions, then we want to remove it
261 if match(&guioptions, "\\C" . a:option) > -1
262 exec "set go-=" . a:option
263 else
264 exec "set go+=" . a:option
265 endif
266endfun
267
268" Edit/File Settings
269
270" Boolean options
271an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
272an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
273an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
274an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr! :set lbr! lbr?<CR>
275an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et! :set et! et?<CR>
276an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai! :set ai! ai?<CR>
277an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
278
279" other options
280an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
281an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
282an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
283an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
284an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
285an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
286an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
287
288an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
289an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
290an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
291an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
292an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
293an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
294
295an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
296an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
297fun! s:TextWidth()
298 if !exists("g:menutrans_textwidth_dialog")
299 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
300 endif
301 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
302 if n != ""
303 " remove leading zeros to avoid it being used as an octal number
304 let &tw = substitute(n, "^0*", "", "")
305 endif
306endfun
307
308fun! s:FileFormat()
309 if !exists("g:menutrans_fileformat_dialog")
310 let g:menutrans_fileformat_dialog = "Select format for writing the file"
311 endif
312 if !exists("g:menutrans_fileformat_choices")
313 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
314 endif
315 if &ff == "dos"
316 let def = 2
317 elseif &ff == "mac"
318 let def = 3
319 else
320 let def = 1
321 endif
322 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
323 if n == 1
324 set ff=unix
325 elseif n == 2
326 set ff=dos
327 elseif n == 3
328 set ff=mac
329 endif
330endfun
331
332" Setup the Edit.Color Scheme submenu
333let s:n = globpath(&runtimepath, "colors/*.vim")
334let s:idx = 100
335while strlen(s:n) > 0
336 let s:i = stridx(s:n, "\n")
337 if s:i < 0
338 let s:name = s:n
339 let s:n = ""
340 else
341 let s:name = strpart(s:n, 0, s:i)
342 let s:n = strpart(s:n, s:i + 1, 19999)
343 endif
344 " Ignore case for VMS and windows
345 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
346 exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
347 unlet s:name
348 unlet s:i
349 let s:idx = s:idx + 10
350endwhile
351unlet s:n
352unlet s:idx
353
354" Setup the Edit.Keymap submenu
355if has("keymap")
356 let s:n = globpath(&runtimepath, "keymap/*.vim")
357 if s:n != ""
358 let s:idx = 100
359 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
360 while strlen(s:n) > 0
361 let s:i = stridx(s:n, "\n")
362 if s:i < 0
363 let s:name = s:n
364 let s:n = ""
365 else
366 let s:name = strpart(s:n, 0, s:i)
367 let s:n = strpart(s:n, s:i + 1, 19999)
368 endif
369 " Ignore case for VMS and windows
370 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
371 exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
372 unlet s:name
373 unlet s:i
374 let s:idx = s:idx + 10
375 endwhile
376 unlet s:idx
377 endif
378 unlet s:n
379endif
Bram Moolenaardfccaf02004-12-31 20:56:11 +0000380if 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 +0000381 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
382endif
383
384" Programming menu
385if !exists("g:ctags_command")
386 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000387 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000388 else
389 let g:ctags_command = "ctags -R ."
390 endif
391endif
392
393an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
394vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
395vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
396an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
397an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
398
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000399if has("folding") || has("spell")
400 an 40.330 &Tools.-SEP1- <Nop>
401endif
402
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000403" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000404if has("spell")
405 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
406 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
407 an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s ]s
Bram Moolenaardc27ac12005-07-06 22:35:45 +0000408 an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000409 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +0000410 an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000411 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
412 an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en" :set spl=en spell<CR>
413 an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au" :set spl=en_au spell<CR>
414 an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca" :set spl=en_ca spell<CR>
415 an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb" :set spl=en_gb spell<CR>
416 an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz" :set spl=en_nz spell<CR>
417 an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us" :set spl=en_us spell<CR>
418 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
419
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000420 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000421 func! s:SpellLang()
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000422 for cmd in s:undo_spellang
423 exe "silent! " . cmd
424 endfor
425 let s:undo_spellang = []
426
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000427 if &enc == "iso-8859-15"
428 let enc = "latin1"
429 else
430 let enc = &enc
431 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000432
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000433 let found = 0
434 let s = globpath(&rtp, "spell/*." . enc . ".spl")
435 if s != ""
436 let n = 300
437 for f in split(s, "\n")
438 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000439 if nm != "en" && nm !~ '/'
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000440 let found += 1
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000441 let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
442 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
443 let s:undo_spellang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000444 endif
445 let n += 10
446 endfor
447 endif
448 if found == 0
449 echomsg "Could not find other spell files"
450 elseif found == 1
451 echomsg "Found spell file " . nm
452 else
453 echomsg "Found " . found . " more spell files"
454 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000455 " Need to redo this when 'encoding' is changed.
456 augroup spellmenu
457 au! EncodingChanged * call <SID>SpellLang()
458 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000459 endfun
460
461endif
462
Bram Moolenaar071d4272004-06-13 20:20:40 +0000463" Tools.Fold Menu
464if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000465 " open close folds
466 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
467 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
468 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
469 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
470 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
471 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
472 an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR
473 " fold method
474 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
475 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
476 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
477 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
478 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
479 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
480 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
481 " create and delete folds
482 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
483 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
484 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
485 " moving around in folds
486 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
487 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
488 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
489 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
490 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
491 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
492 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
493 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
494 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
495endif " has folding
496
497if has("diff")
498 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
499 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
500 vunmenu &Tools.&Diff.&Get\ Block
501 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
502 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
503 vunmenu &Tools.&Diff.&Put\ Block
504 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
505endif
506
507an 40.358 &Tools.-SEP2- <Nop>
508an 40.360 &Tools.&Make<Tab>:make :make<CR>
509an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
510an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
511an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
512an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
513an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
514an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
515an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
516an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
517an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
518
519an 40.520 &Tools.-SEP3- <Nop>
520an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
521 \ :call <SID>XxdConv()<CR>
522an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
523 \ :call <SID>XxdBack()<CR>
524
525" Use a function to do the conversion, so that it also works with 'insertmode'
526" set.
527func! s:XxdConv()
528 let mod = &mod
529 if has("vms")
530 %!mc vim:xxd
531 else
532 call s:XxdFind()
533 exe '%!"' . g:xxdprogram . '"'
534 endif
535 if getline(1) =~ "^0000000:" " only if it worked
536 set ft=xxd
537 endif
538 let &mod = mod
539endfun
540
541func! s:XxdBack()
542 let mod = &mod
543 if has("vms")
544 %!mc vim:xxd -r
545 else
546 call s:XxdFind()
547 exe '%!"' . g:xxdprogram . '" -r'
548 endif
549 set ft=
550 doautocmd filetypedetect BufReadPost
551 let &mod = mod
552endfun
553
554func! s:XxdFind()
555 if !exists("g:xxdprogram")
556 " On the PC xxd may not be in the path but in the install directory
557 if (has("win32") || has("dos32")) && !executable("xxd")
558 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
559 else
560 let g:xxdprogram = "xxd"
561 endif
562 endif
563endfun
564
565" Setup the Tools.Compiler submenu
566let s:n = globpath(&runtimepath, "compiler/*.vim")
567let s:idx = 100
568while strlen(s:n) > 0
569 let s:i = stridx(s:n, "\n")
570 if s:i < 0
571 let s:name = s:n
572 let s:n = ""
573 else
574 let s:name = strpart(s:n, 0, s:i)
575 let s:n = strpart(s:n, s:i + 1, 19999)
576 endif
577 " Ignore case for VMS and windows
578 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
Bram Moolenaar045e82d2005-07-08 22:25:33 +0000579 exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000580 unlet s:name
581 unlet s:i
582 let s:idx = s:idx + 10
583endwhile
584unlet s:n
585unlet s:idx
586
587if !exists("no_buffers_menu")
588
589" Buffer list menu -- Setup functions & actions
590
591" wait with building the menu until after loading 'session' files. Makes
592" startup faster.
593let s:bmenu_wait = 1
594
595if !exists("bmenu_priority")
596 let bmenu_priority = 60
597endif
598
599func! s:BMAdd()
600 if s:bmenu_wait == 0
601 " when adding too many buffers, redraw in short format
602 if s:bmenu_count == &menuitems && s:bmenu_short == 0
603 call s:BMShow()
604 else
605 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
606 let s:bmenu_count = s:bmenu_count + 1
607 endif
608 endif
609endfunc
610
611func! s:BMRemove()
612 if s:bmenu_wait == 0
613 let name = expand("<afile>")
614 if isdirectory(name)
615 return
616 endif
617 let munge = <SID>BMMunge(name, expand("<abuf>"))
618
619 if s:bmenu_short == 0
620 exe 'silent! aun &Buffers.' . munge
621 else
622 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
623 endif
624 let s:bmenu_count = s:bmenu_count - 1
625 endif
626endfunc
627
628" Create the buffer menu (delete an existing one first).
629func! s:BMShow(...)
630 let s:bmenu_wait = 1
631 let s:bmenu_short = 1
632 let s:bmenu_count = 0
633 "
634 " get new priority, if exists
635 if a:0 == 1
636 let g:bmenu_priority = a:1
637 endif
638
639 " remove old menu, if exists; keep one entry to avoid a torn off menu to
640 " disappear.
641 silent! unmenu &Buffers
642 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
643 silent! unmenu! &Buffers
644
645 " create new menu; set 'cpo' to include the <CR>
646 let cpo_save = &cpo
647 set cpo&vim
648 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
649 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
650 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
651 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
652 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
653 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
654 let &cpo = cpo_save
655 unmenu &Buffers.Dummy
656
657 " figure out how many buffers there are
658 let buf = 1
659 while buf <= bufnr('$')
660 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000661 let s:bmenu_count = s:bmenu_count + 1
662 endif
663 let buf = buf + 1
664 endwhile
665 if s:bmenu_count <= &menuitems
666 let s:bmenu_short = 0
667 endif
668
669 " iterate through buffer list, adding each buffer to the menu:
670 let buf = 1
671 while buf <= bufnr('$')
672 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000673 call <SID>BMFilename(bufname(buf), buf)
674 endif
675 let buf = buf + 1
676 endwhile
677 let s:bmenu_wait = 0
678 aug buffer_list
679 au!
680 au BufCreate,BufFilePost * call <SID>BMAdd()
681 au BufDelete,BufFilePre * call <SID>BMRemove()
682 aug END
683endfunc
684
685func! s:BMHash(name)
686 " Make name all upper case, so that chars are between 32 and 96
687 let nm = substitute(a:name, ".*", '\U\0', "")
688 if has("ebcdic")
689 " HACK: Replace all non alphabetics with 'Z'
690 " Just to make it work for now.
691 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
692 let sp = char2nr('A') - 1
693 else
694 let sp = char2nr(' ')
695 endif
696 " convert first six chars into a number for sorting:
697 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)
698endfunc
699
700func! s:BMHash2(name)
701 let nm = substitute(a:name, ".", '\L\0', "")
702 " Not exactly right for EBCDIC...
703 if nm[0] < 'a' || nm[0] > 'z'
704 return '&others.'
705 elseif nm[0] <= 'd'
706 return '&abcd.'
707 elseif nm[0] <= 'h'
708 return '&efgh.'
709 elseif nm[0] <= 'l'
710 return '&ijkl.'
711 elseif nm[0] <= 'p'
712 return '&mnop.'
713 elseif nm[0] <= 't'
714 return '&qrst.'
715 else
716 return '&u-z.'
717 endif
718endfunc
719
720" insert a buffer name into the buffer menu:
721func! s:BMFilename(name, num)
722 if isdirectory(a:name)
723 return
724 endif
725 let munge = <SID>BMMunge(a:name, a:num)
726 let hash = <SID>BMHash(munge)
727 if s:bmenu_short == 0
728 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
729 else
730 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
731 endif
732 " set 'cpo' to include the <CR>
733 let cpo_save = &cpo
734 set cpo&vim
735 exe name . ' :confirm b' . a:num . '<CR>'
736 let &cpo = cpo_save
737endfunc
738
739" Truncate a long path to fit it in a menu item.
740if !exists("g:bmenu_max_pathlen")
741 let g:bmenu_max_pathlen = 35
742endif
743func! s:BMTruncName(fname)
744 let name = a:fname
745 if g:bmenu_max_pathlen < 5
746 let name = ""
747 else
748 let len = strlen(name)
749 if len > g:bmenu_max_pathlen
750 let amountl = (g:bmenu_max_pathlen / 2) - 2
751 let amountr = g:bmenu_max_pathlen - amountl - 3
752 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
753 let left = substitute(name, pattern, '\1', '')
754 let right = substitute(name, pattern, '\2', '')
755 if strlen(left) + strlen(right) < len
756 let name = left . '...' . right
757 endif
758 endif
759 endif
760 return name
761endfunc
762
763func! s:BMMunge(fname, bnum)
764 let name = a:fname
765 if name == ''
766 if !exists("g:menutrans_no_file")
767 let g:menutrans_no_file = "[No file]"
768 endif
769 let name = g:menutrans_no_file
770 else
771 let name = fnamemodify(name, ':p:~')
772 endif
773 " detach file name and separate it out:
774 let name2 = fnamemodify(name, ':t')
775 if a:bnum >= 0
776 let name2 = name2 . ' (' . a:bnum . ')'
777 endif
778 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
779 let name = escape(name, "\\. \t|")
780 let name = substitute(name, "&", "&&", "g")
781 let name = substitute(name, "\n", "^@", "g")
782 return name
783endfunc
784
785" When just starting Vim, load the buffer menu later
786if has("vim_starting")
787 augroup LoadBufferMenu
788 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
789 au VimEnter * au! LoadBufferMenu
790 augroup END
791else
792 call <SID>BMShow()
793endif
794
795endif " !exists("no_buffers_menu")
796
797" Window menu
798an 70.300 &Window.&New<Tab>^Wn <C-W>n
799an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
800an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
801an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
802if has("vertsplit")
803 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
804 if !exists("*MenuExplOpen")
805 fun MenuExplOpen()
806 if @% == ""
807 20vsp .
808 else
809 exe "20vsp " . expand("%:p:h")
810 endif
811 endfun
812 endif
813endif
814an 70.335 &Window.-SEP1- <Nop>
815an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
816an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
817an 70.350 &Window.-SEP2- <Nop>
818an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
819an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
820an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
821an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
822an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
823an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
824an 70.365 &Window.-SEP3- <Nop>
825an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
826an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
827an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
828an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
829an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
830
831" The popup menu
832an 1.10 PopUp.&Undo u
833an 1.15 PopUp.-SEP1- <Nop>
834vnoremenu 1.20 PopUp.Cu&t "+x
835vnoremenu 1.30 PopUp.&Copy "+y
836cnoremenu 1.30 PopUp.&Copy <C-Y>
837nnoremenu 1.40 PopUp.&Paste "+gP
838cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000839exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
840exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000841vnoremenu 1.50 PopUp.&Delete x
842an 1.55 PopUp.-SEP2- <Nop>
843vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000844
845nnoremenu 1.70 PopUp.Select\ &Word vaw
846onoremenu 1.70 PopUp.Select\ &Word aw
847vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
848inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
849cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
850
851nnoremenu 1.73 PopUp.Select\ &Sentence vas
852onoremenu 1.73 PopUp.Select\ &Sentence as
853vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
854inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
855cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
856
857nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
858onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
859vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
860inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
861cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
862
863nnoremenu 1.80 PopUp.Select\ &Line V
864onoremenu 1.80 PopUp.Select\ &Line <C-C>V
865vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
866inoremenu 1.80 PopUp.Select\ &Line <C-O>V
867cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
868
869nnoremenu 1.90 PopUp.Select\ &Block <C-V>
870onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
871vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
872inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
873cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
874
Bram Moolenaar071d4272004-06-13 20:20:40 +0000875noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
876inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
877cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
878
Bram Moolenaar45360022005-07-21 21:08:21 +0000879if has("spell")
880 " Spell suggestions in the popup menu. Note that this will slow down the
881 " appearance of the menu!
882 func! <SID>SpellPopup()
883 if exists("s:changeitem") && s:changeitem != ''
884 call <SID>SpellDel()
885 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000886
887 " Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000888 if !&spell || &spelllang == ''
889 return
890 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000891
892 let curcol = col('.')
Bram Moolenaar1c7715d2005-10-03 22:02:18 +0000893 let [w, a] = spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000894 if col('.') > curcol " don't use word after the cursor
895 let w = ''
896 call cursor(0, curcol) " put the cursor back where it was
897 endif
898 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000899 if a == 'caps'
900 let s:suglist = [substitute(w, '.*', '\u&', '')]
901 else
902 let s:suglist = spellsuggest(w, 10)
903 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000904 if len(s:suglist) <= 0
905 call cursor(0, curcol) " put the cursor back where it was
906 else
907 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
908 let s:fromword = w
909 let pri = 1
910 for sug in s:suglist
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000911 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
Bram Moolenaar45360022005-07-21 21:08:21 +0000912 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
913 let pri += 1
914 endfor
915
916 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000917 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000918
919 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000920 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000921
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000922 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar45360022005-07-21 21:08:21 +0000923 endif
924 endif
925 endfunc
926
927 func! <SID>SpellReplace(n)
928 let l = getline('.')
929 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
930 \ . strpart(l, col('.') + len(s:fromword) - 1))
931 endfunc
932
933 func! <SID>SpellDel()
934 exe "aunmenu PopUp." . s:changeitem
935 exe "aunmenu PopUp." . s:additem
936 exe "aunmenu PopUp." . s:ignoreitem
937 aunmenu PopUp.-SpellSep-
938 let s:changeitem = ''
939 endfun
940
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000941 augroup SpellPopupMenu
942 au! MenuPopup * call <SID>SpellPopup()
943 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +0000944endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000945
946" The GUI toolbar (for MS-Windows and GTK)
947if has("toolbar")
948 an 1.10 ToolBar.Open :browse confirm e<CR>
949 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
950 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
951
952 if has("printer")
953 an 1.40 ToolBar.Print :hardcopy<CR>
954 vunmenu ToolBar.Print
955 vnoremenu ToolBar.Print :hardcopy<CR>
956 elseif has("unix")
957 an 1.40 ToolBar.Print :w !lpr<CR>
958 vunmenu ToolBar.Print
959 vnoremenu ToolBar.Print :w !lpr<CR>
960 endif
961
962 an 1.45 ToolBar.-sep1- <Nop>
963 an 1.50 ToolBar.Undo u
964 an 1.60 ToolBar.Redo <C-R>
965
966 an 1.65 ToolBar.-sep2- <Nop>
967 vnoremenu 1.70 ToolBar.Cut "+x
968 vnoremenu 1.80 ToolBar.Copy "+y
969 cnoremenu 1.80 ToolBar.Copy <C-Y>
970 nnoremenu 1.90 ToolBar.Paste "+gP
971 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000972 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
973 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000974
975 if !has("gui_athena")
976 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000977 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000978 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000979 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000980 an 1.110 ToolBar.FindNext n
981 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +0000982 endif
983
Bram Moolenaar071d4272004-06-13 20:20:40 +0000984 an 1.215 ToolBar.-sep5- <Nop>
985 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
986 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
987 an 1.240 ToolBar.RunScript :browse so<CR>
988
989 an 1.245 ToolBar.-sep6- <Nop>
990 an 1.250 ToolBar.Make :make<CR>
991 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
992 an 1.280 ToolBar.TagJump g<C-]>
993
994 an 1.295 ToolBar.-sep7- <Nop>
995 an 1.300 ToolBar.Help :help<CR>
996 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
997
998" Only set the tooltips here if not done in a language menu file
999if exists("*Do_toolbar_tmenu")
1000 call Do_toolbar_tmenu()
1001else
1002 let did_toolbar_tmenu = 1
1003 tmenu ToolBar.Open Open file
1004 tmenu ToolBar.Save Save current file
1005 tmenu ToolBar.SaveAll Save all files
1006 tmenu ToolBar.Print Print
1007 tmenu ToolBar.Undo Undo
1008 tmenu ToolBar.Redo Redo
1009 tmenu ToolBar.Cut Cut to clipboard
1010 tmenu ToolBar.Copy Copy to clipboard
1011 tmenu ToolBar.Paste Paste from Clipboard
1012 if !has("gui_athena")
1013 tmenu ToolBar.Find Find...
1014 tmenu ToolBar.FindNext Find Next
1015 tmenu ToolBar.FindPrev Find Previous
1016 tmenu ToolBar.Replace Find / Replace...
1017 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001018 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001019 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001020 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001021 tmenu ToolBar.Make Make current project (:make)
1022 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001023 tmenu ToolBar.TagJump Jump to tag under cursor
1024 tmenu ToolBar.Help Vim Help
1025 tmenu ToolBar.FindHelp Search Vim Help
1026endif
1027
1028" Select a session to load; default to current session name if present
1029fun! s:LoadVimSesn()
1030 if strlen(v:this_session) > 0
Bram Moolenaar280f1262006-01-30 00:14:18 +00001031 let name = escape(v:this_session, ' \t#%$|<>"*?[{`')
Bram Moolenaar071d4272004-06-13 20:20:40 +00001032 else
1033 let name = "Session.vim"
1034 endif
1035 execute "browse so " . name
1036endfun
1037
1038" Select a session to save; default to current session name if present
1039fun! s:SaveVimSesn()
1040 if strlen(v:this_session) == 0
1041 let v:this_session = "Session.vim"
1042 endif
Bram Moolenaar280f1262006-01-30 00:14:18 +00001043 execute "browse mksession! " . escape(v:this_session, ' \t#%$|<>"*?[{`')
Bram Moolenaar071d4272004-06-13 20:20:40 +00001044endfun
1045
1046endif
1047
1048endif " !exists("did_install_default_menus")
1049
1050" Define these items always, so that syntax can be switched on when it wasn't.
1051" But skip them when the Syntax menu was disabled by the user.
1052if !exists("did_install_syntax_menu")
1053 an 50.212 &Syntax.&Manual :syn manual<CR>
1054 an 50.214 &Syntax.A&utomatic :syn on<CR>
1055 an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1056 if !exists("*s:SynOnOff")
1057 fun s:SynOnOff()
1058 if has("syntax_items")
1059 syn clear
1060 else
1061 if !exists("g:syntax_on")
1062 syn manual
1063 endif
1064 set syn=ON
1065 endif
1066 endfun
1067 endif
1068endif
1069
1070
1071" Install the Syntax menu only when filetype.vim has been loaded or when
1072" manual syntax highlighting is enabled.
1073" Avoid installing the Syntax menu twice.
1074if (exists("did_load_filetypes") || exists("syntax_on"))
1075 \ && !exists("did_install_syntax_menu")
1076 let did_install_syntax_menu = 1
1077
1078" Skip setting up the individual syntax selection menus unless
1079" do_syntax_sel_menu is defined (it takes quite a bit of time).
1080if exists("do_syntax_sel_menu")
1081 runtime! synmenu.vim
1082else
1083 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>
1084 an 50.195 &Syntax.-SEP1- <Nop>
1085endif
1086
1087an 50.210 &Syntax.&Off :syn off<CR>
1088an 50.700 &Syntax.-SEP3- <Nop>
1089an 50.710 &Syntax.Co&lor\ test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1090an 50.720 &Syntax.&Highlight\ test :runtime syntax/hitest.vim<CR>
1091an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1092
1093endif " !exists("did_install_syntax_menu")
1094
Bram Moolenaar071d4272004-06-13 20:20:40 +00001095" Restore the previous value of 'cpoptions'.
1096let &cpo = s:cpo_save
1097unlet s:cpo_save
1098
1099" vim: set sw=2 :