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