blob: 11d80b7d1de69ec3884a900e7a7c79a3c464cf76 [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 Moolenaar5be4cee2019-09-27 19:34:08 +02005" Last Change: 2019 Sep 26
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"
Bram Moolenaar5be4cee2019-09-27 19:34:08 +020032 " Also skip "en_US" to avoid picking up "en_gb" translations.
33 if strlen(s:lang) > 1 && s:lang !~? '^en_us'
Bram Moolenaar071d4272004-06-13 20:20:40 +000034 " When the language does not include the charset add 'encoding'
35 if s:lang =~ '^\a\a$\|^\a\a_\a\a$'
36 let s:lang = s:lang . '.' . &enc
37 endif
38
39 " We always use a lowercase name.
40 " Change "iso-8859" to "iso_8859" and "iso8859" to "iso_8859", some
41 " systems appear to use this.
42 " Change spaces to underscores.
43 let s:lang = substitute(tolower(s:lang), '\.iso-', ".iso_", "")
44 let s:lang = substitute(s:lang, '\.iso8859', ".iso_8859", "")
45 let s:lang = substitute(s:lang, " ", "_", "g")
46 " Remove "@euro", otherwise "LC_ALL=de_DE@euro gvim" will show English menus
47 let s:lang = substitute(s:lang, "@euro", "", "")
48 " Change "iso_8859-1" and "iso_8859-15" to "latin1", we always use the
49 " same menu file for them.
50 let s:lang = substitute(s:lang, 'iso_8859-15\=$', "latin1", "")
51 menutrans clear
52 exe "runtime! lang/menu_" . s:lang . ".vim"
53
54 if !exists("did_menu_trans")
55 " There is no exact match, try matching with a wildcard added
56 " (e.g. find menu_de_de.iso_8859-1.vim if s:lang == de_DE).
57 let s:lang = substitute(s:lang, '\.[^.]*', "", "")
Bram Moolenaar05159a02005-02-26 23:04:13 +000058 exe "runtime! lang/menu_" . s:lang . "[^a-z]*vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000059
Bram Moolenaar68f1b1b2018-07-23 05:10:14 +020060 if !exists("did_menu_trans") && s:lang =~ '_'
61 " If the language includes a region try matching without that region.
62 " (e.g. find menu_de.vim if s:lang == de_DE).
63 let langonly = substitute(s:lang, '_.*', "", "")
64 exe "runtime! lang/menu_" . langonly . "[^a-z]*vim"
65 endif
66
Bram Moolenaare2cc9702005-03-15 22:43:58 +000067 if !exists("did_menu_trans") && strlen($LANG) > 1 && s:lang !~ '^en_us'
Bram Moolenaar071d4272004-06-13 20:20:40 +000068 " On windows locale names are complicated, try using $LANG, it might
Bram Moolenaare2cc9702005-03-15 22:43:58 +000069 " have been set by set_init_1(). But don't do this for "en" or "en_us".
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000070 " But don't match "slovak" when $LANG is "sl".
71 exe "runtime! lang/menu_" . tolower($LANG) . "[^a-z]*vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000072 endif
73 endif
74 endif
75endif
76
77
78" Help menu
79an 9999.10 &Help.&Overview<Tab><F1> :help<CR>
80an 9999.20 &Help.&User\ Manual :help usr_toc<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +010081an 9999.30 &Help.&How-To\ Links :help how-to<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +000082an <silent> 9999.40 &Help.&Find\.\.\. :call <SID>Helpfind()<CR>
83an 9999.45 &Help.-sep1- <Nop>
84an 9999.50 &Help.&Credits :help credits<CR>
85an 9999.60 &Help.Co&pying :help copying<CR>
86an 9999.70 &Help.&Sponsor/Register :help sponsor<CR>
87an 9999.70 &Help.O&rphans :help kcc<CR>
88an 9999.75 &Help.-sep2- <Nop>
89an 9999.80 &Help.&Version :version<CR>
90an 9999.90 &Help.&About :intro<CR>
91
92fun! s:Helpfind()
93 if !exists("g:menutrans_help_dialog")
94 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')"
95 endif
96 let h = inputdialog(g:menutrans_help_dialog)
97 if h != ""
98 let v:errmsg = ""
99 silent! exe "help " . h
100 if v:errmsg != ""
101 echo v:errmsg
102 endif
103 endif
104endfun
105
106" File menu
107an 10.310 &File.&Open\.\.\.<Tab>:e :browse confirm e<CR>
108an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp :browse sp<CR>
Bram Moolenaar5c8837f2006-02-25 21:52:33 +0000109an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew :browse tabnew<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000110an 10.325 &File.&New<Tab>:enew :confirm enew<CR>
111an <silent> 10.330 &File.&Close<Tab>:close
Bram Moolenaarcab49df2011-03-22 17:40:10 +0100112 \ :if winheight(2) < 0 && tabpagewinnr(2) == 0 <Bar>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000113 \ confirm enew <Bar>
114 \ else <Bar>
115 \ confirm close <Bar>
116 \ endif<CR>
117an 10.335 &File.-SEP1- <Nop>
118an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
119an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR>
120
121if has("diff")
122 an 10.400 &File.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100123 an 10.410 &File.Split\ &Diff\ With\.\.\. :browse vert diffsplit<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000124 an 10.420 &File.Split\ Patched\ &By\.\.\. :browse vert diffpatch<CR>
125endif
126
127if has("printer")
128 an 10.500 &File.-SEP3- <Nop>
129 an 10.510 &File.&Print :hardcopy<CR>
130 vunmenu &File.&Print
131 vnoremenu &File.&Print :hardcopy<CR>
132elseif has("unix")
133 an 10.500 &File.-SEP3- <Nop>
134 an 10.510 &File.&Print :w !lpr<CR>
135 vunmenu &File.&Print
136 vnoremenu &File.&Print :w !lpr<CR>
137endif
138an 10.600 &File.-SEP4- <Nop>
139an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR>
140an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR>
141
Bram Moolenaar071d4272004-06-13 20:20:40 +0000142func! <SID>SelectAll()
Bram Moolenaara3e6bc92013-01-30 14:18:00 +0100143 exe "norm! gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144endfunc
145
Bram Moolenaaraba88572008-06-25 20:13:35 +0000146func! s:FnameEscape(fname)
147 if exists('*fnameescape')
148 return fnameescape(a:fname)
Bram Moolenaar5c736222010-01-06 20:54:52 +0100149 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000150 return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
151endfunc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000152
153" Edit menu
154an 20.310 &Edit.&Undo<Tab>u u
155an 20.320 &Edit.&Redo<Tab>^R <C-R>
156an 20.330 &Edit.Rep&eat<Tab>\. .
157
158an 20.335 &Edit.-SEP1- <Nop>
159vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
160vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
161cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
162nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
163cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
Bram Moolenaar4c5d8152018-10-19 22:36:53 +0200164if exists(':tlmenu')
165 tlnoremenu &Edit.&Paste<Tab>"+gP <C-W>"+
166endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000167exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v']
168exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000169nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
170inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
171nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
172inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100173if has("win32")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174 vnoremenu 20.390 &Edit.&Delete<Tab>x x
175endif
176noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
177inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
178cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
179
180an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100181if has("win32") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000182 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
183 vunmenu &Edit.&Find\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000184 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
186 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000187 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000188else
189 an 20.410 &Edit.&Find<Tab>/ /
190 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
191 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
192 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
193endif
194
195an 20.425 &Edit.-SEP3- <Nop>
196an 20.430 &Edit.Settings\ &Window :options<CR>
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000197an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
198
199fun! s:EditVimrc()
200 if $MYVIMRC != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000201 let fname = $MYVIMRC
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200202 elseif has("win32")
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000203 if $HOME != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000204 let fname = $HOME . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000205 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000206 let fname = $VIM . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000207 endif
208 elseif has("amiga")
209 let fname = "s:.vimrc"
210 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000211 let fname = $HOME . "/.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000212 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000213 let fname = s:FnameEscape(fname)
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000214 if &mod
215 exe "split " . fname
216 else
217 exe "edit " . fname
218 endif
219endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000220
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000221fun! s:FixFText()
222 " Fix text in nameless register to be used with :promptfind.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000223 return substitute(@", "[\r\n]", '\\n', 'g')
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000224endfun
225
Bram Moolenaar071d4272004-06-13 20:20:40 +0000226" Edit/Global Settings
227an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100228an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignoring\ Case<Tab>:set\ ic! :set ic! ic?<CR>
229an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showing\ Matched\ Pairs<Tab>:set\ sm! :set sm! sm?<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000230
Bram Moolenaar214641f2017-03-05 17:04:09 +0100231an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 1\ :set so=1<CR>
232an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 2\ :set so=2<CR>
233an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 3\ :set so=3<CR>
234an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 4\ :set so=4<CR>
235an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 5\ :set so=5<CR>
236an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 7\ :set so=7<CR>
237an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 10\ :set so=10<CR>
238an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 100\ :set so=100<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000239
240an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
241an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100242an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ Mode :set ve=insert<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000243an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
244an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
245an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100246an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatibility<Tab>:set\ cp! :set cp!<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000247an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
248an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
249"
250" GUI options
251an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
252an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
253an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
254an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
255an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
256
257fun! s:SearchP()
258 if !exists("g:menutrans_path_dialog")
259 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
260 endif
261 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
262 if n != ""
263 let &path = substitute(n, ' ', '\\ ', 'g')
264 endif
265endfun
266
267fun! s:TagFiles()
268 if !exists("g:menutrans_tags_dialog")
269 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
270 endif
271 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
272 if n != ""
273 let &tags = substitute(n, ' ', '\\ ', 'g')
274 endif
275endfun
276
277fun! s:ToggleGuiOption(option)
278 " If a:option is already set in guioptions, then we want to remove it
279 if match(&guioptions, "\\C" . a:option) > -1
280 exec "set go-=" . a:option
281 else
282 exec "set go+=" . a:option
283 endif
284endfun
285
286" Edit/File Settings
287
288" Boolean options
289an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100290an 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 +0000291an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100292an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrapping<Tab>:set\ wrap! :set wrap! wrap?<CR>
293an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rapping\ at\ Word<Tab>:set\ lbr! :set lbr! lbr?<CR>
294an 20.440.160 &Edit.F&ile\ Settings.Toggle\ Tab\ &Expanding<Tab>:set\ et! :set et! et?<CR>
295an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &Auto\ Indenting<Tab>:set\ ai! :set ai! ai?<CR>
296an 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 +0000297
298" other options
299an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
300an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
301an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
302an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
303an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
304an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
305an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
306
307an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
308an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
309an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
310an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
311an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
312an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
313
314an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
315an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
316fun! s:TextWidth()
317 if !exists("g:menutrans_textwidth_dialog")
318 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
319 endif
320 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
321 if n != ""
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200322 " Remove leading zeros to avoid it being used as an octal number.
323 " But keep a zero by itself.
324 let tw = substitute(n, "^0*", "", "")
Bram Moolenaar214641f2017-03-05 17:04:09 +0100325 let &tw = tw == '' ? 0 : tw
Bram Moolenaar071d4272004-06-13 20:20:40 +0000326 endif
327endfun
328
329fun! s:FileFormat()
330 if !exists("g:menutrans_fileformat_dialog")
331 let g:menutrans_fileformat_dialog = "Select format for writing the file"
332 endif
333 if !exists("g:menutrans_fileformat_choices")
334 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
335 endif
336 if &ff == "dos"
337 let def = 2
338 elseif &ff == "mac"
339 let def = 3
340 else
341 let def = 1
342 endif
343 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
344 if n == 1
345 set ff=unix
346 elseif n == 2
347 set ff=dos
348 elseif n == 3
349 set ff=mac
350 endif
351endfun
352
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100353let s:did_setup_color_schemes = 0
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200354
Bram Moolenaar071d4272004-06-13 20:20:40 +0000355" Setup the Edit.Color Scheme submenu
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100356func! s:SetupColorSchemes() abort
357 if s:did_setup_color_schemes
358 return
359 endif
360 let s:did_setup_color_schemes = 1
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200361
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100362 let n = globpath(&runtimepath, "colors/*.vim", 1, 1)
Bram Moolenaar30e9b3c2019-09-07 16:24:12 +0200363 let n += globpath(&packpath, "pack/*/start/*/colors/*.vim", 1, 1)
364 let n += globpath(&packpath, "pack/*/opt/*/colors/*.vim", 1, 1)
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200365
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100366 " Ignore case for VMS and windows, sort on name
367 let names = sort(map(n, 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200368
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100369 " define all the submenu entries
370 let idx = 100
371 for name in names
372 exe "an 20.450." . idx . ' &Edit.C&olor\ Scheme.' . name . " :colors " . name . "<CR>"
373 let idx = idx + 10
374 endfor
375 silent! aunmenu &Edit.Show\ C&olor\ Schemes\ in\ Menu
376endfun
377if exists("do_no_lazyload_menus")
378 call s:SetupColorSchemes()
379else
380 an <silent> 20.450 &Edit.Show\ C&olor\ Schemes\ in\ Menu :call <SID>SetupColorSchemes()<CR>
381endif
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200382
Bram Moolenaar071d4272004-06-13 20:20:40 +0000383
384" Setup the Edit.Keymap submenu
385if has("keymap")
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100386 let s:did_setup_keymaps = 0
387
388 func! s:SetupKeymaps() abort
389 if s:did_setup_keymaps
390 return
391 endif
392 let s:did_setup_keymaps = 1
393
394 let n = globpath(&runtimepath, "keymap/*.vim", 1, 1)
395 if !empty(n)
396 let idx = 100
397 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
398 for name in n
399 " Ignore case for VMS and windows
400 let name = substitute(name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
401 exe "an 20.460." . idx . ' &Edit.&Keymap.' . name . " :set keymap=" . name . "<CR>"
402 let idx = idx + 10
403 endfor
404 endif
405 silent! aunmenu &Edit.Show\ &Keymaps\ in\ Menu
406 endfun
407 if exists("do_no_lazyload_menus")
408 call s:SetupKeymaps()
409 else
410 an <silent> 20.460 &Edit.Show\ &Keymaps\ in\ Menu :call <SID>SetupKeymaps()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000411 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000412endif
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100413if has("win32") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000414 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
415endif
416
417" Programming menu
418if !exists("g:ctags_command")
419 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000420 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000421 else
422 let g:ctags_command = "ctags -R ."
423 endif
424endif
425
Bram Moolenaar214641f2017-03-05 17:04:09 +0100426an 40.300 &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
427vunmenu &Tools.&Jump\ to\ This\ Tag<Tab>g^]
428vnoremenu &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
429an 40.310 &Tools.Jump\ &Back<Tab>^T <C-T>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000430an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
431
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000432if has("folding") || has("spell")
433 an 40.330 &Tools.-SEP1- <Nop>
434endif
435
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000436" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000437if has("spell")
438 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
439 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100440 an 40.335.130 &Tools.&Spelling.To\ &Next\ Error<Tab>]s ]s
441 an 40.335.130 &Tools.&Spelling.To\ &Previous\ Error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000442 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar214641f2017-03-05 17:04:09 +0100443 an 40.335.150 &Tools.&Spelling.&Repeat\ Correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000444 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100445 an 40.335.210 &Tools.&Spelling.Set\ Language\ to\ "en" :set spl=en spell<CR>
446 an 40.335.220 &Tools.&Spelling.Set\ Language\ to\ "en_au" :set spl=en_au spell<CR>
447 an 40.335.230 &Tools.&Spelling.Set\ Language\ to\ "en_ca" :set spl=en_ca spell<CR>
448 an 40.335.240 &Tools.&Spelling.Set\ Language\ to\ "en_gb" :set spl=en_gb spell<CR>
449 an 40.335.250 &Tools.&Spelling.Set\ Language\ to\ "en_nz" :set spl=en_nz spell<CR>
450 an 40.335.260 &Tools.&Spelling.Set\ Language\ to\ "en_us" :set spl=en_us spell<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000451 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
452
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000453 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000454 func! s:SpellLang()
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000455 for cmd in s:undo_spellang
456 exe "silent! " . cmd
457 endfor
458 let s:undo_spellang = []
459
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000460 if &enc == "iso-8859-15"
461 let enc = "latin1"
462 else
463 let enc = &enc
464 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000465
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200466 if !exists("g:menutrans_set_lang_to")
Bram Moolenaar214641f2017-03-05 17:04:09 +0100467 let g:menutrans_set_lang_to = 'Set Language to'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200468 endif
469
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000470 let found = 0
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100471 let s = globpath(&runtimepath, "spell/*." . enc . ".spl", 1, 1)
472 if !empty(s)
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000473 let n = 300
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100474 for f in s
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000475 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000476 if nm != "en" && nm !~ '/'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200477 let _nm = nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000478 let found += 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200479 let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"'
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000480 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
481 let s:undo_spellang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000482 endif
483 let n += 10
484 endfor
485 endif
486 if found == 0
487 echomsg "Could not find other spell files"
488 elseif found == 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200489 echomsg "Found spell file " . _nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000490 else
491 echomsg "Found " . found . " more spell files"
492 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000493 " Need to redo this when 'encoding' is changed.
494 augroup spellmenu
495 au! EncodingChanged * call <SID>SpellLang()
496 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000497 endfun
498
499endif
500
Bram Moolenaar071d4272004-06-13 20:20:40 +0000501" Tools.Fold Menu
502if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000503 " open close folds
Bram Moolenaar214641f2017-03-05 17:04:09 +0100504 an 40.340.110 &Tools.&Folding.&Enable/Disable\ Folds<Tab>zi zi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000505 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
Bram Moolenaar214641f2017-03-05 17:04:09 +0100506 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx zMzx
507 inoremenu 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx <C-O>zM<C-O>zx
508 an 40.340.130 &Tools.&Folding.C&lose\ More\ Folds<Tab>zm zm
509 an 40.340.140 &Tools.&Folding.&Close\ All\ Folds<Tab>zM zM
510 an 40.340.150 &Tools.&Folding.O&pen\ More\ Folds<Tab>zr zr
Bram Moolenaar3df01732017-02-17 22:47:16 +0100511 an 40.340.160 &Tools.&Folding.&Open\ All\ Folds<Tab>zR zR
Bram Moolenaar071d4272004-06-13 20:20:40 +0000512 " fold method
513 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
514 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
515 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
516 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
517 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
518 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
519 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
520 " create and delete folds
521 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
522 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
523 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
524 " moving around in folds
525 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100526 an 40.340.310.10 &Tools.&Folding.Fold\ Col&umn\ Width.\ &0\ :set fdc=0<CR>
527 an 40.340.310.20 &Tools.&Folding.Fold\ Col&umn\ Width.\ &2\ :set fdc=2<CR>
528 an 40.340.310.30 &Tools.&Folding.Fold\ Col&umn\ Width.\ &3\ :set fdc=3<CR>
529 an 40.340.310.40 &Tools.&Folding.Fold\ Col&umn\ Width.\ &4\ :set fdc=4<CR>
530 an 40.340.310.50 &Tools.&Folding.Fold\ Col&umn\ Width.\ &5\ :set fdc=5<CR>
531 an 40.340.310.60 &Tools.&Folding.Fold\ Col&umn\ Width.\ &6\ :set fdc=6<CR>
532 an 40.340.310.70 &Tools.&Folding.Fold\ Col&umn\ Width.\ &7\ :set fdc=7<CR>
533 an 40.340.310.80 &Tools.&Folding.Fold\ Col&umn\ Width.\ &8\ :set fdc=8<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000534endif " has folding
535
536if has("diff")
537 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
538 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
539 vunmenu &Tools.&Diff.&Get\ Block
540 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
541 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
542 vunmenu &Tools.&Diff.&Put\ Block
543 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
544endif
545
546an 40.358 &Tools.-SEP2- <Nop>
547an 40.360 &Tools.&Make<Tab>:make :make<CR>
548an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
549an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
550an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
551an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
552an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
553an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
554an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
555an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
556an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
557
558an 40.520 &Tools.-SEP3- <Nop>
559an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
560 \ :call <SID>XxdConv()<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100561an <silent> 40.540 &Tools.Conve&rt\ Back<Tab>:%!xxd\ -r
Bram Moolenaar071d4272004-06-13 20:20:40 +0000562 \ :call <SID>XxdBack()<CR>
563
564" Use a function to do the conversion, so that it also works with 'insertmode'
565" set.
566func! s:XxdConv()
567 let mod = &mod
568 if has("vms")
569 %!mc vim:xxd
570 else
571 call s:XxdFind()
572 exe '%!"' . g:xxdprogram . '"'
573 endif
574 if getline(1) =~ "^0000000:" " only if it worked
575 set ft=xxd
576 endif
577 let &mod = mod
578endfun
579
580func! s:XxdBack()
581 let mod = &mod
582 if has("vms")
583 %!mc vim:xxd -r
584 else
585 call s:XxdFind()
586 exe '%!"' . g:xxdprogram . '" -r'
587 endif
588 set ft=
589 doautocmd filetypedetect BufReadPost
590 let &mod = mod
591endfun
592
593func! s:XxdFind()
594 if !exists("g:xxdprogram")
595 " On the PC xxd may not be in the path but in the install directory
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200596 if has("win32") && !executable("xxd")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000597 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
598 else
599 let g:xxdprogram = "xxd"
600 endif
601 endif
602endfun
603
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100604let s:did_setup_compilers = 0
605
Bram Moolenaar071d4272004-06-13 20:20:40 +0000606" Setup the Tools.Compiler submenu
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100607func! s:SetupCompilers() abort
608 if s:did_setup_compilers
609 return
Bram Moolenaar071d4272004-06-13 20:20:40 +0000610 endif
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100611 let s:did_setup_compilers = 1
612
613 let n = globpath(&runtimepath, "compiler/*.vim", 1, 1)
614 let idx = 100
615 for name in n
616 " Ignore case for VMS and windows
617 let name = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
618 exe "an 30.440." . idx . ' &Tools.Se&t\ Compiler.' . name . " :compiler " . name . "<CR>"
619 let idx = idx + 10
620 endfor
621 silent! aunmenu &Tools.Show\ Compiler\ Se&ttings\ in\ Menu
622endfun
623if exists("do_no_lazyload_menus")
624 call s:SetupCompilers()
625else
626 an <silent> 30.440 &Tools.Show\ Compiler\ Se&ttings\ in\ Menu :call <SID>SetupCompilers()<CR>
627endif
628
629" Load ColorScheme, Compiler Setting and Keymap menus when idle.
630if !exists("do_no_lazyload_menus")
631 func! s:SetupLazyloadMenus()
632 call s:SetupColorSchemes()
633 call s:SetupCompilers()
634 if has("keymap")
635 call s:SetupKeymaps()
636 endif
637 endfunc
638 augroup SetupLazyloadMenus
639 au!
640 au CursorHold,CursorHoldI * call <SID>SetupLazyloadMenus() | au! SetupLazyloadMenus
641 augroup END
642endif
643
Bram Moolenaar071d4272004-06-13 20:20:40 +0000644
645if !exists("no_buffers_menu")
646
647" Buffer list menu -- Setup functions & actions
648
649" wait with building the menu until after loading 'session' files. Makes
650" startup faster.
651let s:bmenu_wait = 1
652
653if !exists("bmenu_priority")
654 let bmenu_priority = 60
655endif
656
657func! s:BMAdd()
658 if s:bmenu_wait == 0
659 " when adding too many buffers, redraw in short format
660 if s:bmenu_count == &menuitems && s:bmenu_short == 0
661 call s:BMShow()
662 else
663 call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
664 let s:bmenu_count = s:bmenu_count + 1
665 endif
666 endif
667endfunc
668
669func! s:BMRemove()
670 if s:bmenu_wait == 0
671 let name = expand("<afile>")
672 if isdirectory(name)
673 return
674 endif
675 let munge = <SID>BMMunge(name, expand("<abuf>"))
676
677 if s:bmenu_short == 0
678 exe 'silent! aun &Buffers.' . munge
679 else
680 exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
681 endif
682 let s:bmenu_count = s:bmenu_count - 1
683 endif
684endfunc
685
686" Create the buffer menu (delete an existing one first).
687func! s:BMShow(...)
688 let s:bmenu_wait = 1
689 let s:bmenu_short = 1
690 let s:bmenu_count = 0
691 "
692 " get new priority, if exists
693 if a:0 == 1
694 let g:bmenu_priority = a:1
695 endif
696
697 " remove old menu, if exists; keep one entry to avoid a torn off menu to
698 " disappear.
699 silent! unmenu &Buffers
700 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
701 silent! unmenu! &Buffers
702
703 " create new menu; set 'cpo' to include the <CR>
704 let cpo_save = &cpo
705 set cpo&vim
706 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
707 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
708 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
709 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
710 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
711 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
712 let &cpo = cpo_save
713 unmenu &Buffers.Dummy
714
715 " figure out how many buffers there are
716 let buf = 1
717 while buf <= bufnr('$')
718 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000719 let s:bmenu_count = s:bmenu_count + 1
720 endif
721 let buf = buf + 1
722 endwhile
723 if s:bmenu_count <= &menuitems
724 let s:bmenu_short = 0
725 endif
726
727 " iterate through buffer list, adding each buffer to the menu:
728 let buf = 1
729 while buf <= bufnr('$')
730 if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000731 call <SID>BMFilename(bufname(buf), buf)
732 endif
733 let buf = buf + 1
734 endwhile
735 let s:bmenu_wait = 0
736 aug buffer_list
737 au!
738 au BufCreate,BufFilePost * call <SID>BMAdd()
739 au BufDelete,BufFilePre * call <SID>BMRemove()
740 aug END
741endfunc
742
743func! s:BMHash(name)
744 " Make name all upper case, so that chars are between 32 and 96
745 let nm = substitute(a:name, ".*", '\U\0', "")
746 if has("ebcdic")
747 " HACK: Replace all non alphabetics with 'Z'
748 " Just to make it work for now.
749 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
750 let sp = char2nr('A') - 1
751 else
752 let sp = char2nr(' ')
753 endif
754 " convert first six chars into a number for sorting:
755 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)
756endfunc
757
758func! s:BMHash2(name)
759 let nm = substitute(a:name, ".", '\L\0', "")
760 " Not exactly right for EBCDIC...
761 if nm[0] < 'a' || nm[0] > 'z'
762 return '&others.'
763 elseif nm[0] <= 'd'
764 return '&abcd.'
765 elseif nm[0] <= 'h'
766 return '&efgh.'
767 elseif nm[0] <= 'l'
768 return '&ijkl.'
769 elseif nm[0] <= 'p'
770 return '&mnop.'
771 elseif nm[0] <= 't'
772 return '&qrst.'
773 else
774 return '&u-z.'
775 endif
776endfunc
777
778" insert a buffer name into the buffer menu:
779func! s:BMFilename(name, num)
780 if isdirectory(a:name)
781 return
782 endif
783 let munge = <SID>BMMunge(a:name, a:num)
784 let hash = <SID>BMHash(munge)
785 if s:bmenu_short == 0
786 let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
787 else
788 let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
789 endif
790 " set 'cpo' to include the <CR>
791 let cpo_save = &cpo
792 set cpo&vim
793 exe name . ' :confirm b' . a:num . '<CR>'
794 let &cpo = cpo_save
795endfunc
796
797" Truncate a long path to fit it in a menu item.
798if !exists("g:bmenu_max_pathlen")
799 let g:bmenu_max_pathlen = 35
800endif
801func! s:BMTruncName(fname)
802 let name = a:fname
803 if g:bmenu_max_pathlen < 5
804 let name = ""
805 else
806 let len = strlen(name)
807 if len > g:bmenu_max_pathlen
808 let amountl = (g:bmenu_max_pathlen / 2) - 2
809 let amountr = g:bmenu_max_pathlen - amountl - 3
810 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
811 let left = substitute(name, pattern, '\1', '')
812 let right = substitute(name, pattern, '\2', '')
813 if strlen(left) + strlen(right) < len
814 let name = left . '...' . right
815 endif
816 endif
817 endif
818 return name
819endfunc
820
821func! s:BMMunge(fname, bnum)
822 let name = a:fname
823 if name == ''
824 if !exists("g:menutrans_no_file")
Bram Moolenaar6dc819b2018-07-03 16:42:19 +0200825 let g:menutrans_no_file = "[No Name]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000826 endif
827 let name = g:menutrans_no_file
828 else
829 let name = fnamemodify(name, ':p:~')
830 endif
831 " detach file name and separate it out:
832 let name2 = fnamemodify(name, ':t')
833 if a:bnum >= 0
834 let name2 = name2 . ' (' . a:bnum . ')'
835 endif
836 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
837 let name = escape(name, "\\. \t|")
838 let name = substitute(name, "&", "&&", "g")
839 let name = substitute(name, "\n", "^@", "g")
840 return name
841endfunc
842
843" When just starting Vim, load the buffer menu later
844if has("vim_starting")
845 augroup LoadBufferMenu
846 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
847 au VimEnter * au! LoadBufferMenu
848 augroup END
849else
850 call <SID>BMShow()
851endif
852
853endif " !exists("no_buffers_menu")
854
855" Window menu
856an 70.300 &Window.&New<Tab>^Wn <C-W>n
857an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
858an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
859an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
Bram Moolenaar314dd792019-02-03 15:27:20 +0100860an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
861if !exists("*MenuExplOpen")
862 fun MenuExplOpen()
863 if @% == ""
864 20vsp .
865 else
866 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
867 endif
868 endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000869endif
870an 70.335 &Window.-SEP1- <Nop>
871an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
872an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
873an 70.350 &Window.-SEP2- <Nop>
874an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
875an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
Bram Moolenaar214641f2017-03-05 17:04:09 +0100876an 70.355 &Window.Move\ &To.&Left\ Side<Tab>^WH <C-W>H
877an 70.355 &Window.Move\ &To.&Right\ Side<Tab>^WL <C-W>L
Bram Moolenaar071d4272004-06-13 20:20:40 +0000878an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
879an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
880an 70.365 &Window.-SEP3- <Nop>
881an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
882an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
883an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
884an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
885an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
886
887" The popup menu
888an 1.10 PopUp.&Undo u
889an 1.15 PopUp.-SEP1- <Nop>
890vnoremenu 1.20 PopUp.Cu&t "+x
891vnoremenu 1.30 PopUp.&Copy "+y
892cnoremenu 1.30 PopUp.&Copy <C-Y>
893nnoremenu 1.40 PopUp.&Paste "+gP
894cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000895exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
896exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000897vnoremenu 1.50 PopUp.&Delete x
898an 1.55 PopUp.-SEP2- <Nop>
899vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000900
901nnoremenu 1.70 PopUp.Select\ &Word vaw
902onoremenu 1.70 PopUp.Select\ &Word aw
903vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
904inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
905cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
906
907nnoremenu 1.73 PopUp.Select\ &Sentence vas
908onoremenu 1.73 PopUp.Select\ &Sentence as
909vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
910inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
911cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
912
913nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
914onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
915vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
916inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
917cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
918
919nnoremenu 1.80 PopUp.Select\ &Line V
920onoremenu 1.80 PopUp.Select\ &Line <C-C>V
921vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
922inoremenu 1.80 PopUp.Select\ &Line <C-O>V
923cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
924
925nnoremenu 1.90 PopUp.Select\ &Block <C-V>
926onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
927vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
928inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
929cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
930
Bram Moolenaar071d4272004-06-13 20:20:40 +0000931noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
932inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
933cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
934
Bram Moolenaar45360022005-07-21 21:08:21 +0000935if has("spell")
936 " Spell suggestions in the popup menu. Note that this will slow down the
937 " appearance of the menu!
938 func! <SID>SpellPopup()
939 if exists("s:changeitem") && s:changeitem != ''
940 call <SID>SpellDel()
941 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000942
943 " Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000944 if !&spell || &spelllang == ''
945 return
946 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000947
948 let curcol = col('.')
Bram Moolenaar1c7715d2005-10-03 22:02:18 +0000949 let [w, a] = spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000950 if col('.') > curcol " don't use word after the cursor
951 let w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +0000952 endif
953 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000954 if a == 'caps'
955 let s:suglist = [substitute(w, '.*', '\u&', '')]
956 else
957 let s:suglist = spellsuggest(w, 10)
958 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200959 if len(s:suglist) > 0
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +0200960 if !exists("g:menutrans_spell_change_ARG_to")
961 let g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to'
962 endif
963 let s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .'))
Bram Moolenaar45360022005-07-21 21:08:21 +0000964 let s:fromword = w
965 let pri = 1
Bram Moolenaar62292582010-07-10 16:36:59 +0200966 " set 'cpo' to include the <CR>
967 let cpo_save = &cpo
968 set cpo&vim
Bram Moolenaar45360022005-07-21 21:08:21 +0000969 for sug in s:suglist
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000970 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
Bram Moolenaar45360022005-07-21 21:08:21 +0000971 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
972 let pri += 1
973 endfor
974
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +0200975 if !exists("g:menutrans_spell_add_ARG_to_word_list")
976 let g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List'
977 endif
978 let s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .'))
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000979 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000980
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +0200981 if !exists("g:menutrans_spell_ignore_ARG")
982 let g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"'
983 endif
984 let s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .'))
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000985 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +0000986
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000987 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar62292582010-07-10 16:36:59 +0200988 let &cpo = cpo_save
Bram Moolenaar45360022005-07-21 21:08:21 +0000989 endif
990 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200991 call cursor(0, curcol) " put the cursor back where it was
Bram Moolenaar45360022005-07-21 21:08:21 +0000992 endfunc
993
994 func! <SID>SpellReplace(n)
995 let l = getline('.')
Bram Moolenaar62292582010-07-10 16:36:59 +0200996 " Move the cursor to the start of the word.
997 call spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000998 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
999 \ . strpart(l, col('.') + len(s:fromword) - 1))
1000 endfunc
1001
1002 func! <SID>SpellDel()
1003 exe "aunmenu PopUp." . s:changeitem
1004 exe "aunmenu PopUp." . s:additem
1005 exe "aunmenu PopUp." . s:ignoreitem
1006 aunmenu PopUp.-SpellSep-
1007 let s:changeitem = ''
1008 endfun
1009
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001010 augroup SpellPopupMenu
1011 au! MenuPopup * call <SID>SpellPopup()
1012 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +00001013endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00001014
1015" The GUI toolbar (for MS-Windows and GTK)
1016if has("toolbar")
1017 an 1.10 ToolBar.Open :browse confirm e<CR>
1018 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
1019 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
1020
1021 if has("printer")
1022 an 1.40 ToolBar.Print :hardcopy<CR>
1023 vunmenu ToolBar.Print
1024 vnoremenu ToolBar.Print :hardcopy<CR>
1025 elseif has("unix")
1026 an 1.40 ToolBar.Print :w !lpr<CR>
1027 vunmenu ToolBar.Print
1028 vnoremenu ToolBar.Print :w !lpr<CR>
1029 endif
1030
1031 an 1.45 ToolBar.-sep1- <Nop>
1032 an 1.50 ToolBar.Undo u
1033 an 1.60 ToolBar.Redo <C-R>
1034
1035 an 1.65 ToolBar.-sep2- <Nop>
1036 vnoremenu 1.70 ToolBar.Cut "+x
1037 vnoremenu 1.80 ToolBar.Copy "+y
1038 cnoremenu 1.80 ToolBar.Copy <C-Y>
1039 nnoremenu 1.90 ToolBar.Paste "+gP
1040 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001041 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
1042 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +00001043
1044 if !has("gui_athena")
1045 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001046 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001047 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001048 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001049 an 1.110 ToolBar.FindNext n
1050 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +00001051 endif
1052
Bram Moolenaar071d4272004-06-13 20:20:40 +00001053 an 1.215 ToolBar.-sep5- <Nop>
1054 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
1055 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
1056 an 1.240 ToolBar.RunScript :browse so<CR>
1057
1058 an 1.245 ToolBar.-sep6- <Nop>
1059 an 1.250 ToolBar.Make :make<CR>
1060 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
1061 an 1.280 ToolBar.TagJump g<C-]>
1062
1063 an 1.295 ToolBar.-sep7- <Nop>
1064 an 1.300 ToolBar.Help :help<CR>
1065 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1066
1067" Only set the tooltips here if not done in a language menu file
1068if exists("*Do_toolbar_tmenu")
1069 call Do_toolbar_tmenu()
1070else
1071 let did_toolbar_tmenu = 1
1072 tmenu ToolBar.Open Open file
1073 tmenu ToolBar.Save Save current file
1074 tmenu ToolBar.SaveAll Save all files
1075 tmenu ToolBar.Print Print
1076 tmenu ToolBar.Undo Undo
1077 tmenu ToolBar.Redo Redo
1078 tmenu ToolBar.Cut Cut to clipboard
1079 tmenu ToolBar.Copy Copy to clipboard
1080 tmenu ToolBar.Paste Paste from Clipboard
1081 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001082 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001083 tmenu ToolBar.FindNext Find Next
1084 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001085 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001086 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001087 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001088 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001089 tmenu ToolBar.Make Make current project (:make)
1090 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001091 tmenu ToolBar.TagJump Jump to tag under cursor
1092 tmenu ToolBar.Help Vim Help
1093 tmenu ToolBar.FindHelp Search Vim Help
1094endif
1095
1096" Select a session to load; default to current session name if present
1097fun! s:LoadVimSesn()
1098 if strlen(v:this_session) > 0
Bram Moolenaaraba88572008-06-25 20:13:35 +00001099 let name = s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001100 else
1101 let name = "Session.vim"
1102 endif
1103 execute "browse so " . name
1104endfun
1105
1106" Select a session to save; default to current session name if present
1107fun! s:SaveVimSesn()
1108 if strlen(v:this_session) == 0
1109 let v:this_session = "Session.vim"
1110 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +00001111 execute "browse mksession! " . s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001112endfun
1113
1114endif
1115
1116endif " !exists("did_install_default_menus")
1117
1118" Define these items always, so that syntax can be switched on when it wasn't.
1119" But skip them when the Syntax menu was disabled by the user.
1120if !exists("did_install_syntax_menu")
1121 an 50.212 &Syntax.&Manual :syn manual<CR>
1122 an 50.214 &Syntax.A&utomatic :syn on<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001123 an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001124 if !exists("*s:SynOnOff")
1125 fun s:SynOnOff()
1126 if has("syntax_items")
1127 syn clear
1128 else
1129 if !exists("g:syntax_on")
1130 syn manual
1131 endif
1132 set syn=ON
1133 endif
1134 endfun
1135 endif
1136endif
1137
1138
1139" Install the Syntax menu only when filetype.vim has been loaded or when
1140" manual syntax highlighting is enabled.
1141" Avoid installing the Syntax menu twice.
1142if (exists("did_load_filetypes") || exists("syntax_on"))
1143 \ && !exists("did_install_syntax_menu")
1144 let did_install_syntax_menu = 1
1145
1146" Skip setting up the individual syntax selection menus unless
1147" do_syntax_sel_menu is defined (it takes quite a bit of time).
1148if exists("do_syntax_sel_menu")
1149 runtime! synmenu.vim
1150else
Bram Moolenaar040c1fe2017-11-09 19:45:48 +01001151 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 +00001152 an 50.195 &Syntax.-SEP1- <Nop>
1153endif
1154
1155an 50.210 &Syntax.&Off :syn off<CR>
1156an 50.700 &Syntax.-SEP3- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001157an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1158an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001159an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1160
1161endif " !exists("did_install_syntax_menu")
1162
Bram Moolenaar071d4272004-06-13 20:20:40 +00001163" Restore the previous value of 'cpoptions'.
1164let &cpo = s:cpo_save
1165unlet s:cpo_save
1166
1167" vim: set sw=2 :