blob: b9bd3d89cabe58cab9a0d05f08263d53ae70e599 [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 Moolenaar7c63fbc2018-05-17 13:15:23 +02005" Last Change: 2018 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>
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")
Bram Moolenaar6dc819b2018-07-03 16:42:19 +0200812 let g:menutrans_no_file = "[No Name]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000813 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 Moolenaar7c63fbc2018-05-17 13:15:23 +0200949 if !exists("g:menutrans_spell_change_ARG_to")
950 let g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to'
951 endif
952 let s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .'))
Bram Moolenaar45360022005-07-21 21:08:21 +0000953 let s:fromword = w
954 let pri = 1
Bram Moolenaar62292582010-07-10 16:36:59 +0200955 " set 'cpo' to include the <CR>
956 let cpo_save = &cpo
957 set cpo&vim
Bram Moolenaar45360022005-07-21 21:08:21 +0000958 for sug in s:suglist
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000959 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
Bram Moolenaar45360022005-07-21 21:08:21 +0000960 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
961 let pri += 1
962 endfor
963
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +0200964 if !exists("g:menutrans_spell_add_ARG_to_word_list")
965 let g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List'
966 endif
967 let s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .'))
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000968 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000969
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +0200970 if !exists("g:menutrans_spell_ignore_ARG")
971 let g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"'
972 endif
973 let s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .'))
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000974 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000975
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000976 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar62292582010-07-10 16:36:59 +0200977 let &cpo = cpo_save
Bram Moolenaar45360022005-07-21 21:08:21 +0000978 endif
979 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200980 call cursor(0, curcol) " put the cursor back where it was
Bram Moolenaar45360022005-07-21 21:08:21 +0000981 endfunc
982
983 func! <SID>SpellReplace(n)
984 let l = getline('.')
Bram Moolenaar62292582010-07-10 16:36:59 +0200985 " Move the cursor to the start of the word.
986 call spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000987 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
988 \ . strpart(l, col('.') + len(s:fromword) - 1))
989 endfunc
990
991 func! <SID>SpellDel()
992 exe "aunmenu PopUp." . s:changeitem
993 exe "aunmenu PopUp." . s:additem
994 exe "aunmenu PopUp." . s:ignoreitem
995 aunmenu PopUp.-SpellSep-
996 let s:changeitem = ''
997 endfun
998
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000999 augroup SpellPopupMenu
1000 au! MenuPopup * call <SID>SpellPopup()
1001 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +00001002endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00001003
1004" The GUI toolbar (for MS-Windows and GTK)
1005if has("toolbar")
1006 an 1.10 ToolBar.Open :browse confirm e<CR>
1007 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
1008 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
1009
1010 if has("printer")
1011 an 1.40 ToolBar.Print :hardcopy<CR>
1012 vunmenu ToolBar.Print
1013 vnoremenu ToolBar.Print :hardcopy<CR>
1014 elseif has("unix")
1015 an 1.40 ToolBar.Print :w !lpr<CR>
1016 vunmenu ToolBar.Print
1017 vnoremenu ToolBar.Print :w !lpr<CR>
1018 endif
1019
1020 an 1.45 ToolBar.-sep1- <Nop>
1021 an 1.50 ToolBar.Undo u
1022 an 1.60 ToolBar.Redo <C-R>
1023
1024 an 1.65 ToolBar.-sep2- <Nop>
1025 vnoremenu 1.70 ToolBar.Cut "+x
1026 vnoremenu 1.80 ToolBar.Copy "+y
1027 cnoremenu 1.80 ToolBar.Copy <C-Y>
1028 nnoremenu 1.90 ToolBar.Paste "+gP
1029 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001030 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
1031 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +00001032
1033 if !has("gui_athena")
1034 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001035 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001036 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001037 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001038 an 1.110 ToolBar.FindNext n
1039 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +00001040 endif
1041
Bram Moolenaar071d4272004-06-13 20:20:40 +00001042 an 1.215 ToolBar.-sep5- <Nop>
1043 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
1044 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
1045 an 1.240 ToolBar.RunScript :browse so<CR>
1046
1047 an 1.245 ToolBar.-sep6- <Nop>
1048 an 1.250 ToolBar.Make :make<CR>
1049 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
1050 an 1.280 ToolBar.TagJump g<C-]>
1051
1052 an 1.295 ToolBar.-sep7- <Nop>
1053 an 1.300 ToolBar.Help :help<CR>
1054 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1055
1056" Only set the tooltips here if not done in a language menu file
1057if exists("*Do_toolbar_tmenu")
1058 call Do_toolbar_tmenu()
1059else
1060 let did_toolbar_tmenu = 1
1061 tmenu ToolBar.Open Open file
1062 tmenu ToolBar.Save Save current file
1063 tmenu ToolBar.SaveAll Save all files
1064 tmenu ToolBar.Print Print
1065 tmenu ToolBar.Undo Undo
1066 tmenu ToolBar.Redo Redo
1067 tmenu ToolBar.Cut Cut to clipboard
1068 tmenu ToolBar.Copy Copy to clipboard
1069 tmenu ToolBar.Paste Paste from Clipboard
1070 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001071 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001072 tmenu ToolBar.FindNext Find Next
1073 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001074 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001075 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001076 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001077 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001078 tmenu ToolBar.Make Make current project (:make)
1079 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001080 tmenu ToolBar.TagJump Jump to tag under cursor
1081 tmenu ToolBar.Help Vim Help
1082 tmenu ToolBar.FindHelp Search Vim Help
1083endif
1084
1085" Select a session to load; default to current session name if present
1086fun! s:LoadVimSesn()
1087 if strlen(v:this_session) > 0
Bram Moolenaaraba88572008-06-25 20:13:35 +00001088 let name = s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001089 else
1090 let name = "Session.vim"
1091 endif
1092 execute "browse so " . name
1093endfun
1094
1095" Select a session to save; default to current session name if present
1096fun! s:SaveVimSesn()
1097 if strlen(v:this_session) == 0
1098 let v:this_session = "Session.vim"
1099 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +00001100 execute "browse mksession! " . s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001101endfun
1102
1103endif
1104
1105endif " !exists("did_install_default_menus")
1106
1107" Define these items always, so that syntax can be switched on when it wasn't.
1108" But skip them when the Syntax menu was disabled by the user.
1109if !exists("did_install_syntax_menu")
1110 an 50.212 &Syntax.&Manual :syn manual<CR>
1111 an 50.214 &Syntax.A&utomatic :syn on<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001112 an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001113 if !exists("*s:SynOnOff")
1114 fun s:SynOnOff()
1115 if has("syntax_items")
1116 syn clear
1117 else
1118 if !exists("g:syntax_on")
1119 syn manual
1120 endif
1121 set syn=ON
1122 endif
1123 endfun
1124 endif
1125endif
1126
1127
1128" Install the Syntax menu only when filetype.vim has been loaded or when
1129" manual syntax highlighting is enabled.
1130" Avoid installing the Syntax menu twice.
1131if (exists("did_load_filetypes") || exists("syntax_on"))
1132 \ && !exists("did_install_syntax_menu")
1133 let did_install_syntax_menu = 1
1134
1135" Skip setting up the individual syntax selection menus unless
1136" do_syntax_sel_menu is defined (it takes quite a bit of time).
1137if exists("do_syntax_sel_menu")
1138 runtime! synmenu.vim
1139else
Bram Moolenaar040c1fe2017-11-09 19:45:48 +01001140 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 +00001141 an 50.195 &Syntax.-SEP1- <Nop>
1142endif
1143
1144an 50.210 &Syntax.&Off :syn off<CR>
1145an 50.700 &Syntax.-SEP3- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001146an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1147an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001148an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1149
1150endif " !exists("did_install_syntax_menu")
1151
Bram Moolenaar071d4272004-06-13 20:20:40 +00001152" Restore the previous value of 'cpoptions'.
1153let &cpo = s:cpo_save
1154unlet s:cpo_save
1155
1156" vim: set sw=2 :