blob: 0c9b743f6a8377d1454643190f4762461fb2c5da [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 Moolenaar040c1fe2017-11-09 19:45:48 +01005" Last Change: 2017 Nov 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>
Bram Moolenaar214641f2017-03-05 17:04:09 +010073an 9999.30 &Help.&How-To\ Links :help how-to<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +000074an <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>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100115 an 10.410 &File.Split\ &Diff\ With\.\.\. :browse vert diffsplit<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000116 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
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100162if has("win32")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000163 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 Moolenaar040c1fe2017-11-09 19:45:48 +0100170if has("win32") || 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 Moolenaar42ebd062016-07-17 13:35:14 +0200191 elseif has("win32")
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000192 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>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100217an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignoring\ Case<Tab>:set\ ic! :set ic! ic?<CR>
218an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showing\ Matched\ Pairs<Tab>:set\ sm! :set sm! sm?<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000219
Bram Moolenaar214641f2017-03-05 17:04:09 +0100220an 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>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000228
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>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100231an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ Mode :set ve=insert<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000232an 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>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100235an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatibility<Tab>:set\ cp! :set cp!<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000236an <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 Moolenaar214641f2017-03-05 17:04:09 +0100279an 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>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100281an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrapping<Tab>:set\ wrap! :set wrap! wrap?<CR>
282an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rapping\ at\ Word<Tab>:set\ lbr! :set lbr! lbr?<CR>
283an 20.440.160 &Edit.F&ile\ Settings.Toggle\ Tab\ &Expanding<Tab>:set\ et! :set et! et?<CR>
284an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &Auto\ Indenting<Tab>:set\ ai! :set ai! ai?<CR>
285an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-Style\ Indenting<Tab>:set\ cin! :set cin! cin?<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000286
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*", "", "")
Bram Moolenaar214641f2017-03-05 17:04:09 +0100314 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 Moolenaar040c1fe2017-11-09 19:45:48 +0100342let s:did_setup_color_schemes = 0
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200343
Bram Moolenaar071d4272004-06-13 20:20:40 +0000344" Setup the Edit.Color Scheme submenu
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100345func! s:SetupColorSchemes() abort
346 if s:did_setup_color_schemes
347 return
348 endif
349 let s:did_setup_color_schemes = 1
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200350
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100351 let n = globpath(&runtimepath, "colors/*.vim", 1, 1)
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200352
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100353 " Ignore case for VMS and windows, sort on name
354 let names = sort(map(n, 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200355
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100356 " define all the submenu entries
357 let idx = 100
358 for name in names
359 exe "an 20.450." . idx . ' &Edit.C&olor\ Scheme.' . name . " :colors " . name . "<CR>"
360 let idx = idx + 10
361 endfor
362 silent! aunmenu &Edit.Show\ C&olor\ Schemes\ in\ Menu
363endfun
364if exists("do_no_lazyload_menus")
365 call s:SetupColorSchemes()
366else
367 an <silent> 20.450 &Edit.Show\ C&olor\ Schemes\ in\ Menu :call <SID>SetupColorSchemes()<CR>
368endif
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200369
Bram Moolenaar071d4272004-06-13 20:20:40 +0000370
371" Setup the Edit.Keymap submenu
372if has("keymap")
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100373 let s:did_setup_keymaps = 0
374
375 func! s:SetupKeymaps() abort
376 if s:did_setup_keymaps
377 return
378 endif
379 let s:did_setup_keymaps = 1
380
381 let n = globpath(&runtimepath, "keymap/*.vim", 1, 1)
382 if !empty(n)
383 let idx = 100
384 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
385 for name in n
386 " Ignore case for VMS and windows
387 let name = substitute(name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
388 exe "an 20.460." . idx . ' &Edit.&Keymap.' . name . " :set keymap=" . name . "<CR>"
389 let idx = idx + 10
390 endfor
391 endif
392 silent! aunmenu &Edit.Show\ &Keymaps\ in\ Menu
393 endfun
394 if exists("do_no_lazyload_menus")
395 call s:SetupKeymaps()
396 else
397 an <silent> 20.460 &Edit.Show\ &Keymaps\ in\ Menu :call <SID>SetupKeymaps()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000398 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000399endif
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100400if has("win32") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000401 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
402endif
403
404" Programming menu
405if !exists("g:ctags_command")
406 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000407 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000408 else
409 let g:ctags_command = "ctags -R ."
410 endif
411endif
412
Bram Moolenaar214641f2017-03-05 17:04:09 +0100413an 40.300 &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
414vunmenu &Tools.&Jump\ to\ This\ Tag<Tab>g^]
415vnoremenu &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
416an 40.310 &Tools.Jump\ &Back<Tab>^T <C-T>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000417an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
418
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000419if has("folding") || has("spell")
420 an 40.330 &Tools.-SEP1- <Nop>
421endif
422
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000423" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000424if has("spell")
425 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
426 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100427 an 40.335.130 &Tools.&Spelling.To\ &Next\ Error<Tab>]s ]s
428 an 40.335.130 &Tools.&Spelling.To\ &Previous\ Error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000429 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar214641f2017-03-05 17:04:09 +0100430 an 40.335.150 &Tools.&Spelling.&Repeat\ Correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000431 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100432 an 40.335.210 &Tools.&Spelling.Set\ Language\ to\ "en" :set spl=en spell<CR>
433 an 40.335.220 &Tools.&Spelling.Set\ Language\ to\ "en_au" :set spl=en_au spell<CR>
434 an 40.335.230 &Tools.&Spelling.Set\ Language\ to\ "en_ca" :set spl=en_ca spell<CR>
435 an 40.335.240 &Tools.&Spelling.Set\ Language\ to\ "en_gb" :set spl=en_gb spell<CR>
436 an 40.335.250 &Tools.&Spelling.Set\ Language\ to\ "en_nz" :set spl=en_nz spell<CR>
437 an 40.335.260 &Tools.&Spelling.Set\ Language\ to\ "en_us" :set spl=en_us spell<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000438 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
439
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000440 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000441 func! s:SpellLang()
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000442 for cmd in s:undo_spellang
443 exe "silent! " . cmd
444 endfor
445 let s:undo_spellang = []
446
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000447 if &enc == "iso-8859-15"
448 let enc = "latin1"
449 else
450 let enc = &enc
451 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000452
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200453 if !exists("g:menutrans_set_lang_to")
Bram Moolenaar214641f2017-03-05 17:04:09 +0100454 let g:menutrans_set_lang_to = 'Set Language to'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200455 endif
456
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000457 let found = 0
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100458 let s = globpath(&runtimepath, "spell/*." . enc . ".spl", 1, 1)
459 if !empty(s)
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000460 let n = 300
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100461 for f in s
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000462 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000463 if nm != "en" && nm !~ '/'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200464 let _nm = nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000465 let found += 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200466 let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"'
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000467 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
468 let s:undo_spellang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000469 endif
470 let n += 10
471 endfor
472 endif
473 if found == 0
474 echomsg "Could not find other spell files"
475 elseif found == 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200476 echomsg "Found spell file " . _nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000477 else
478 echomsg "Found " . found . " more spell files"
479 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000480 " Need to redo this when 'encoding' is changed.
481 augroup spellmenu
482 au! EncodingChanged * call <SID>SpellLang()
483 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000484 endfun
485
486endif
487
Bram Moolenaar071d4272004-06-13 20:20:40 +0000488" Tools.Fold Menu
489if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000490 " open close folds
Bram Moolenaar214641f2017-03-05 17:04:09 +0100491 an 40.340.110 &Tools.&Folding.&Enable/Disable\ Folds<Tab>zi zi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000492 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
Bram Moolenaar214641f2017-03-05 17:04:09 +0100493 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx zMzx
494 inoremenu 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx <C-O>zM<C-O>zx
495 an 40.340.130 &Tools.&Folding.C&lose\ More\ Folds<Tab>zm zm
496 an 40.340.140 &Tools.&Folding.&Close\ All\ Folds<Tab>zM zM
497 an 40.340.150 &Tools.&Folding.O&pen\ More\ Folds<Tab>zr zr
Bram Moolenaar3df01732017-02-17 22:47:16 +0100498 an 40.340.160 &Tools.&Folding.&Open\ All\ Folds<Tab>zR zR
Bram Moolenaar071d4272004-06-13 20:20:40 +0000499 " fold method
500 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
501 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
502 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
503 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
504 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
505 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
506 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
507 " create and delete folds
508 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
509 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
510 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
511 " moving around in folds
512 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100513 an 40.340.310.10 &Tools.&Folding.Fold\ Col&umn\ Width.\ &0\ :set fdc=0<CR>
514 an 40.340.310.20 &Tools.&Folding.Fold\ Col&umn\ Width.\ &2\ :set fdc=2<CR>
515 an 40.340.310.30 &Tools.&Folding.Fold\ Col&umn\ Width.\ &3\ :set fdc=3<CR>
516 an 40.340.310.40 &Tools.&Folding.Fold\ Col&umn\ Width.\ &4\ :set fdc=4<CR>
517 an 40.340.310.50 &Tools.&Folding.Fold\ Col&umn\ Width.\ &5\ :set fdc=5<CR>
518 an 40.340.310.60 &Tools.&Folding.Fold\ Col&umn\ Width.\ &6\ :set fdc=6<CR>
519 an 40.340.310.70 &Tools.&Folding.Fold\ Col&umn\ Width.\ &7\ :set fdc=7<CR>
520 an 40.340.310.80 &Tools.&Folding.Fold\ Col&umn\ Width.\ &8\ :set fdc=8<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000521endif " has folding
522
523if has("diff")
524 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
525 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
526 vunmenu &Tools.&Diff.&Get\ Block
527 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
528 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
529 vunmenu &Tools.&Diff.&Put\ Block
530 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
531endif
532
533an 40.358 &Tools.-SEP2- <Nop>
534an 40.360 &Tools.&Make<Tab>:make :make<CR>
535an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
536an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
537an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
538an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
539an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
540an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
541an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
542an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
543an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
544
545an 40.520 &Tools.-SEP3- <Nop>
546an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
547 \ :call <SID>XxdConv()<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100548an <silent> 40.540 &Tools.Conve&rt\ Back<Tab>:%!xxd\ -r
Bram Moolenaar071d4272004-06-13 20:20:40 +0000549 \ :call <SID>XxdBack()<CR>
550
551" Use a function to do the conversion, so that it also works with 'insertmode'
552" set.
553func! s:XxdConv()
554 let mod = &mod
555 if has("vms")
556 %!mc vim:xxd
557 else
558 call s:XxdFind()
559 exe '%!"' . g:xxdprogram . '"'
560 endif
561 if getline(1) =~ "^0000000:" " only if it worked
562 set ft=xxd
563 endif
564 let &mod = mod
565endfun
566
567func! s:XxdBack()
568 let mod = &mod
569 if has("vms")
570 %!mc vim:xxd -r
571 else
572 call s:XxdFind()
573 exe '%!"' . g:xxdprogram . '" -r'
574 endif
575 set ft=
576 doautocmd filetypedetect BufReadPost
577 let &mod = mod
578endfun
579
580func! s:XxdFind()
581 if !exists("g:xxdprogram")
582 " On the PC xxd may not be in the path but in the install directory
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200583 if has("win32") && !executable("xxd")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000584 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
585 else
586 let g:xxdprogram = "xxd"
587 endif
588 endif
589endfun
590
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100591let s:did_setup_compilers = 0
592
Bram Moolenaar071d4272004-06-13 20:20:40 +0000593" Setup the Tools.Compiler submenu
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100594func! s:SetupCompilers() abort
595 if s:did_setup_compilers
596 return
Bram Moolenaar071d4272004-06-13 20:20:40 +0000597 endif
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100598 let s:did_setup_compilers = 1
599
600 let n = globpath(&runtimepath, "compiler/*.vim", 1, 1)
601 let idx = 100
602 for name in n
603 " Ignore case for VMS and windows
604 let name = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
605 exe "an 30.440." . idx . ' &Tools.Se&t\ Compiler.' . name . " :compiler " . name . "<CR>"
606 let idx = idx + 10
607 endfor
608 silent! aunmenu &Tools.Show\ Compiler\ Se&ttings\ in\ Menu
609endfun
610if exists("do_no_lazyload_menus")
611 call s:SetupCompilers()
612else
613 an <silent> 30.440 &Tools.Show\ Compiler\ Se&ttings\ in\ Menu :call <SID>SetupCompilers()<CR>
614endif
615
616" Load ColorScheme, Compiler Setting and Keymap menus when idle.
617if !exists("do_no_lazyload_menus")
618 func! s:SetupLazyloadMenus()
619 call s:SetupColorSchemes()
620 call s:SetupCompilers()
621 if has("keymap")
622 call s:SetupKeymaps()
623 endif
624 endfunc
625 augroup SetupLazyloadMenus
626 au!
627 au CursorHold,CursorHoldI * call <SID>SetupLazyloadMenus() | au! SetupLazyloadMenus
628 augroup END
629endif
630
Bram Moolenaar071d4272004-06-13 20:20:40 +0000631
632if !exists("no_buffers_menu")
633
634" Buffer list menu -- Setup functions & actions
635
636" wait with building the menu until after loading 'session' files. Makes
637" startup faster.
638let s:bmenu_wait = 1
639
640if !exists("bmenu_priority")
641 let bmenu_priority = 60
642endif
643
644func! s:BMAdd()
645 if s:bmenu_wait == 0
646 " when adding too many buffers, redraw in short format
647 if s:bmenu_count == &menuitems && s:bmenu_short == 0
648 call s:BMShow()
649 else
650 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
651 let s:bmenu_count = s:bmenu_count + 1
652 endif
653 endif
654endfunc
655
656func! s:BMRemove()
657 if s:bmenu_wait == 0
658 let name = expand("<afile>")
659 if isdirectory(name)
660 return
661 endif
662 let munge = <SID>BMMunge(name, expand("<abuf>"))
663
664 if s:bmenu_short == 0
665 exe 'silent! aun &Buffers.' . munge
666 else
667 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
668 endif
669 let s:bmenu_count = s:bmenu_count - 1
670 endif
671endfunc
672
673" Create the buffer menu (delete an existing one first).
674func! s:BMShow(...)
675 let s:bmenu_wait = 1
676 let s:bmenu_short = 1
677 let s:bmenu_count = 0
678 "
679 " get new priority, if exists
680 if a:0 == 1
681 let g:bmenu_priority = a:1
682 endif
683
684 " remove old menu, if exists; keep one entry to avoid a torn off menu to
685 " disappear.
686 silent! unmenu &Buffers
687 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
688 silent! unmenu! &Buffers
689
690 " create new menu; set 'cpo' to include the <CR>
691 let cpo_save = &cpo
692 set cpo&vim
693 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
694 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
695 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
696 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
697 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
698 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
699 let &cpo = cpo_save
700 unmenu &Buffers.Dummy
701
702 " figure out how many buffers there are
703 let buf = 1
704 while buf <= bufnr('$')
705 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000706 let s:bmenu_count = s:bmenu_count + 1
707 endif
708 let buf = buf + 1
709 endwhile
710 if s:bmenu_count <= &menuitems
711 let s:bmenu_short = 0
712 endif
713
714 " iterate through buffer list, adding each buffer to the menu:
715 let buf = 1
716 while buf <= bufnr('$')
717 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000718 call <SID>BMFilename(bufname(buf), buf)
719 endif
720 let buf = buf + 1
721 endwhile
722 let s:bmenu_wait = 0
723 aug buffer_list
724 au!
725 au BufCreate,BufFilePost * call <SID>BMAdd()
726 au BufDelete,BufFilePre * call <SID>BMRemove()
727 aug END
728endfunc
729
730func! s:BMHash(name)
731 " Make name all upper case, so that chars are between 32 and 96
732 let nm = substitute(a:name, ".*", '\U\0', "")
733 if has("ebcdic")
734 " HACK: Replace all non alphabetics with 'Z'
735 " Just to make it work for now.
736 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
737 let sp = char2nr('A') - 1
738 else
739 let sp = char2nr(' ')
740 endif
741 " convert first six chars into a number for sorting:
742 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)
743endfunc
744
745func! s:BMHash2(name)
746 let nm = substitute(a:name, ".", '\L\0', "")
747 " Not exactly right for EBCDIC...
748 if nm[0] < 'a' || nm[0] > 'z'
749 return '&others.'
750 elseif nm[0] <= 'd'
751 return '&abcd.'
752 elseif nm[0] <= 'h'
753 return '&efgh.'
754 elseif nm[0] <= 'l'
755 return '&ijkl.'
756 elseif nm[0] <= 'p'
757 return '&mnop.'
758 elseif nm[0] <= 't'
759 return '&qrst.'
760 else
761 return '&u-z.'
762 endif
763endfunc
764
765" insert a buffer name into the buffer menu:
766func! s:BMFilename(name, num)
767 if isdirectory(a:name)
768 return
769 endif
770 let munge = <SID>BMMunge(a:name, a:num)
771 let hash = <SID>BMHash(munge)
772 if s:bmenu_short == 0
773 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
774 else
775 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
776 endif
777 " set 'cpo' to include the <CR>
778 let cpo_save = &cpo
779 set cpo&vim
780 exe name . ' :confirm b' . a:num . '<CR>'
781 let &cpo = cpo_save
782endfunc
783
784" Truncate a long path to fit it in a menu item.
785if !exists("g:bmenu_max_pathlen")
786 let g:bmenu_max_pathlen = 35
787endif
788func! s:BMTruncName(fname)
789 let name = a:fname
790 if g:bmenu_max_pathlen < 5
791 let name = ""
792 else
793 let len = strlen(name)
794 if len > g:bmenu_max_pathlen
795 let amountl = (g:bmenu_max_pathlen / 2) - 2
796 let amountr = g:bmenu_max_pathlen - amountl - 3
797 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
798 let left = substitute(name, pattern, '\1', '')
799 let right = substitute(name, pattern, '\2', '')
800 if strlen(left) + strlen(right) < len
801 let name = left . '...' . right
802 endif
803 endif
804 endif
805 return name
806endfunc
807
808func! s:BMMunge(fname, bnum)
809 let name = a:fname
810 if name == ''
811 if !exists("g:menutrans_no_file")
812 let g:menutrans_no_file = "[No file]"
813 endif
814 let name = g:menutrans_no_file
815 else
816 let name = fnamemodify(name, ':p:~')
817 endif
818 " detach file name and separate it out:
819 let name2 = fnamemodify(name, ':t')
820 if a:bnum >= 0
821 let name2 = name2 . ' (' . a:bnum . ')'
822 endif
823 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
824 let name = escape(name, "\\. \t|")
825 let name = substitute(name, "&", "&&", "g")
826 let name = substitute(name, "\n", "^@", "g")
827 return name
828endfunc
829
830" When just starting Vim, load the buffer menu later
831if has("vim_starting")
832 augroup LoadBufferMenu
833 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
834 au VimEnter * au! LoadBufferMenu
835 augroup END
836else
837 call <SID>BMShow()
838endif
839
840endif " !exists("no_buffers_menu")
841
842" Window menu
843an 70.300 &Window.&New<Tab>^Wn <C-W>n
844an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
845an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
846an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
847if has("vertsplit")
848 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
849 if !exists("*MenuExplOpen")
850 fun MenuExplOpen()
851 if @% == ""
852 20vsp .
853 else
Bram Moolenaaraba88572008-06-25 20:13:35 +0000854 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000855 endif
856 endfun
857 endif
858endif
859an 70.335 &Window.-SEP1- <Nop>
860an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
861an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
862an 70.350 &Window.-SEP2- <Nop>
863an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
864an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
Bram Moolenaar214641f2017-03-05 17:04:09 +0100865an 70.355 &Window.Move\ &To.&Left\ Side<Tab>^WH <C-W>H
866an 70.355 &Window.Move\ &To.&Right\ Side<Tab>^WL <C-W>L
Bram Moolenaar071d4272004-06-13 20:20:40 +0000867an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
868an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
869an 70.365 &Window.-SEP3- <Nop>
870an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
871an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
872an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
873an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
874an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
875
876" The popup menu
877an 1.10 PopUp.&Undo u
878an 1.15 PopUp.-SEP1- <Nop>
879vnoremenu 1.20 PopUp.Cu&t "+x
880vnoremenu 1.30 PopUp.&Copy "+y
881cnoremenu 1.30 PopUp.&Copy <C-Y>
882nnoremenu 1.40 PopUp.&Paste "+gP
883cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000884exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
885exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000886vnoremenu 1.50 PopUp.&Delete x
887an 1.55 PopUp.-SEP2- <Nop>
888vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000889
890nnoremenu 1.70 PopUp.Select\ &Word vaw
891onoremenu 1.70 PopUp.Select\ &Word aw
892vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
893inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
894cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
895
896nnoremenu 1.73 PopUp.Select\ &Sentence vas
897onoremenu 1.73 PopUp.Select\ &Sentence as
898vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
899inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
900cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
901
902nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
903onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
904vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
905inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
906cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
907
908nnoremenu 1.80 PopUp.Select\ &Line V
909onoremenu 1.80 PopUp.Select\ &Line <C-C>V
910vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
911inoremenu 1.80 PopUp.Select\ &Line <C-O>V
912cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
913
914nnoremenu 1.90 PopUp.Select\ &Block <C-V>
915onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
916vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
917inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
918cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
919
Bram Moolenaar071d4272004-06-13 20:20:40 +0000920noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
921inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
922cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
923
Bram Moolenaar45360022005-07-21 21:08:21 +0000924if has("spell")
925 " Spell suggestions in the popup menu. Note that this will slow down the
926 " appearance of the menu!
927 func! <SID>SpellPopup()
928 if exists("s:changeitem") && s:changeitem != ''
929 call <SID>SpellDel()
930 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000931
932 " Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000933 if !&spell || &spelllang == ''
934 return
935 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000936
937 let curcol = col('.')
Bram Moolenaar1c7715d2005-10-03 22:02:18 +0000938 let [w, a] = spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000939 if col('.') > curcol " don't use word after the cursor
940 let w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +0000941 endif
942 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000943 if a == 'caps'
944 let s:suglist = [substitute(w, '.*', '\u&', '')]
945 else
946 let s:suglist = spellsuggest(w, 10)
947 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200948 if len(s:suglist) > 0
Bram Moolenaar214641f2017-03-05 17:04:09 +0100949 let s:changeitem = 'Change\ "' . escape(w, ' .'). '"\ to'
Bram Moolenaar45360022005-07-21 21:08:21 +0000950 let s:fromword = w
951 let pri = 1
Bram Moolenaar62292582010-07-10 16:36:59 +0200952 " set 'cpo' to include the <CR>
953 let cpo_save = &cpo
954 set cpo&vim
Bram Moolenaar45360022005-07-21 21:08:21 +0000955 for sug in s:suglist
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000956 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
Bram Moolenaar45360022005-07-21 21:08:21 +0000957 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
958 let pri += 1
959 endfor
960
Bram Moolenaar214641f2017-03-05 17:04:09 +0100961 let s:additem = 'Add\ "' . escape(w, ' .') . '"\ to\ Word\ List'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000962 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000963
Bram Moolenaar214641f2017-03-05 17:04:09 +0100964 let s:ignoreitem = 'Ignore\ "' . escape(w, ' .') . '"'
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000965 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000966
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000967 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar62292582010-07-10 16:36:59 +0200968 let &cpo = cpo_save
Bram Moolenaar45360022005-07-21 21:08:21 +0000969 endif
970 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200971 call cursor(0, curcol) " put the cursor back where it was
Bram Moolenaar45360022005-07-21 21:08:21 +0000972 endfunc
973
974 func! <SID>SpellReplace(n)
975 let l = getline('.')
Bram Moolenaar62292582010-07-10 16:36:59 +0200976 " Move the cursor to the start of the word.
977 call spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000978 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
979 \ . strpart(l, col('.') + len(s:fromword) - 1))
980 endfunc
981
982 func! <SID>SpellDel()
983 exe "aunmenu PopUp." . s:changeitem
984 exe "aunmenu PopUp." . s:additem
985 exe "aunmenu PopUp." . s:ignoreitem
986 aunmenu PopUp.-SpellSep-
987 let s:changeitem = ''
988 endfun
989
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000990 augroup SpellPopupMenu
991 au! MenuPopup * call <SID>SpellPopup()
992 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +0000993endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000994
995" The GUI toolbar (for MS-Windows and GTK)
996if has("toolbar")
997 an 1.10 ToolBar.Open :browse confirm e<CR>
998 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
999 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
1000
1001 if has("printer")
1002 an 1.40 ToolBar.Print :hardcopy<CR>
1003 vunmenu ToolBar.Print
1004 vnoremenu ToolBar.Print :hardcopy<CR>
1005 elseif has("unix")
1006 an 1.40 ToolBar.Print :w !lpr<CR>
1007 vunmenu ToolBar.Print
1008 vnoremenu ToolBar.Print :w !lpr<CR>
1009 endif
1010
1011 an 1.45 ToolBar.-sep1- <Nop>
1012 an 1.50 ToolBar.Undo u
1013 an 1.60 ToolBar.Redo <C-R>
1014
1015 an 1.65 ToolBar.-sep2- <Nop>
1016 vnoremenu 1.70 ToolBar.Cut "+x
1017 vnoremenu 1.80 ToolBar.Copy "+y
1018 cnoremenu 1.80 ToolBar.Copy <C-Y>
1019 nnoremenu 1.90 ToolBar.Paste "+gP
1020 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001021 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
1022 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +00001023
1024 if !has("gui_athena")
1025 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001026 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001027 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001028 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001029 an 1.110 ToolBar.FindNext n
1030 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +00001031 endif
1032
Bram Moolenaar071d4272004-06-13 20:20:40 +00001033 an 1.215 ToolBar.-sep5- <Nop>
1034 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
1035 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
1036 an 1.240 ToolBar.RunScript :browse so<CR>
1037
1038 an 1.245 ToolBar.-sep6- <Nop>
1039 an 1.250 ToolBar.Make :make<CR>
1040 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
1041 an 1.280 ToolBar.TagJump g<C-]>
1042
1043 an 1.295 ToolBar.-sep7- <Nop>
1044 an 1.300 ToolBar.Help :help<CR>
1045 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1046
1047" Only set the tooltips here if not done in a language menu file
1048if exists("*Do_toolbar_tmenu")
1049 call Do_toolbar_tmenu()
1050else
1051 let did_toolbar_tmenu = 1
1052 tmenu ToolBar.Open Open file
1053 tmenu ToolBar.Save Save current file
1054 tmenu ToolBar.SaveAll Save all files
1055 tmenu ToolBar.Print Print
1056 tmenu ToolBar.Undo Undo
1057 tmenu ToolBar.Redo Redo
1058 tmenu ToolBar.Cut Cut to clipboard
1059 tmenu ToolBar.Copy Copy to clipboard
1060 tmenu ToolBar.Paste Paste from Clipboard
1061 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001062 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001063 tmenu ToolBar.FindNext Find Next
1064 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001065 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001066 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001067 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001068 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001069 tmenu ToolBar.Make Make current project (:make)
1070 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001071 tmenu ToolBar.TagJump Jump to tag under cursor
1072 tmenu ToolBar.Help Vim Help
1073 tmenu ToolBar.FindHelp Search Vim Help
1074endif
1075
1076" Select a session to load; default to current session name if present
1077fun! s:LoadVimSesn()
1078 if strlen(v:this_session) > 0
Bram Moolenaaraba88572008-06-25 20:13:35 +00001079 let name = s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001080 else
1081 let name = "Session.vim"
1082 endif
1083 execute "browse so " . name
1084endfun
1085
1086" Select a session to save; default to current session name if present
1087fun! s:SaveVimSesn()
1088 if strlen(v:this_session) == 0
1089 let v:this_session = "Session.vim"
1090 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +00001091 execute "browse mksession! " . s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001092endfun
1093
1094endif
1095
1096endif " !exists("did_install_default_menus")
1097
1098" Define these items always, so that syntax can be switched on when it wasn't.
1099" But skip them when the Syntax menu was disabled by the user.
1100if !exists("did_install_syntax_menu")
1101 an 50.212 &Syntax.&Manual :syn manual<CR>
1102 an 50.214 &Syntax.A&utomatic :syn on<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001103 an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001104 if !exists("*s:SynOnOff")
1105 fun s:SynOnOff()
1106 if has("syntax_items")
1107 syn clear
1108 else
1109 if !exists("g:syntax_on")
1110 syn manual
1111 endif
1112 set syn=ON
1113 endif
1114 endfun
1115 endif
1116endif
1117
1118
1119" Install the Syntax menu only when filetype.vim has been loaded or when
1120" manual syntax highlighting is enabled.
1121" Avoid installing the Syntax menu twice.
1122if (exists("did_load_filetypes") || exists("syntax_on"))
1123 \ && !exists("did_install_syntax_menu")
1124 let did_install_syntax_menu = 1
1125
1126" Skip setting up the individual syntax selection menus unless
1127" do_syntax_sel_menu is defined (it takes quite a bit of time).
1128if exists("do_syntax_sel_menu")
1129 runtime! synmenu.vim
1130else
Bram Moolenaar040c1fe2017-11-09 19:45:48 +01001131 an <silent> 50.10 &Syntax.&Show\ File\ Types\ in\ Menu :let do_syntax_sel_menu = 1<Bar>runtime! synmenu.vim<Bar>aunmenu &Syntax.&Show\ File\ Types\ in\ Menu<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001132 an 50.195 &Syntax.-SEP1- <Nop>
1133endif
1134
1135an 50.210 &Syntax.&Off :syn off<CR>
1136an 50.700 &Syntax.-SEP3- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001137an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1138an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001139an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1140
1141endif " !exists("did_install_syntax_menu")
1142
Bram Moolenaar071d4272004-06-13 20:20:40 +00001143" Restore the previous value of 'cpoptions'.
1144let &cpo = s:cpo_save
1145unlet s:cpo_save
1146
1147" vim: set sw=2 :