blob: d2b8b3d4fd2eeb0bad1ca74cae3a41be77bace66 [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 Moolenaara93fa7e2006-04-17 22:14:47 +00005" Last Change: 2006 Apr 17
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")
387 let g:ctags_command = "mc vim:ctags ."
388 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)
661 \ && !getbufvar(buf, "&bufsecret")
662 let s:bmenu_count = s:bmenu_count + 1
663 endif
664 let buf = buf + 1
665 endwhile
666 if s:bmenu_count <= &menuitems
667 let s:bmenu_short = 0
668 endif
669
670 " iterate through buffer list, adding each buffer to the menu:
671 let buf = 1
672 while buf <= bufnr('$')
673 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
674 \ && !getbufvar(buf, "&bufsecret")
675 call <SID>BMFilename(bufname(buf), buf)
676 endif
677 let buf = buf + 1
678 endwhile
679 let s:bmenu_wait = 0
680 aug buffer_list
681 au!
682 au BufCreate,BufFilePost * call <SID>BMAdd()
683 au BufDelete,BufFilePre * call <SID>BMRemove()
684 aug END
685endfunc
686
687func! s:BMHash(name)
688 " Make name all upper case, so that chars are between 32 and 96
689 let nm = substitute(a:name, ".*", '\U\0', "")
690 if has("ebcdic")
691 " HACK: Replace all non alphabetics with 'Z'
692 " Just to make it work for now.
693 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
694 let sp = char2nr('A') - 1
695 else
696 let sp = char2nr(' ')
697 endif
698 " convert first six chars into a number for sorting:
699 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)
700endfunc
701
702func! s:BMHash2(name)
703 let nm = substitute(a:name, ".", '\L\0', "")
704 " Not exactly right for EBCDIC...
705 if nm[0] < 'a' || nm[0] > 'z'
706 return '&others.'
707 elseif nm[0] <= 'd'
708 return '&abcd.'
709 elseif nm[0] <= 'h'
710 return '&efgh.'
711 elseif nm[0] <= 'l'
712 return '&ijkl.'
713 elseif nm[0] <= 'p'
714 return '&mnop.'
715 elseif nm[0] <= 't'
716 return '&qrst.'
717 else
718 return '&u-z.'
719 endif
720endfunc
721
722" insert a buffer name into the buffer menu:
723func! s:BMFilename(name, num)
724 if isdirectory(a:name)
725 return
726 endif
727 let munge = <SID>BMMunge(a:name, a:num)
728 let hash = <SID>BMHash(munge)
729 if s:bmenu_short == 0
730 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
731 else
732 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
733 endif
734 " set 'cpo' to include the <CR>
735 let cpo_save = &cpo
736 set cpo&vim
737 exe name . ' :confirm b' . a:num . '<CR>'
738 let &cpo = cpo_save
739endfunc
740
741" Truncate a long path to fit it in a menu item.
742if !exists("g:bmenu_max_pathlen")
743 let g:bmenu_max_pathlen = 35
744endif
745func! s:BMTruncName(fname)
746 let name = a:fname
747 if g:bmenu_max_pathlen < 5
748 let name = ""
749 else
750 let len = strlen(name)
751 if len > g:bmenu_max_pathlen
752 let amountl = (g:bmenu_max_pathlen / 2) - 2
753 let amountr = g:bmenu_max_pathlen - amountl - 3
754 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
755 let left = substitute(name, pattern, '\1', '')
756 let right = substitute(name, pattern, '\2', '')
757 if strlen(left) + strlen(right) < len
758 let name = left . '...' . right
759 endif
760 endif
761 endif
762 return name
763endfunc
764
765func! s:BMMunge(fname, bnum)
766 let name = a:fname
767 if name == ''
768 if !exists("g:menutrans_no_file")
769 let g:menutrans_no_file = "[No file]"
770 endif
771 let name = g:menutrans_no_file
772 else
773 let name = fnamemodify(name, ':p:~')
774 endif
775 " detach file name and separate it out:
776 let name2 = fnamemodify(name, ':t')
777 if a:bnum >= 0
778 let name2 = name2 . ' (' . a:bnum . ')'
779 endif
780 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
781 let name = escape(name, "\\. \t|")
782 let name = substitute(name, "&", "&&", "g")
783 let name = substitute(name, "\n", "^@", "g")
784 return name
785endfunc
786
787" When just starting Vim, load the buffer menu later
788if has("vim_starting")
789 augroup LoadBufferMenu
790 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
791 au VimEnter * au! LoadBufferMenu
792 augroup END
793else
794 call <SID>BMShow()
795endif
796
797endif " !exists("no_buffers_menu")
798
799" Window menu
800an 70.300 &Window.&New<Tab>^Wn <C-W>n
801an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
802an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
803an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
804if has("vertsplit")
805 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
806 if !exists("*MenuExplOpen")
807 fun MenuExplOpen()
808 if @% == ""
809 20vsp .
810 else
811 exe "20vsp " . expand("%:p:h")
812 endif
813 endfun
814 endif
815endif
816an 70.335 &Window.-SEP1- <Nop>
817an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
818an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
819an 70.350 &Window.-SEP2- <Nop>
820an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
821an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
822an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
823an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
824an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
825an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
826an 70.365 &Window.-SEP3- <Nop>
827an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
828an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
829an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
830an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
831an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
832
833" The popup menu
834an 1.10 PopUp.&Undo u
835an 1.15 PopUp.-SEP1- <Nop>
836vnoremenu 1.20 PopUp.Cu&t "+x
837vnoremenu 1.30 PopUp.&Copy "+y
838cnoremenu 1.30 PopUp.&Copy <C-Y>
839nnoremenu 1.40 PopUp.&Paste "+gP
840cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000841exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
842exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000843vnoremenu 1.50 PopUp.&Delete x
844an 1.55 PopUp.-SEP2- <Nop>
845vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000846
847nnoremenu 1.70 PopUp.Select\ &Word vaw
848onoremenu 1.70 PopUp.Select\ &Word aw
849vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
850inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
851cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
852
853nnoremenu 1.73 PopUp.Select\ &Sentence vas
854onoremenu 1.73 PopUp.Select\ &Sentence as
855vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
856inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
857cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
858
859nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
860onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
861vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
862inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
863cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
864
865nnoremenu 1.80 PopUp.Select\ &Line V
866onoremenu 1.80 PopUp.Select\ &Line <C-C>V
867vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
868inoremenu 1.80 PopUp.Select\ &Line <C-O>V
869cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
870
871nnoremenu 1.90 PopUp.Select\ &Block <C-V>
872onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
873vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
874inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
875cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
876
Bram Moolenaar071d4272004-06-13 20:20:40 +0000877noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
878inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
879cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
880
Bram Moolenaar45360022005-07-21 21:08:21 +0000881if has("spell")
882 " Spell suggestions in the popup menu. Note that this will slow down the
883 " appearance of the menu!
884 func! <SID>SpellPopup()
885 if exists("s:changeitem") && s:changeitem != ''
886 call <SID>SpellDel()
887 endif
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
911 exe 'amenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
912 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
913 let pri += 1
914 endfor
915
916 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
917 exe 'amenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
918
919 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
920 exe 'amenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
921
922 amenu 1.8 PopUp.-SpellSep- :
923 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
941 au! MenuPopup * call <SID>SpellPopup()
942endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000943
944" The GUI toolbar (for MS-Windows and GTK)
945if has("toolbar")
946 an 1.10 ToolBar.Open :browse confirm e<CR>
947 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
948 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
949
950 if has("printer")
951 an 1.40 ToolBar.Print :hardcopy<CR>
952 vunmenu ToolBar.Print
953 vnoremenu ToolBar.Print :hardcopy<CR>
954 elseif has("unix")
955 an 1.40 ToolBar.Print :w !lpr<CR>
956 vunmenu ToolBar.Print
957 vnoremenu ToolBar.Print :w !lpr<CR>
958 endif
959
960 an 1.45 ToolBar.-sep1- <Nop>
961 an 1.50 ToolBar.Undo u
962 an 1.60 ToolBar.Redo <C-R>
963
964 an 1.65 ToolBar.-sep2- <Nop>
965 vnoremenu 1.70 ToolBar.Cut "+x
966 vnoremenu 1.80 ToolBar.Copy "+y
967 cnoremenu 1.80 ToolBar.Copy <C-Y>
968 nnoremenu 1.90 ToolBar.Paste "+gP
969 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000970 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
971 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000972
973 if !has("gui_athena")
974 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000975 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000976 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000977 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000978 an 1.110 ToolBar.FindNext n
979 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +0000980 endif
981
Bram Moolenaar071d4272004-06-13 20:20:40 +0000982 an 1.215 ToolBar.-sep5- <Nop>
983 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
984 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
985 an 1.240 ToolBar.RunScript :browse so<CR>
986
987 an 1.245 ToolBar.-sep6- <Nop>
988 an 1.250 ToolBar.Make :make<CR>
989 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
990 an 1.280 ToolBar.TagJump g<C-]>
991
992 an 1.295 ToolBar.-sep7- <Nop>
993 an 1.300 ToolBar.Help :help<CR>
994 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
995
996" Only set the tooltips here if not done in a language menu file
997if exists("*Do_toolbar_tmenu")
998 call Do_toolbar_tmenu()
999else
1000 let did_toolbar_tmenu = 1
1001 tmenu ToolBar.Open Open file
1002 tmenu ToolBar.Save Save current file
1003 tmenu ToolBar.SaveAll Save all files
1004 tmenu ToolBar.Print Print
1005 tmenu ToolBar.Undo Undo
1006 tmenu ToolBar.Redo Redo
1007 tmenu ToolBar.Cut Cut to clipboard
1008 tmenu ToolBar.Copy Copy to clipboard
1009 tmenu ToolBar.Paste Paste from Clipboard
1010 if !has("gui_athena")
1011 tmenu ToolBar.Find Find...
1012 tmenu ToolBar.FindNext Find Next
1013 tmenu ToolBar.FindPrev Find Previous
1014 tmenu ToolBar.Replace Find / Replace...
1015 endif
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001016 tmenu ToolBar.LoadSesn Chose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001017 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001018 tmenu ToolBar.RunScript Chose a Vim Script to run
1019 tmenu ToolBar.Make Make current project (:make)
1020 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001021 tmenu ToolBar.TagJump Jump to tag under cursor
1022 tmenu ToolBar.Help Vim Help
1023 tmenu ToolBar.FindHelp Search Vim Help
1024endif
1025
1026" Select a session to load; default to current session name if present
1027fun! s:LoadVimSesn()
1028 if strlen(v:this_session) > 0
Bram Moolenaar280f1262006-01-30 00:14:18 +00001029 let name = escape(v:this_session, ' \t#%$|<>"*?[{`')
Bram Moolenaar071d4272004-06-13 20:20:40 +00001030 else
1031 let name = "Session.vim"
1032 endif
1033 execute "browse so " . name
1034endfun
1035
1036" Select a session to save; default to current session name if present
1037fun! s:SaveVimSesn()
1038 if strlen(v:this_session) == 0
1039 let v:this_session = "Session.vim"
1040 endif
Bram Moolenaar280f1262006-01-30 00:14:18 +00001041 execute "browse mksession! " . escape(v:this_session, ' \t#%$|<>"*?[{`')
Bram Moolenaar071d4272004-06-13 20:20:40 +00001042endfun
1043
1044endif
1045
1046endif " !exists("did_install_default_menus")
1047
1048" Define these items always, so that syntax can be switched on when it wasn't.
1049" But skip them when the Syntax menu was disabled by the user.
1050if !exists("did_install_syntax_menu")
1051 an 50.212 &Syntax.&Manual :syn manual<CR>
1052 an 50.214 &Syntax.A&utomatic :syn on<CR>
1053 an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1054 if !exists("*s:SynOnOff")
1055 fun s:SynOnOff()
1056 if has("syntax_items")
1057 syn clear
1058 else
1059 if !exists("g:syntax_on")
1060 syn manual
1061 endif
1062 set syn=ON
1063 endif
1064 endfun
1065 endif
1066endif
1067
1068
1069" Install the Syntax menu only when filetype.vim has been loaded or when
1070" manual syntax highlighting is enabled.
1071" Avoid installing the Syntax menu twice.
1072if (exists("did_load_filetypes") || exists("syntax_on"))
1073 \ && !exists("did_install_syntax_menu")
1074 let did_install_syntax_menu = 1
1075
1076" Skip setting up the individual syntax selection menus unless
1077" do_syntax_sel_menu is defined (it takes quite a bit of time).
1078if exists("do_syntax_sel_menu")
1079 runtime! synmenu.vim
1080else
1081 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>
1082 an 50.195 &Syntax.-SEP1- <Nop>
1083endif
1084
1085an 50.210 &Syntax.&Off :syn off<CR>
1086an 50.700 &Syntax.-SEP3- <Nop>
1087an 50.710 &Syntax.Co&lor\ test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1088an 50.720 &Syntax.&Highlight\ test :runtime syntax/hitest.vim<CR>
1089an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1090
1091endif " !exists("did_install_syntax_menu")
1092
Bram Moolenaar071d4272004-06-13 20:20:40 +00001093" Restore the previous value of 'cpoptions'.
1094let &cpo = s:cpo_save
1095unlet s:cpo_save
1096
1097" vim: set sw=2 :