blob: b4c59dd92bc5ebbca5a8c8e6e1ce8f1f01111828 [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 Moolenaar68f1b1b2018-07-23 05:10:14 +020059 if !exists("did_menu_trans") && s:lang =~ '_'
60 " If the language includes a region try matching without that region.
61 " (e.g. find menu_de.vim if s:lang == de_DE).
62 let langonly = substitute(s:lang, '_.*', "", "")
63 exe "runtime! lang/menu_" . langonly . "[^a-z]*vim"
64 endif
65
Bram Moolenaare2cc9702005-03-15 22:43:58 +000066 if !exists("did_menu_trans") && strlen($LANG) > 1 && s:lang !~ '^en_us'
Bram Moolenaar071d4272004-06-13 20:20:40 +000067 " On windows locale names are complicated, try using $LANG, it might
Bram Moolenaare2cc9702005-03-15 22:43:58 +000068 " have been set by set_init_1(). But don't do this for "en" or "en_us".
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000069 " But don't match "slovak" when $LANG is "sl".
70 exe "runtime! lang/menu_" . tolower($LANG) . "[^a-z]*vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000071 endif
72 endif
73 endif
74endif
75
76
77" Help menu
78an 9999.10 &Help.&Overview<Tab><F1> :help<CR>
79an 9999.20 &Help.&User\ Manual :help usr_toc<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +010080an 9999.30 &Help.&How-To\ Links :help how-to<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +000081an <silent> 9999.40 &Help.&Find\.\.\. :call <SID>Helpfind()<CR>
82an 9999.45 &Help.-sep1- <Nop>
83an 9999.50 &Help.&Credits :help credits<CR>
84an 9999.60 &Help.Co&pying :help copying<CR>
85an 9999.70 &Help.&Sponsor/Register :help sponsor<CR>
86an 9999.70 &Help.O&rphans :help kcc<CR>
87an 9999.75 &Help.-sep2- <Nop>
88an 9999.80 &Help.&Version :version<CR>
89an 9999.90 &Help.&About :intro<CR>
90
91fun! s:Helpfind()
92 if !exists("g:menutrans_help_dialog")
93 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')"
94 endif
95 let h = inputdialog(g:menutrans_help_dialog)
96 if h != ""
97 let v:errmsg = ""
98 silent! exe "help " . h
99 if v:errmsg != ""
100 echo v:errmsg
101 endif
102 endif
103endfun
104
105" File menu
106an 10.310 &File.&Open\.\.\.<Tab>:e :browse confirm e<CR>
107an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp :browse sp<CR>
Bram Moolenaar5c8837f2006-02-25 21:52:33 +0000108an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew :browse tabnew<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000109an 10.325 &File.&New<Tab>:enew :confirm enew<CR>
110an <silent> 10.330 &File.&Close<Tab>:close
Bram Moolenaarcab49df2011-03-22 17:40:10 +0100111 \ :if winheight(2) < 0 && tabpagewinnr(2) == 0 <Bar>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000112 \ confirm enew <Bar>
113 \ else <Bar>
114 \ confirm close <Bar>
115 \ endif<CR>
116an 10.335 &File.-SEP1- <Nop>
117an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
118an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR>
119
120if has("diff")
121 an 10.400 &File.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100122 an 10.410 &File.Split\ &Diff\ With\.\.\. :browse vert diffsplit<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000123 an 10.420 &File.Split\ Patched\ &By\.\.\. :browse vert diffpatch<CR>
124endif
125
126if has("printer")
127 an 10.500 &File.-SEP3- <Nop>
128 an 10.510 &File.&Print :hardcopy<CR>
129 vunmenu &File.&Print
130 vnoremenu &File.&Print :hardcopy<CR>
131elseif has("unix")
132 an 10.500 &File.-SEP3- <Nop>
133 an 10.510 &File.&Print :w !lpr<CR>
134 vunmenu &File.&Print
135 vnoremenu &File.&Print :w !lpr<CR>
136endif
137an 10.600 &File.-SEP4- <Nop>
138an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR>
139an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR>
140
Bram Moolenaar071d4272004-06-13 20:20:40 +0000141func! <SID>SelectAll()
Bram Moolenaara3e6bc92013-01-30 14:18:00 +0100142 exe "norm! gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143endfunc
144
Bram Moolenaaraba88572008-06-25 20:13:35 +0000145func! s:FnameEscape(fname)
146 if exists('*fnameescape')
147 return fnameescape(a:fname)
Bram Moolenaar5c736222010-01-06 20:54:52 +0100148 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000149 return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
150endfunc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151
152" Edit menu
153an 20.310 &Edit.&Undo<Tab>u u
154an 20.320 &Edit.&Redo<Tab>^R <C-R>
155an 20.330 &Edit.Rep&eat<Tab>\. .
156
157an 20.335 &Edit.-SEP1- <Nop>
158vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
159vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
160cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
161nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
162cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000163exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v']
164exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000165nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
166inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
167nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
168inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100169if has("win32")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000170 vnoremenu 20.390 &Edit.&Delete<Tab>x x
171endif
172noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
173inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
174cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
175
176an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100177if has("win32") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000178 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
179 vunmenu &Edit.&Find\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000180 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000181 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
182 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000183 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000184else
185 an 20.410 &Edit.&Find<Tab>/ /
186 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
187 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
188 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
189endif
190
191an 20.425 &Edit.-SEP3- <Nop>
192an 20.430 &Edit.Settings\ &Window :options<CR>
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000193an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
194
195fun! s:EditVimrc()
196 if $MYVIMRC != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000197 let fname = $MYVIMRC
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200198 elseif has("win32")
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000199 if $HOME != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000200 let fname = $HOME . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000201 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000202 let fname = $VIM . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000203 endif
204 elseif has("amiga")
205 let fname = "s:.vimrc"
206 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000207 let fname = $HOME . "/.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000208 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000209 let fname = s:FnameEscape(fname)
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000210 if &mod
211 exe "split " . fname
212 else
213 exe "edit " . fname
214 endif
215endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000216
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000217fun! s:FixFText()
218 " Fix text in nameless register to be used with :promptfind.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000219 return substitute(@", "[\r\n]", '\\n', 'g')
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000220endfun
221
Bram Moolenaar071d4272004-06-13 20:20:40 +0000222" Edit/Global Settings
223an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100224an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignoring\ Case<Tab>:set\ ic! :set ic! ic?<CR>
225an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showing\ Matched\ Pairs<Tab>:set\ sm! :set sm! sm?<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000226
Bram Moolenaar214641f2017-03-05 17:04:09 +0100227an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 1\ :set so=1<CR>
228an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 2\ :set so=2<CR>
229an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 3\ :set so=3<CR>
230an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 4\ :set so=4<CR>
231an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 5\ :set so=5<CR>
232an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 7\ :set so=7<CR>
233an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 10\ :set so=10<CR>
234an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 100\ :set so=100<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000235
236an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
237an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100238an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ Mode :set ve=insert<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000239an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
240an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
241an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100242an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatibility<Tab>:set\ cp! :set cp!<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000243an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
244an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
245"
246" GUI options
247an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
248an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
249an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
250an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
251an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
252
253fun! s:SearchP()
254 if !exists("g:menutrans_path_dialog")
255 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
256 endif
257 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
258 if n != ""
259 let &path = substitute(n, ' ', '\\ ', 'g')
260 endif
261endfun
262
263fun! s:TagFiles()
264 if !exists("g:menutrans_tags_dialog")
265 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
266 endif
267 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
268 if n != ""
269 let &tags = substitute(n, ' ', '\\ ', 'g')
270 endif
271endfun
272
273fun! s:ToggleGuiOption(option)
274 " If a:option is already set in guioptions, then we want to remove it
275 if match(&guioptions, "\\C" . a:option) > -1
276 exec "set go-=" . a:option
277 else
278 exec "set go+=" . a:option
279 endif
280endfun
281
282" Edit/File Settings
283
284" Boolean options
285an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100286an 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 +0000287an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100288an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrapping<Tab>:set\ wrap! :set wrap! wrap?<CR>
289an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rapping\ at\ Word<Tab>:set\ lbr! :set lbr! lbr?<CR>
290an 20.440.160 &Edit.F&ile\ Settings.Toggle\ Tab\ &Expanding<Tab>:set\ et! :set et! et?<CR>
291an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &Auto\ Indenting<Tab>:set\ ai! :set ai! ai?<CR>
292an 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 +0000293
294" other options
295an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
296an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
297an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
298an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
299an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
300an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
301an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
302
303an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
304an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
305an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
306an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
307an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
308an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
309
310an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
311an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
312fun! s:TextWidth()
313 if !exists("g:menutrans_textwidth_dialog")
314 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
315 endif
316 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
317 if n != ""
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200318 " Remove leading zeros to avoid it being used as an octal number.
319 " But keep a zero by itself.
320 let tw = substitute(n, "^0*", "", "")
Bram Moolenaar214641f2017-03-05 17:04:09 +0100321 let &tw = tw == '' ? 0 : tw
Bram Moolenaar071d4272004-06-13 20:20:40 +0000322 endif
323endfun
324
325fun! s:FileFormat()
326 if !exists("g:menutrans_fileformat_dialog")
327 let g:menutrans_fileformat_dialog = "Select format for writing the file"
328 endif
329 if !exists("g:menutrans_fileformat_choices")
330 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
331 endif
332 if &ff == "dos"
333 let def = 2
334 elseif &ff == "mac"
335 let def = 3
336 else
337 let def = 1
338 endif
339 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
340 if n == 1
341 set ff=unix
342 elseif n == 2
343 set ff=dos
344 elseif n == 3
345 set ff=mac
346 endif
347endfun
348
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100349let s:did_setup_color_schemes = 0
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200350
Bram Moolenaar071d4272004-06-13 20:20:40 +0000351" Setup the Edit.Color Scheme submenu
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100352func! s:SetupColorSchemes() abort
353 if s:did_setup_color_schemes
354 return
355 endif
356 let s:did_setup_color_schemes = 1
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200357
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100358 let n = globpath(&runtimepath, "colors/*.vim", 1, 1)
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200359
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100360 " Ignore case for VMS and windows, sort on name
361 let names = sort(map(n, 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200362
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100363 " define all the submenu entries
364 let idx = 100
365 for name in names
366 exe "an 20.450." . idx . ' &Edit.C&olor\ Scheme.' . name . " :colors " . name . "<CR>"
367 let idx = idx + 10
368 endfor
369 silent! aunmenu &Edit.Show\ C&olor\ Schemes\ in\ Menu
370endfun
371if exists("do_no_lazyload_menus")
372 call s:SetupColorSchemes()
373else
374 an <silent> 20.450 &Edit.Show\ C&olor\ Schemes\ in\ Menu :call <SID>SetupColorSchemes()<CR>
375endif
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200376
Bram Moolenaar071d4272004-06-13 20:20:40 +0000377
378" Setup the Edit.Keymap submenu
379if has("keymap")
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100380 let s:did_setup_keymaps = 0
381
382 func! s:SetupKeymaps() abort
383 if s:did_setup_keymaps
384 return
385 endif
386 let s:did_setup_keymaps = 1
387
388 let n = globpath(&runtimepath, "keymap/*.vim", 1, 1)
389 if !empty(n)
390 let idx = 100
391 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
392 for name in n
393 " Ignore case for VMS and windows
394 let name = substitute(name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
395 exe "an 20.460." . idx . ' &Edit.&Keymap.' . name . " :set keymap=" . name . "<CR>"
396 let idx = idx + 10
397 endfor
398 endif
399 silent! aunmenu &Edit.Show\ &Keymaps\ in\ Menu
400 endfun
401 if exists("do_no_lazyload_menus")
402 call s:SetupKeymaps()
403 else
404 an <silent> 20.460 &Edit.Show\ &Keymaps\ in\ Menu :call <SID>SetupKeymaps()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000405 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000406endif
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100407if has("win32") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000408 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
409endif
410
411" Programming menu
412if !exists("g:ctags_command")
413 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000414 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000415 else
416 let g:ctags_command = "ctags -R ."
417 endif
418endif
419
Bram Moolenaar214641f2017-03-05 17:04:09 +0100420an 40.300 &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
421vunmenu &Tools.&Jump\ to\ This\ Tag<Tab>g^]
422vnoremenu &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
423an 40.310 &Tools.Jump\ &Back<Tab>^T <C-T>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000424an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
425
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000426if has("folding") || has("spell")
427 an 40.330 &Tools.-SEP1- <Nop>
428endif
429
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000430" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000431if has("spell")
432 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
433 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100434 an 40.335.130 &Tools.&Spelling.To\ &Next\ Error<Tab>]s ]s
435 an 40.335.130 &Tools.&Spelling.To\ &Previous\ Error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000436 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar214641f2017-03-05 17:04:09 +0100437 an 40.335.150 &Tools.&Spelling.&Repeat\ Correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000438 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100439 an 40.335.210 &Tools.&Spelling.Set\ Language\ to\ "en" :set spl=en spell<CR>
440 an 40.335.220 &Tools.&Spelling.Set\ Language\ to\ "en_au" :set spl=en_au spell<CR>
441 an 40.335.230 &Tools.&Spelling.Set\ Language\ to\ "en_ca" :set spl=en_ca spell<CR>
442 an 40.335.240 &Tools.&Spelling.Set\ Language\ to\ "en_gb" :set spl=en_gb spell<CR>
443 an 40.335.250 &Tools.&Spelling.Set\ Language\ to\ "en_nz" :set spl=en_nz spell<CR>
444 an 40.335.260 &Tools.&Spelling.Set\ Language\ to\ "en_us" :set spl=en_us spell<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000445 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
446
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000447 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000448 func! s:SpellLang()
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000449 for cmd in s:undo_spellang
450 exe "silent! " . cmd
451 endfor
452 let s:undo_spellang = []
453
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000454 if &enc == "iso-8859-15"
455 let enc = "latin1"
456 else
457 let enc = &enc
458 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000459
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200460 if !exists("g:menutrans_set_lang_to")
Bram Moolenaar214641f2017-03-05 17:04:09 +0100461 let g:menutrans_set_lang_to = 'Set Language to'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200462 endif
463
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000464 let found = 0
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100465 let s = globpath(&runtimepath, "spell/*." . enc . ".spl", 1, 1)
466 if !empty(s)
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000467 let n = 300
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100468 for f in s
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000469 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000470 if nm != "en" && nm !~ '/'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200471 let _nm = nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000472 let found += 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200473 let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"'
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000474 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
475 let s:undo_spellang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000476 endif
477 let n += 10
478 endfor
479 endif
480 if found == 0
481 echomsg "Could not find other spell files"
482 elseif found == 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200483 echomsg "Found spell file " . _nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000484 else
485 echomsg "Found " . found . " more spell files"
486 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000487 " Need to redo this when 'encoding' is changed.
488 augroup spellmenu
489 au! EncodingChanged * call <SID>SpellLang()
490 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000491 endfun
492
493endif
494
Bram Moolenaar071d4272004-06-13 20:20:40 +0000495" Tools.Fold Menu
496if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000497 " open close folds
Bram Moolenaar214641f2017-03-05 17:04:09 +0100498 an 40.340.110 &Tools.&Folding.&Enable/Disable\ Folds<Tab>zi zi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000499 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
Bram Moolenaar214641f2017-03-05 17:04:09 +0100500 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx zMzx
501 inoremenu 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx <C-O>zM<C-O>zx
502 an 40.340.130 &Tools.&Folding.C&lose\ More\ Folds<Tab>zm zm
503 an 40.340.140 &Tools.&Folding.&Close\ All\ Folds<Tab>zM zM
504 an 40.340.150 &Tools.&Folding.O&pen\ More\ Folds<Tab>zr zr
Bram Moolenaar3df01732017-02-17 22:47:16 +0100505 an 40.340.160 &Tools.&Folding.&Open\ All\ Folds<Tab>zR zR
Bram Moolenaar071d4272004-06-13 20:20:40 +0000506 " fold method
507 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
508 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
509 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
510 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
511 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
512 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
513 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
514 " create and delete folds
515 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
516 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
517 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
518 " moving around in folds
519 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100520 an 40.340.310.10 &Tools.&Folding.Fold\ Col&umn\ Width.\ &0\ :set fdc=0<CR>
521 an 40.340.310.20 &Tools.&Folding.Fold\ Col&umn\ Width.\ &2\ :set fdc=2<CR>
522 an 40.340.310.30 &Tools.&Folding.Fold\ Col&umn\ Width.\ &3\ :set fdc=3<CR>
523 an 40.340.310.40 &Tools.&Folding.Fold\ Col&umn\ Width.\ &4\ :set fdc=4<CR>
524 an 40.340.310.50 &Tools.&Folding.Fold\ Col&umn\ Width.\ &5\ :set fdc=5<CR>
525 an 40.340.310.60 &Tools.&Folding.Fold\ Col&umn\ Width.\ &6\ :set fdc=6<CR>
526 an 40.340.310.70 &Tools.&Folding.Fold\ Col&umn\ Width.\ &7\ :set fdc=7<CR>
527 an 40.340.310.80 &Tools.&Folding.Fold\ Col&umn\ Width.\ &8\ :set fdc=8<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000528endif " has folding
529
530if has("diff")
531 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
532 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
533 vunmenu &Tools.&Diff.&Get\ Block
534 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
535 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
536 vunmenu &Tools.&Diff.&Put\ Block
537 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
538endif
539
540an 40.358 &Tools.-SEP2- <Nop>
541an 40.360 &Tools.&Make<Tab>:make :make<CR>
542an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
543an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
544an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
545an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
546an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
547an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
548an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
549an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
550an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
551
552an 40.520 &Tools.-SEP3- <Nop>
553an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
554 \ :call <SID>XxdConv()<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100555an <silent> 40.540 &Tools.Conve&rt\ Back<Tab>:%!xxd\ -r
Bram Moolenaar071d4272004-06-13 20:20:40 +0000556 \ :call <SID>XxdBack()<CR>
557
558" Use a function to do the conversion, so that it also works with 'insertmode'
559" set.
560func! s:XxdConv()
561 let mod = &mod
562 if has("vms")
563 %!mc vim:xxd
564 else
565 call s:XxdFind()
566 exe '%!"' . g:xxdprogram . '"'
567 endif
568 if getline(1) =~ "^0000000:" " only if it worked
569 set ft=xxd
570 endif
571 let &mod = mod
572endfun
573
574func! s:XxdBack()
575 let mod = &mod
576 if has("vms")
577 %!mc vim:xxd -r
578 else
579 call s:XxdFind()
580 exe '%!"' . g:xxdprogram . '" -r'
581 endif
582 set ft=
583 doautocmd filetypedetect BufReadPost
584 let &mod = mod
585endfun
586
587func! s:XxdFind()
588 if !exists("g:xxdprogram")
589 " On the PC xxd may not be in the path but in the install directory
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200590 if has("win32") && !executable("xxd")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000591 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
592 else
593 let g:xxdprogram = "xxd"
594 endif
595 endif
596endfun
597
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100598let s:did_setup_compilers = 0
599
Bram Moolenaar071d4272004-06-13 20:20:40 +0000600" Setup the Tools.Compiler submenu
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100601func! s:SetupCompilers() abort
602 if s:did_setup_compilers
603 return
Bram Moolenaar071d4272004-06-13 20:20:40 +0000604 endif
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100605 let s:did_setup_compilers = 1
606
607 let n = globpath(&runtimepath, "compiler/*.vim", 1, 1)
608 let idx = 100
609 for name in n
610 " Ignore case for VMS and windows
611 let name = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
612 exe "an 30.440." . idx . ' &Tools.Se&t\ Compiler.' . name . " :compiler " . name . "<CR>"
613 let idx = idx + 10
614 endfor
615 silent! aunmenu &Tools.Show\ Compiler\ Se&ttings\ in\ Menu
616endfun
617if exists("do_no_lazyload_menus")
618 call s:SetupCompilers()
619else
620 an <silent> 30.440 &Tools.Show\ Compiler\ Se&ttings\ in\ Menu :call <SID>SetupCompilers()<CR>
621endif
622
623" Load ColorScheme, Compiler Setting and Keymap menus when idle.
624if !exists("do_no_lazyload_menus")
625 func! s:SetupLazyloadMenus()
626 call s:SetupColorSchemes()
627 call s:SetupCompilers()
628 if has("keymap")
629 call s:SetupKeymaps()
630 endif
631 endfunc
632 augroup SetupLazyloadMenus
633 au!
634 au CursorHold,CursorHoldI * call <SID>SetupLazyloadMenus() | au! SetupLazyloadMenus
635 augroup END
636endif
637
Bram Moolenaar071d4272004-06-13 20:20:40 +0000638
639if !exists("no_buffers_menu")
640
641" Buffer list menu -- Setup functions & actions
642
643" wait with building the menu until after loading 'session' files. Makes
644" startup faster.
645let s:bmenu_wait = 1
646
647if !exists("bmenu_priority")
648 let bmenu_priority = 60
649endif
650
651func! s:BMAdd()
652 if s:bmenu_wait == 0
653 " when adding too many buffers, redraw in short format
654 if s:bmenu_count == &menuitems && s:bmenu_short == 0
655 call s:BMShow()
656 else
657 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
658 let s:bmenu_count = s:bmenu_count + 1
659 endif
660 endif
661endfunc
662
663func! s:BMRemove()
664 if s:bmenu_wait == 0
665 let name = expand("<afile>")
666 if isdirectory(name)
667 return
668 endif
669 let munge = <SID>BMMunge(name, expand("<abuf>"))
670
671 if s:bmenu_short == 0
672 exe 'silent! aun &Buffers.' . munge
673 else
674 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
675 endif
676 let s:bmenu_count = s:bmenu_count - 1
677 endif
678endfunc
679
680" Create the buffer menu (delete an existing one first).
681func! s:BMShow(...)
682 let s:bmenu_wait = 1
683 let s:bmenu_short = 1
684 let s:bmenu_count = 0
685 "
686 " get new priority, if exists
687 if a:0 == 1
688 let g:bmenu_priority = a:1
689 endif
690
691 " remove old menu, if exists; keep one entry to avoid a torn off menu to
692 " disappear.
693 silent! unmenu &Buffers
694 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
695 silent! unmenu! &Buffers
696
697 " create new menu; set 'cpo' to include the <CR>
698 let cpo_save = &cpo
699 set cpo&vim
700 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
701 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
702 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
703 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
704 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
705 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
706 let &cpo = cpo_save
707 unmenu &Buffers.Dummy
708
709 " figure out how many buffers there are
710 let buf = 1
711 while buf <= bufnr('$')
712 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000713 let s:bmenu_count = s:bmenu_count + 1
714 endif
715 let buf = buf + 1
716 endwhile
717 if s:bmenu_count <= &menuitems
718 let s:bmenu_short = 0
719 endif
720
721 " iterate through buffer list, adding each buffer to the menu:
722 let buf = 1
723 while buf <= bufnr('$')
724 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000725 call <SID>BMFilename(bufname(buf), buf)
726 endif
727 let buf = buf + 1
728 endwhile
729 let s:bmenu_wait = 0
730 aug buffer_list
731 au!
732 au BufCreate,BufFilePost * call <SID>BMAdd()
733 au BufDelete,BufFilePre * call <SID>BMRemove()
734 aug END
735endfunc
736
737func! s:BMHash(name)
738 " Make name all upper case, so that chars are between 32 and 96
739 let nm = substitute(a:name, ".*", '\U\0', "")
740 if has("ebcdic")
741 " HACK: Replace all non alphabetics with 'Z'
742 " Just to make it work for now.
743 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
744 let sp = char2nr('A') - 1
745 else
746 let sp = char2nr(' ')
747 endif
748 " convert first six chars into a number for sorting:
749 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)
750endfunc
751
752func! s:BMHash2(name)
753 let nm = substitute(a:name, ".", '\L\0', "")
754 " Not exactly right for EBCDIC...
755 if nm[0] < 'a' || nm[0] > 'z'
756 return '&others.'
757 elseif nm[0] <= 'd'
758 return '&abcd.'
759 elseif nm[0] <= 'h'
760 return '&efgh.'
761 elseif nm[0] <= 'l'
762 return '&ijkl.'
763 elseif nm[0] <= 'p'
764 return '&mnop.'
765 elseif nm[0] <= 't'
766 return '&qrst.'
767 else
768 return '&u-z.'
769 endif
770endfunc
771
772" insert a buffer name into the buffer menu:
773func! s:BMFilename(name, num)
774 if isdirectory(a:name)
775 return
776 endif
777 let munge = <SID>BMMunge(a:name, a:num)
778 let hash = <SID>BMHash(munge)
779 if s:bmenu_short == 0
780 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
781 else
782 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
783 endif
784 " set 'cpo' to include the <CR>
785 let cpo_save = &cpo
786 set cpo&vim
787 exe name . ' :confirm b' . a:num . '<CR>'
788 let &cpo = cpo_save
789endfunc
790
791" Truncate a long path to fit it in a menu item.
792if !exists("g:bmenu_max_pathlen")
793 let g:bmenu_max_pathlen = 35
794endif
795func! s:BMTruncName(fname)
796 let name = a:fname
797 if g:bmenu_max_pathlen < 5
798 let name = ""
799 else
800 let len = strlen(name)
801 if len > g:bmenu_max_pathlen
802 let amountl = (g:bmenu_max_pathlen / 2) - 2
803 let amountr = g:bmenu_max_pathlen - amountl - 3
804 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
805 let left = substitute(name, pattern, '\1', '')
806 let right = substitute(name, pattern, '\2', '')
807 if strlen(left) + strlen(right) < len
808 let name = left . '...' . right
809 endif
810 endif
811 endif
812 return name
813endfunc
814
815func! s:BMMunge(fname, bnum)
816 let name = a:fname
817 if name == ''
818 if !exists("g:menutrans_no_file")
Bram Moolenaar6dc819b2018-07-03 16:42:19 +0200819 let g:menutrans_no_file = "[No Name]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000820 endif
821 let name = g:menutrans_no_file
822 else
823 let name = fnamemodify(name, ':p:~')
824 endif
825 " detach file name and separate it out:
826 let name2 = fnamemodify(name, ':t')
827 if a:bnum >= 0
828 let name2 = name2 . ' (' . a:bnum . ')'
829 endif
830 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
831 let name = escape(name, "\\. \t|")
832 let name = substitute(name, "&", "&&", "g")
833 let name = substitute(name, "\n", "^@", "g")
834 return name
835endfunc
836
837" When just starting Vim, load the buffer menu later
838if has("vim_starting")
839 augroup LoadBufferMenu
840 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
841 au VimEnter * au! LoadBufferMenu
842 augroup END
843else
844 call <SID>BMShow()
845endif
846
847endif " !exists("no_buffers_menu")
848
849" Window menu
850an 70.300 &Window.&New<Tab>^Wn <C-W>n
851an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
852an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
853an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
854if has("vertsplit")
855 an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
856 if !exists("*MenuExplOpen")
857 fun MenuExplOpen()
858 if @% == ""
859 20vsp .
860 else
Bram Moolenaaraba88572008-06-25 20:13:35 +0000861 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000862 endif
863 endfun
864 endif
865endif
866an 70.335 &Window.-SEP1- <Nop>
867an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
868an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
869an 70.350 &Window.-SEP2- <Nop>
870an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
871an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
Bram Moolenaar214641f2017-03-05 17:04:09 +0100872an 70.355 &Window.Move\ &To.&Left\ Side<Tab>^WH <C-W>H
873an 70.355 &Window.Move\ &To.&Right\ Side<Tab>^WL <C-W>L
Bram Moolenaar071d4272004-06-13 20:20:40 +0000874an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
875an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
876an 70.365 &Window.-SEP3- <Nop>
877an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
878an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
879an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
880an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
881an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
882
883" The popup menu
884an 1.10 PopUp.&Undo u
885an 1.15 PopUp.-SEP1- <Nop>
886vnoremenu 1.20 PopUp.Cu&t "+x
887vnoremenu 1.30 PopUp.&Copy "+y
888cnoremenu 1.30 PopUp.&Copy <C-Y>
889nnoremenu 1.40 PopUp.&Paste "+gP
890cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000891exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
892exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000893vnoremenu 1.50 PopUp.&Delete x
894an 1.55 PopUp.-SEP2- <Nop>
895vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000896
897nnoremenu 1.70 PopUp.Select\ &Word vaw
898onoremenu 1.70 PopUp.Select\ &Word aw
899vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
900inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
901cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
902
903nnoremenu 1.73 PopUp.Select\ &Sentence vas
904onoremenu 1.73 PopUp.Select\ &Sentence as
905vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
906inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
907cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
908
909nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
910onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
911vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
912inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
913cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
914
915nnoremenu 1.80 PopUp.Select\ &Line V
916onoremenu 1.80 PopUp.Select\ &Line <C-C>V
917vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
918inoremenu 1.80 PopUp.Select\ &Line <C-O>V
919cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
920
921nnoremenu 1.90 PopUp.Select\ &Block <C-V>
922onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
923vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
924inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
925cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
926
Bram Moolenaar071d4272004-06-13 20:20:40 +0000927noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
928inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
929cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
930
Bram Moolenaar45360022005-07-21 21:08:21 +0000931if has("spell")
932 " Spell suggestions in the popup menu. Note that this will slow down the
933 " appearance of the menu!
934 func! <SID>SpellPopup()
935 if exists("s:changeitem") && s:changeitem != ''
936 call <SID>SpellDel()
937 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000938
939 " Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000940 if !&spell || &spelllang == ''
941 return
942 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000943
944 let curcol = col('.')
Bram Moolenaar1c7715d2005-10-03 22:02:18 +0000945 let [w, a] = spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000946 if col('.') > curcol " don't use word after the cursor
947 let w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +0000948 endif
949 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000950 if a == 'caps'
951 let s:suglist = [substitute(w, '.*', '\u&', '')]
952 else
953 let s:suglist = spellsuggest(w, 10)
954 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200955 if len(s:suglist) > 0
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +0200956 if !exists("g:menutrans_spell_change_ARG_to")
957 let g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to'
958 endif
959 let s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .'))
Bram Moolenaar45360022005-07-21 21:08:21 +0000960 let s:fromword = w
961 let pri = 1
Bram Moolenaar62292582010-07-10 16:36:59 +0200962 " set 'cpo' to include the <CR>
963 let cpo_save = &cpo
964 set cpo&vim
Bram Moolenaar45360022005-07-21 21:08:21 +0000965 for sug in s:suglist
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000966 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
Bram Moolenaar45360022005-07-21 21:08:21 +0000967 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
968 let pri += 1
969 endfor
970
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +0200971 if !exists("g:menutrans_spell_add_ARG_to_word_list")
972 let g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List'
973 endif
974 let s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .'))
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000975 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000976
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +0200977 if !exists("g:menutrans_spell_ignore_ARG")
978 let g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"'
979 endif
980 let s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .'))
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000981 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000982
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000983 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar62292582010-07-10 16:36:59 +0200984 let &cpo = cpo_save
Bram Moolenaar45360022005-07-21 21:08:21 +0000985 endif
986 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200987 call cursor(0, curcol) " put the cursor back where it was
Bram Moolenaar45360022005-07-21 21:08:21 +0000988 endfunc
989
990 func! <SID>SpellReplace(n)
991 let l = getline('.')
Bram Moolenaar62292582010-07-10 16:36:59 +0200992 " Move the cursor to the start of the word.
993 call spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000994 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
995 \ . strpart(l, col('.') + len(s:fromword) - 1))
996 endfunc
997
998 func! <SID>SpellDel()
999 exe "aunmenu PopUp." . s:changeitem
1000 exe "aunmenu PopUp." . s:additem
1001 exe "aunmenu PopUp." . s:ignoreitem
1002 aunmenu PopUp.-SpellSep-
1003 let s:changeitem = ''
1004 endfun
1005
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001006 augroup SpellPopupMenu
1007 au! MenuPopup * call <SID>SpellPopup()
1008 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +00001009endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00001010
1011" The GUI toolbar (for MS-Windows and GTK)
1012if has("toolbar")
1013 an 1.10 ToolBar.Open :browse confirm e<CR>
1014 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
1015 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
1016
1017 if has("printer")
1018 an 1.40 ToolBar.Print :hardcopy<CR>
1019 vunmenu ToolBar.Print
1020 vnoremenu ToolBar.Print :hardcopy<CR>
1021 elseif has("unix")
1022 an 1.40 ToolBar.Print :w !lpr<CR>
1023 vunmenu ToolBar.Print
1024 vnoremenu ToolBar.Print :w !lpr<CR>
1025 endif
1026
1027 an 1.45 ToolBar.-sep1- <Nop>
1028 an 1.50 ToolBar.Undo u
1029 an 1.60 ToolBar.Redo <C-R>
1030
1031 an 1.65 ToolBar.-sep2- <Nop>
1032 vnoremenu 1.70 ToolBar.Cut "+x
1033 vnoremenu 1.80 ToolBar.Copy "+y
1034 cnoremenu 1.80 ToolBar.Copy <C-Y>
1035 nnoremenu 1.90 ToolBar.Paste "+gP
1036 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001037 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
1038 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +00001039
1040 if !has("gui_athena")
1041 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001042 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001043 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001044 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001045 an 1.110 ToolBar.FindNext n
1046 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +00001047 endif
1048
Bram Moolenaar071d4272004-06-13 20:20:40 +00001049 an 1.215 ToolBar.-sep5- <Nop>
1050 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
1051 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
1052 an 1.240 ToolBar.RunScript :browse so<CR>
1053
1054 an 1.245 ToolBar.-sep6- <Nop>
1055 an 1.250 ToolBar.Make :make<CR>
1056 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
1057 an 1.280 ToolBar.TagJump g<C-]>
1058
1059 an 1.295 ToolBar.-sep7- <Nop>
1060 an 1.300 ToolBar.Help :help<CR>
1061 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1062
1063" Only set the tooltips here if not done in a language menu file
1064if exists("*Do_toolbar_tmenu")
1065 call Do_toolbar_tmenu()
1066else
1067 let did_toolbar_tmenu = 1
1068 tmenu ToolBar.Open Open file
1069 tmenu ToolBar.Save Save current file
1070 tmenu ToolBar.SaveAll Save all files
1071 tmenu ToolBar.Print Print
1072 tmenu ToolBar.Undo Undo
1073 tmenu ToolBar.Redo Redo
1074 tmenu ToolBar.Cut Cut to clipboard
1075 tmenu ToolBar.Copy Copy to clipboard
1076 tmenu ToolBar.Paste Paste from Clipboard
1077 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001078 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001079 tmenu ToolBar.FindNext Find Next
1080 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001081 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001082 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001083 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001084 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001085 tmenu ToolBar.Make Make current project (:make)
1086 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001087 tmenu ToolBar.TagJump Jump to tag under cursor
1088 tmenu ToolBar.Help Vim Help
1089 tmenu ToolBar.FindHelp Search Vim Help
1090endif
1091
1092" Select a session to load; default to current session name if present
1093fun! s:LoadVimSesn()
1094 if strlen(v:this_session) > 0
Bram Moolenaaraba88572008-06-25 20:13:35 +00001095 let name = s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001096 else
1097 let name = "Session.vim"
1098 endif
1099 execute "browse so " . name
1100endfun
1101
1102" Select a session to save; default to current session name if present
1103fun! s:SaveVimSesn()
1104 if strlen(v:this_session) == 0
1105 let v:this_session = "Session.vim"
1106 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +00001107 execute "browse mksession! " . s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001108endfun
1109
1110endif
1111
1112endif " !exists("did_install_default_menus")
1113
1114" Define these items always, so that syntax can be switched on when it wasn't.
1115" But skip them when the Syntax menu was disabled by the user.
1116if !exists("did_install_syntax_menu")
1117 an 50.212 &Syntax.&Manual :syn manual<CR>
1118 an 50.214 &Syntax.A&utomatic :syn on<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001119 an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001120 if !exists("*s:SynOnOff")
1121 fun s:SynOnOff()
1122 if has("syntax_items")
1123 syn clear
1124 else
1125 if !exists("g:syntax_on")
1126 syn manual
1127 endif
1128 set syn=ON
1129 endif
1130 endfun
1131 endif
1132endif
1133
1134
1135" Install the Syntax menu only when filetype.vim has been loaded or when
1136" manual syntax highlighting is enabled.
1137" Avoid installing the Syntax menu twice.
1138if (exists("did_load_filetypes") || exists("syntax_on"))
1139 \ && !exists("did_install_syntax_menu")
1140 let did_install_syntax_menu = 1
1141
1142" Skip setting up the individual syntax selection menus unless
1143" do_syntax_sel_menu is defined (it takes quite a bit of time).
1144if exists("do_syntax_sel_menu")
1145 runtime! synmenu.vim
1146else
Bram Moolenaar040c1fe2017-11-09 19:45:48 +01001147 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 +00001148 an 50.195 &Syntax.-SEP1- <Nop>
1149endif
1150
1151an 50.210 &Syntax.&Off :syn off<CR>
1152an 50.700 &Syntax.-SEP3- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001153an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1154an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001155an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1156
1157endif " !exists("did_install_syntax_menu")
1158
Bram Moolenaar071d4272004-06-13 20:20:40 +00001159" Restore the previous value of 'cpoptions'.
1160let &cpo = s:cpo_save
1161unlet s:cpo_save
1162
1163" vim: set sw=2 :