blob: f4ff9dce83e0c9392c735b6fef56ca5b9fc6a023 [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 Moolenaarad3b3662013-05-17 18:14:19 +02005" Last Change: 2013 May 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
Bram Moolenaarcab49df2011-03-22 17:40:10 +0100104 \ :if winheight(2) < 0 && tabpagewinnr(2) == 0 <Bar>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105 \ 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()
Bram Moolenaara3e6bc92013-01-30 14:18:00 +0100135 exe "norm! gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000136endfunc
137
Bram Moolenaaraba88572008-06-25 20:13:35 +0000138func! s:FnameEscape(fname)
139 if exists('*fnameescape')
140 return fnameescape(a:fname)
Bram Moolenaar5c736222010-01-06 20:54:52 +0100141 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000142 return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
143endfunc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144
145" Edit menu
146an 20.310 &Edit.&Undo<Tab>u u
147an 20.320 &Edit.&Redo<Tab>^R <C-R>
148an 20.330 &Edit.Rep&eat<Tab>\. .
149
150an 20.335 &Edit.-SEP1- <Nop>
151vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
152vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
153cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
154nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
155cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000156exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v']
157exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000158nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
159inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
160nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
161inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
162if has("win32") || has("win16")
163 vnoremenu 20.390 &Edit.&Delete<Tab>x x
164endif
165noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
166inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
167cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
168
169an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar843ee412004-06-30 16:16:41 +0000170if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
172 vunmenu &Edit.&Find\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000173 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
175 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000176 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000177else
178 an 20.410 &Edit.&Find<Tab>/ /
179 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
180 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
181 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
182endif
183
184an 20.425 &Edit.-SEP3- <Nop>
185an 20.430 &Edit.Settings\ &Window :options<CR>
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000186an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
187
188fun! s:EditVimrc()
189 if $MYVIMRC != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000190 let fname = $MYVIMRC
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000191 elseif has("win32") || has("dos32") || has("dos16") || has("os2")
192 if $HOME != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000193 let fname = $HOME . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000194 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000195 let fname = $VIM . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000196 endif
197 elseif has("amiga")
198 let fname = "s:.vimrc"
199 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000200 let fname = $HOME . "/.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000201 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000202 let fname = s:FnameEscape(fname)
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000203 if &mod
204 exe "split " . fname
205 else
206 exe "edit " . fname
207 endif
208endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000210fun! s:FixFText()
211 " Fix text in nameless register to be used with :promptfind.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000212 return substitute(@", "[\r\n]", '\\n', 'g')
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000213endfun
214
Bram Moolenaar071d4272004-06-13 20:20:40 +0000215" Edit/Global Settings
216an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
217an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic! :set ic! ic?<CR>
218an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm! :set sm! sm?<CR>
219
220an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\ :set so=1<CR>
221an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\ :set so=2<CR>
222an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\ :set so=3<CR>
223an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\ :set so=4<CR>
224an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\ :set so=5<CR>
225an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\ :set so=7<CR>
226an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\ :set so=10<CR>
227an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\ :set so=100<CR>
228
229an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
230an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
231an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
232an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
233an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
234an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
235an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp! :set cp!<CR>
236an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
237an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
238"
239" GUI options
240an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
241an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
242an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
243an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
244an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
245
246fun! s:SearchP()
247 if !exists("g:menutrans_path_dialog")
248 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
249 endif
250 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
251 if n != ""
252 let &path = substitute(n, ' ', '\\ ', 'g')
253 endif
254endfun
255
256fun! s:TagFiles()
257 if !exists("g:menutrans_tags_dialog")
258 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
259 endif
260 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
261 if n != ""
262 let &tags = substitute(n, ' ', '\\ ', 'g')
263 endif
264endfun
265
266fun! s:ToggleGuiOption(option)
267 " If a:option is already set in guioptions, then we want to remove it
268 if match(&guioptions, "\\C" . a:option) > -1
269 exec "set go-=" . a:option
270 else
271 exec "set go+=" . a:option
272 endif
273endfun
274
275" Edit/File Settings
276
277" Boolean options
278an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
Bram Moolenaar64486672010-05-16 15:46:46 +0200279an 20.440.105 &Edit.F&ile\ Settings.Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! :set rnu! rnu?<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
281an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
282an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr! :set lbr! lbr?<CR>
283an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et! :set et! et?<CR>
284an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai! :set ai! ai?<CR>
285an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
286
287" other options
288an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
289an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
290an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
291an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
292an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
293an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
294an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
295
296an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
297an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
298an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
299an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
300an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
301an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
302
303an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
304an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
305fun! s:TextWidth()
306 if !exists("g:menutrans_textwidth_dialog")
307 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
308 endif
309 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
310 if n != ""
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200311 " Remove leading zeros to avoid it being used as an octal number.
312 " But keep a zero by itself.
313 let tw = substitute(n, "^0*", "", "")
314 let &tw = tw == '' ? 0 : tw
Bram Moolenaar071d4272004-06-13 20:20:40 +0000315 endif
316endfun
317
318fun! s:FileFormat()
319 if !exists("g:menutrans_fileformat_dialog")
320 let g:menutrans_fileformat_dialog = "Select format for writing the file"
321 endif
322 if !exists("g:menutrans_fileformat_choices")
323 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
324 endif
325 if &ff == "dos"
326 let def = 2
327 elseif &ff == "mac"
328 let def = 3
329 else
330 let def = 1
331 endif
332 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
333 if n == 1
334 set ff=unix
335 elseif n == 2
336 set ff=dos
337 elseif n == 3
338 set ff=mac
339 endif
340endfun
341
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200342
Bram Moolenaar071d4272004-06-13 20:20:40 +0000343" Setup the Edit.Color Scheme submenu
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200344
345" get NL separated string with file names
Bram Moolenaar071d4272004-06-13 20:20:40 +0000346let s:n = globpath(&runtimepath, "colors/*.vim")
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200347
348" split at NL, Ignore case for VMS and windows, sort on name
349let s:names = sort(map(split(s:n, "\n"), 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
350
351" define all the submenu entries
Bram Moolenaar071d4272004-06-13 20:20:40 +0000352let s:idx = 100
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200353for s:name in s:names
Bram Moolenaar071d4272004-06-13 20:20:40 +0000354 exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000355 let s:idx = s:idx + 10
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200356endfor
357unlet s:name s:names s:n s:idx
358
Bram Moolenaar071d4272004-06-13 20:20:40 +0000359
360" Setup the Edit.Keymap submenu
361if has("keymap")
362 let s:n = globpath(&runtimepath, "keymap/*.vim")
363 if s:n != ""
364 let s:idx = 100
365 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
366 while strlen(s:n) > 0
367 let s:i = stridx(s:n, "\n")
368 if s:i < 0
369 let s:name = s:n
370 let s:n = ""
371 else
372 let s:name = strpart(s:n, 0, s:i)
373 let s:n = strpart(s:n, s:i + 1, 19999)
374 endif
375 " Ignore case for VMS and windows
376 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
377 exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
378 unlet s:name
379 unlet s:i
380 let s:idx = s:idx + 10
381 endwhile
382 unlet s:idx
383 endif
384 unlet s:n
385endif
Bram Moolenaardfccaf02004-12-31 20:56:11 +0000386if 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 +0000387 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
388endif
389
390" Programming menu
391if !exists("g:ctags_command")
392 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000393 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000394 else
395 let g:ctags_command = "ctags -R ."
396 endif
397endif
398
399an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
400vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
401vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
402an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
403an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
404
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000405if has("folding") || has("spell")
406 an 40.330 &Tools.-SEP1- <Nop>
407endif
408
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000409" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000410if has("spell")
411 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
412 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
413 an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s ]s
Bram Moolenaardc27ac12005-07-06 22:35:45 +0000414 an 40.335.130 &Tools.&Spelling.To\ &Previous\ error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000415 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +0000416 an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000417 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
418 an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en" :set spl=en spell<CR>
419 an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au" :set spl=en_au spell<CR>
420 an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca" :set spl=en_ca spell<CR>
421 an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb" :set spl=en_gb spell<CR>
422 an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz" :set spl=en_nz spell<CR>
423 an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us" :set spl=en_us spell<CR>
424 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
425
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000426 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000427 func! s:SpellLang()
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000428 for cmd in s:undo_spellang
429 exe "silent! " . cmd
430 endfor
431 let s:undo_spellang = []
432
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000433 if &enc == "iso-8859-15"
434 let enc = "latin1"
435 else
436 let enc = &enc
437 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000438
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200439 if !exists("g:menutrans_set_lang_to")
440 let g:menutrans_set_lang_to = 'Set language to'
441 endif
442
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000443 let found = 0
444 let s = globpath(&rtp, "spell/*." . enc . ".spl")
445 if s != ""
446 let n = 300
447 for f in split(s, "\n")
448 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000449 if nm != "en" && nm !~ '/'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200450 let _nm = nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000451 let found += 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200452 let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"'
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000453 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
454 let s:undo_spellang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000455 endif
456 let n += 10
457 endfor
458 endif
459 if found == 0
460 echomsg "Could not find other spell files"
461 elseif found == 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200462 echomsg "Found spell file " . _nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000463 else
464 echomsg "Found " . found . " more spell files"
465 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000466 " Need to redo this when 'encoding' is changed.
467 augroup spellmenu
468 au! EncodingChanged * call <SID>SpellLang()
469 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000470 endfun
471
472endif
473
Bram Moolenaar071d4272004-06-13 20:20:40 +0000474" Tools.Fold Menu
475if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000476 " open close folds
477 an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
478 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
479 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
480 an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
481 an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
482 an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
483 an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR
484 " fold method
485 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
486 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
487 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
488 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
489 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
490 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
491 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
492 " create and delete folds
493 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
494 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
495 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
496 " moving around in folds
497 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
498 an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
499 an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
500 an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
501 an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
502 an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
503 an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
504 an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
505 an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
506endif " has folding
507
508if has("diff")
509 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
510 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
511 vunmenu &Tools.&Diff.&Get\ Block
512 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
513 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
514 vunmenu &Tools.&Diff.&Put\ Block
515 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
516endif
517
518an 40.358 &Tools.-SEP2- <Nop>
519an 40.360 &Tools.&Make<Tab>:make :make<CR>
520an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
521an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
522an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
523an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
524an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
525an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
526an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
527an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
528an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
529
530an 40.520 &Tools.-SEP3- <Nop>
531an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
532 \ :call <SID>XxdConv()<CR>
533an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
534 \ :call <SID>XxdBack()<CR>
535
536" Use a function to do the conversion, so that it also works with 'insertmode'
537" set.
538func! s:XxdConv()
539 let mod = &mod
540 if has("vms")
541 %!mc vim:xxd
542 else
543 call s:XxdFind()
544 exe '%!"' . g:xxdprogram . '"'
545 endif
546 if getline(1) =~ "^0000000:" " only if it worked
547 set ft=xxd
548 endif
549 let &mod = mod
550endfun
551
552func! s:XxdBack()
553 let mod = &mod
554 if has("vms")
555 %!mc vim:xxd -r
556 else
557 call s:XxdFind()
558 exe '%!"' . g:xxdprogram . '" -r'
559 endif
560 set ft=
561 doautocmd filetypedetect BufReadPost
562 let &mod = mod
563endfun
564
565func! s:XxdFind()
566 if !exists("g:xxdprogram")
567 " On the PC xxd may not be in the path but in the install directory
568 if (has("win32") || has("dos32")) && !executable("xxd")
569 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
570 else
571 let g:xxdprogram = "xxd"
572 endif
573 endif
574endfun
575
576" Setup the Tools.Compiler submenu
577let s:n = globpath(&runtimepath, "compiler/*.vim")
578let s:idx = 100
579while strlen(s:n) > 0
580 let s:i = stridx(s:n, "\n")
581 if s:i < 0
582 let s:name = s:n
583 let s:n = ""
584 else
585 let s:name = strpart(s:n, 0, s:i)
586 let s:n = strpart(s:n, s:i + 1, 19999)
587 endif
588 " Ignore case for VMS and windows
589 let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
Bram Moolenaar045e82d2005-07-08 22:25:33 +0000590 exe "an 30.440." . s:idx . ' &Tools.Se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000591 unlet s:name
592 unlet s:i
593 let s:idx = s:idx + 10
594endwhile
595unlet s:n
596unlet s:idx
597
598if !exists("no_buffers_menu")
599
600" Buffer list menu -- Setup functions & actions
601
602" wait with building the menu until after loading 'session' files. Makes
603" startup faster.
604let s:bmenu_wait = 1
605
606if !exists("bmenu_priority")
607 let bmenu_priority = 60
608endif
609
610func! s:BMAdd()
611 if s:bmenu_wait == 0
612 " when adding too many buffers, redraw in short format
613 if s:bmenu_count == &menuitems && s:bmenu_short == 0
614 call s:BMShow()
615 else
616 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
617 let s:bmenu_count = s:bmenu_count + 1
618 endif
619 endif
620endfunc
621
622func! s:BMRemove()
623 if s:bmenu_wait == 0
624 let name = expand("<afile>")
625 if isdirectory(name)
626 return
627 endif
628 let munge = <SID>BMMunge(name, expand("<abuf>"))
629
630 if s:bmenu_short == 0
631 exe 'silent! aun &Buffers.' . munge
632 else
633 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
634 endif
635 let s:bmenu_count = s:bmenu_count - 1
636 endif
637endfunc
638
639" Create the buffer menu (delete an existing one first).
640func! s:BMShow(...)
641 let s:bmenu_wait = 1
642 let s:bmenu_short = 1
643 let s:bmenu_count = 0
644 "
645 " get new priority, if exists
646 if a:0 == 1
647 let g:bmenu_priority = a:1
648 endif
649
650 " remove old menu, if exists; keep one entry to avoid a torn off menu to
651 " disappear.
652 silent! unmenu &Buffers
653 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
654 silent! unmenu! &Buffers
655
656 " create new menu; set 'cpo' to include the <CR>
657 let cpo_save = &cpo
658 set cpo&vim
659 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
660 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
661 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
662 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
663 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
664 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
665 let &cpo = cpo_save
666 unmenu &Buffers.Dummy
667
668 " figure out how many buffers there are
669 let buf = 1
670 while buf <= bufnr('$')
671 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000672 let s:bmenu_count = s:bmenu_count + 1
673 endif
674 let buf = buf + 1
675 endwhile
676 if s:bmenu_count <= &menuitems
677 let s:bmenu_short = 0
678 endif
679
680 " iterate through buffer list, adding each buffer to the menu:
681 let buf = 1
682 while buf <= bufnr('$')
683 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000684 call <SID>BMFilename(bufname(buf), buf)
685 endif
686 let buf = buf + 1
687 endwhile
688 let s:bmenu_wait = 0
689 aug buffer_list
690 au!
691 au BufCreate,BufFilePost * call <SID>BMAdd()
692 au BufDelete,BufFilePre * call <SID>BMRemove()
693 aug END
694endfunc
695
696func! s:BMHash(name)
697 " Make name all upper case, so that chars are between 32 and 96
698 let nm = substitute(a:name, ".*", '\U\0', "")
699 if has("ebcdic")
700 " HACK: Replace all non alphabetics with 'Z'
701 " Just to make it work for now.
702 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
703 let sp = char2nr('A') - 1
704 else
705 let sp = char2nr(' ')
706 endif
707 " convert first six chars into a number for sorting:
708 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)
709endfunc
710
711func! s:BMHash2(name)
712 let nm = substitute(a:name, ".", '\L\0', "")
713 " Not exactly right for EBCDIC...
714 if nm[0] < 'a' || nm[0] > 'z'
715 return '&others.'
716 elseif nm[0] <= 'd'
717 return '&abcd.'
718 elseif nm[0] <= 'h'
719 return '&efgh.'
720 elseif nm[0] <= 'l'
721 return '&ijkl.'
722 elseif nm[0] <= 'p'
723 return '&mnop.'
724 elseif nm[0] <= 't'
725 return '&qrst.'
726 else
727 return '&u-z.'
728 endif
729endfunc
730
731" insert a buffer name into the buffer menu:
732func! s:BMFilename(name, num)
733 if isdirectory(a:name)
734 return
735 endif
736 let munge = <SID>BMMunge(a:name, a:num)
737 let hash = <SID>BMHash(munge)
738 if s:bmenu_short == 0
739 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
740 else
741 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
742 endif
743 " set 'cpo' to include the <CR>
744 let cpo_save = &cpo
745 set cpo&vim
746 exe name . ' :confirm b' . a:num . '<CR>'
747 let &cpo = cpo_save
748endfunc
749
750" Truncate a long path to fit it in a menu item.
751if !exists("g:bmenu_max_pathlen")
752 let g:bmenu_max_pathlen = 35
753endif
754func! s:BMTruncName(fname)
755 let name = a:fname
756 if g:bmenu_max_pathlen < 5
757 let name = ""
758 else
759 let len = strlen(name)
760 if len > g:bmenu_max_pathlen
761 let amountl = (g:bmenu_max_pathlen / 2) - 2
762 let amountr = g:bmenu_max_pathlen - amountl - 3
763 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
764 let left = substitute(name, pattern, '\1', '')
765 let right = substitute(name, pattern, '\2', '')
766 if strlen(left) + strlen(right) < len
767 let name = left . '...' . right
768 endif
769 endif
770 endif
771 return name
772endfunc
773
774func! s:BMMunge(fname, bnum)
775 let name = a:fname
776 if name == ''
777 if !exists("g:menutrans_no_file")
778 let g:menutrans_no_file = "[No file]"
779 endif
780 let name = g:menutrans_no_file
781 else
782 let name = fnamemodify(name, ':p:~')
783 endif
784 " detach file name and separate it out:
785 let name2 = fnamemodify(name, ':t')
786 if a:bnum >= 0
787 let name2 = name2 . ' (' . a:bnum . ')'
788 endif
789 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
790 let name = escape(name, "\\. \t|")
791 let name = substitute(name, "&", "&&", "g")
792 let name = substitute(name, "\n", "^@", "g")
793 return name
794endfunc
795
796" When just starting Vim, load the buffer menu later
797if has("vim_starting")
798 augroup LoadBufferMenu
799 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
800 au VimEnter * au! LoadBufferMenu
801 augroup END
802else
803 call <SID>BMShow()
804endif
805
806endif " !exists("no_buffers_menu")
807
808" Window menu
809an 70.300 &Window.&New<Tab>^Wn <C-W>n
810an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
811an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
812an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
813if has("vertsplit")
814 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
815 if !exists("*MenuExplOpen")
816 fun MenuExplOpen()
817 if @% == ""
818 20vsp .
819 else
Bram Moolenaaraba88572008-06-25 20:13:35 +0000820 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000821 endif
822 endfun
823 endif
824endif
825an 70.335 &Window.-SEP1- <Nop>
826an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
827an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
828an 70.350 &Window.-SEP2- <Nop>
829an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
830an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
831an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
832an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
833an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
834an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
835an 70.365 &Window.-SEP3- <Nop>
836an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
837an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
838an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
839an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
840an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
841
842" The popup menu
843an 1.10 PopUp.&Undo u
844an 1.15 PopUp.-SEP1- <Nop>
845vnoremenu 1.20 PopUp.Cu&t "+x
846vnoremenu 1.30 PopUp.&Copy "+y
847cnoremenu 1.30 PopUp.&Copy <C-Y>
848nnoremenu 1.40 PopUp.&Paste "+gP
849cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000850exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
851exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000852vnoremenu 1.50 PopUp.&Delete x
853an 1.55 PopUp.-SEP2- <Nop>
854vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000855
856nnoremenu 1.70 PopUp.Select\ &Word vaw
857onoremenu 1.70 PopUp.Select\ &Word aw
858vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
859inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
860cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
861
862nnoremenu 1.73 PopUp.Select\ &Sentence vas
863onoremenu 1.73 PopUp.Select\ &Sentence as
864vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
865inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
866cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
867
868nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
869onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
870vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
871inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
872cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
873
874nnoremenu 1.80 PopUp.Select\ &Line V
875onoremenu 1.80 PopUp.Select\ &Line <C-C>V
876vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
877inoremenu 1.80 PopUp.Select\ &Line <C-O>V
878cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
879
880nnoremenu 1.90 PopUp.Select\ &Block <C-V>
881onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
882vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
883inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
884cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
885
Bram Moolenaar071d4272004-06-13 20:20:40 +0000886noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
887inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
888cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
889
Bram Moolenaar45360022005-07-21 21:08:21 +0000890if has("spell")
891 " Spell suggestions in the popup menu. Note that this will slow down the
892 " appearance of the menu!
893 func! <SID>SpellPopup()
894 if exists("s:changeitem") && s:changeitem != ''
895 call <SID>SpellDel()
896 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000897
898 " Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000899 if !&spell || &spelllang == ''
900 return
901 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000902
903 let curcol = col('.')
Bram Moolenaar1c7715d2005-10-03 22:02:18 +0000904 let [w, a] = spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000905 if col('.') > curcol " don't use word after the cursor
906 let w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +0000907 endif
908 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000909 if a == 'caps'
910 let s:suglist = [substitute(w, '.*', '\u&', '')]
911 else
912 let s:suglist = spellsuggest(w, 10)
913 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200914 if len(s:suglist) > 0
Bram Moolenaar45360022005-07-21 21:08:21 +0000915 let s:changeitem = 'change\ "' . escape(w, ' .'). '"\ to'
916 let s:fromword = w
917 let pri = 1
Bram Moolenaar62292582010-07-10 16:36:59 +0200918 " set 'cpo' to include the <CR>
919 let cpo_save = &cpo
920 set cpo&vim
Bram Moolenaar45360022005-07-21 21:08:21 +0000921 for sug in s:suglist
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000922 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
Bram Moolenaar45360022005-07-21 21:08:21 +0000923 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
924 let pri += 1
925 endfor
926
927 let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000928 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000929
930 let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000931 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000932
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000933 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar62292582010-07-10 16:36:59 +0200934 let &cpo = cpo_save
Bram Moolenaar45360022005-07-21 21:08:21 +0000935 endif
936 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200937 call cursor(0, curcol) " put the cursor back where it was
Bram Moolenaar45360022005-07-21 21:08:21 +0000938 endfunc
939
940 func! <SID>SpellReplace(n)
941 let l = getline('.')
Bram Moolenaar62292582010-07-10 16:36:59 +0200942 " Move the cursor to the start of the word.
943 call spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000944 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
945 \ . strpart(l, col('.') + len(s:fromword) - 1))
946 endfunc
947
948 func! <SID>SpellDel()
949 exe "aunmenu PopUp." . s:changeitem
950 exe "aunmenu PopUp." . s:additem
951 exe "aunmenu PopUp." . s:ignoreitem
952 aunmenu PopUp.-SpellSep-
953 let s:changeitem = ''
954 endfun
955
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000956 augroup SpellPopupMenu
957 au! MenuPopup * call <SID>SpellPopup()
958 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +0000959endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000960
961" The GUI toolbar (for MS-Windows and GTK)
962if has("toolbar")
963 an 1.10 ToolBar.Open :browse confirm e<CR>
964 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
965 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
966
967 if has("printer")
968 an 1.40 ToolBar.Print :hardcopy<CR>
969 vunmenu ToolBar.Print
970 vnoremenu ToolBar.Print :hardcopy<CR>
971 elseif has("unix")
972 an 1.40 ToolBar.Print :w !lpr<CR>
973 vunmenu ToolBar.Print
974 vnoremenu ToolBar.Print :w !lpr<CR>
975 endif
976
977 an 1.45 ToolBar.-sep1- <Nop>
978 an 1.50 ToolBar.Undo u
979 an 1.60 ToolBar.Redo <C-R>
980
981 an 1.65 ToolBar.-sep2- <Nop>
982 vnoremenu 1.70 ToolBar.Cut "+x
983 vnoremenu 1.80 ToolBar.Copy "+y
984 cnoremenu 1.80 ToolBar.Copy <C-Y>
985 nnoremenu 1.90 ToolBar.Paste "+gP
986 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000987 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
988 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000989
990 if !has("gui_athena")
991 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000992 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000993 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000994 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +0000995 an 1.110 ToolBar.FindNext n
996 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +0000997 endif
998
Bram Moolenaar071d4272004-06-13 20:20:40 +0000999 an 1.215 ToolBar.-sep5- <Nop>
1000 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
1001 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
1002 an 1.240 ToolBar.RunScript :browse so<CR>
1003
1004 an 1.245 ToolBar.-sep6- <Nop>
1005 an 1.250 ToolBar.Make :make<CR>
1006 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
1007 an 1.280 ToolBar.TagJump g<C-]>
1008
1009 an 1.295 ToolBar.-sep7- <Nop>
1010 an 1.300 ToolBar.Help :help<CR>
1011 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1012
1013" Only set the tooltips here if not done in a language menu file
1014if exists("*Do_toolbar_tmenu")
1015 call Do_toolbar_tmenu()
1016else
1017 let did_toolbar_tmenu = 1
1018 tmenu ToolBar.Open Open file
1019 tmenu ToolBar.Save Save current file
1020 tmenu ToolBar.SaveAll Save all files
1021 tmenu ToolBar.Print Print
1022 tmenu ToolBar.Undo Undo
1023 tmenu ToolBar.Redo Redo
1024 tmenu ToolBar.Cut Cut to clipboard
1025 tmenu ToolBar.Copy Copy to clipboard
1026 tmenu ToolBar.Paste Paste from Clipboard
1027 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001028 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001029 tmenu ToolBar.FindNext Find Next
1030 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001031 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001032 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001033 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001034 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001035 tmenu ToolBar.Make Make current project (:make)
1036 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001037 tmenu ToolBar.TagJump Jump to tag under cursor
1038 tmenu ToolBar.Help Vim Help
1039 tmenu ToolBar.FindHelp Search Vim Help
1040endif
1041
1042" Select a session to load; default to current session name if present
1043fun! s:LoadVimSesn()
1044 if strlen(v:this_session) > 0
Bram Moolenaaraba88572008-06-25 20:13:35 +00001045 let name = s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001046 else
1047 let name = "Session.vim"
1048 endif
1049 execute "browse so " . name
1050endfun
1051
1052" Select a session to save; default to current session name if present
1053fun! s:SaveVimSesn()
1054 if strlen(v:this_session) == 0
1055 let v:this_session = "Session.vim"
1056 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +00001057 execute "browse mksession! " . s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001058endfun
1059
1060endif
1061
1062endif " !exists("did_install_default_menus")
1063
1064" Define these items always, so that syntax can be switched on when it wasn't.
1065" But skip them when the Syntax menu was disabled by the user.
1066if !exists("did_install_syntax_menu")
1067 an 50.212 &Syntax.&Manual :syn manual<CR>
1068 an 50.214 &Syntax.A&utomatic :syn on<CR>
1069 an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
1070 if !exists("*s:SynOnOff")
1071 fun s:SynOnOff()
1072 if has("syntax_items")
1073 syn clear
1074 else
1075 if !exists("g:syntax_on")
1076 syn manual
1077 endif
1078 set syn=ON
1079 endif
1080 endfun
1081 endif
1082endif
1083
1084
1085" Install the Syntax menu only when filetype.vim has been loaded or when
1086" manual syntax highlighting is enabled.
1087" Avoid installing the Syntax menu twice.
1088if (exists("did_load_filetypes") || exists("syntax_on"))
1089 \ && !exists("did_install_syntax_menu")
1090 let did_install_syntax_menu = 1
1091
1092" Skip setting up the individual syntax selection menus unless
1093" do_syntax_sel_menu is defined (it takes quite a bit of time).
1094if exists("do_syntax_sel_menu")
1095 runtime! synmenu.vim
1096else
1097 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>
1098 an 50.195 &Syntax.-SEP1- <Nop>
1099endif
1100
1101an 50.210 &Syntax.&Off :syn off<CR>
1102an 50.700 &Syntax.-SEP3- <Nop>
1103an 50.710 &Syntax.Co&lor\ test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1104an 50.720 &Syntax.&Highlight\ test :runtime syntax/hitest.vim<CR>
1105an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1106
1107endif " !exists("did_install_syntax_menu")
1108
Bram Moolenaar071d4272004-06-13 20:20:40 +00001109" Restore the previous value of 'cpoptions'.
1110let &cpo = s:cpo_save
1111unlet s:cpo_save
1112
1113" vim: set sw=2 :