blob: 8400180aaa1f5315dd2b9363046f6c3d2c8876b4 [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 Moolenaar5908fdf2020-03-29 20:08:45 +02005" Last Change: 2020 Mar 29
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 Moolenaar5e94a292020-03-19 18:46:57 +0100142func s: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 Moolenaar5e94a292020-03-19 18:46:57 +0100146func s:FnameEscape(fname)
Bram Moolenaaraba88572008-06-25 20:13:35 +0000147 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>
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100162if exists(':tlmenu')
163 tlnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-W>:<C-Y><CR>
164endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000165nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
166cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
Bram Moolenaar4c5d8152018-10-19 22:36:53 +0200167if exists(':tlmenu')
168 tlnoremenu &Edit.&Paste<Tab>"+gP <C-W>"+
169endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000170exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v']
171exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000172nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
173inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
174nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
175inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100176if has("win32")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000177 vnoremenu 20.390 &Edit.&Delete<Tab>x x
178endif
179noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
180inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
181cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
182
183an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100184if has("win32") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
186 vunmenu &Edit.&Find\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000187 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000188 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
189 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000190 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000191else
192 an 20.410 &Edit.&Find<Tab>/ /
193 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
194 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
195 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
196endif
197
198an 20.425 &Edit.-SEP3- <Nop>
199an 20.430 &Edit.Settings\ &Window :options<CR>
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000200an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
201
202fun! s:EditVimrc()
203 if $MYVIMRC != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000204 let fname = $MYVIMRC
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200205 elseif has("win32")
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000206 if $HOME != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000207 let fname = $HOME . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000208 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000209 let fname = $VIM . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000210 endif
211 elseif has("amiga")
212 let fname = "s:.vimrc"
213 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000214 let fname = $HOME . "/.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000215 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000216 let fname = s:FnameEscape(fname)
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000217 if &mod
218 exe "split " . fname
219 else
220 exe "edit " . fname
221 endif
222endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000223
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000224fun! s:FixFText()
225 " Fix text in nameless register to be used with :promptfind.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000226 return substitute(@", "[\r\n]", '\\n', 'g')
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000227endfun
228
Bram Moolenaar071d4272004-06-13 20:20:40 +0000229" Edit/Global Settings
230an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100231an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignoring\ Case<Tab>:set\ ic! :set ic! ic?<CR>
232an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showing\ Matched\ Pairs<Tab>:set\ sm! :set sm! sm?<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000233
Bram Moolenaar214641f2017-03-05 17:04:09 +0100234an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 1\ :set so=1<CR>
235an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 2\ :set so=2<CR>
236an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 3\ :set so=3<CR>
237an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 4\ :set so=4<CR>
238an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 5\ :set so=5<CR>
239an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 7\ :set so=7<CR>
240an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 10\ :set so=10<CR>
241an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 100\ :set so=100<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000242
243an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
244an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100245an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ Mode :set ve=insert<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000246an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
247an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
248an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100249an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatibility<Tab>:set\ cp! :set cp!<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000250an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
251an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
252"
253" GUI options
254an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
255an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
256an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
257an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
258an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
259
260fun! s:SearchP()
261 if !exists("g:menutrans_path_dialog")
262 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
263 endif
264 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
265 if n != ""
266 let &path = substitute(n, ' ', '\\ ', 'g')
267 endif
268endfun
269
270fun! s:TagFiles()
271 if !exists("g:menutrans_tags_dialog")
272 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
273 endif
274 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
275 if n != ""
276 let &tags = substitute(n, ' ', '\\ ', 'g')
277 endif
278endfun
279
280fun! s:ToggleGuiOption(option)
281 " If a:option is already set in guioptions, then we want to remove it
282 if match(&guioptions, "\\C" . a:option) > -1
283 exec "set go-=" . a:option
284 else
285 exec "set go+=" . a:option
286 endif
287endfun
288
289" Edit/File Settings
290
291" Boolean options
292an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100293an 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 +0000294an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100295an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrapping<Tab>:set\ wrap! :set wrap! wrap?<CR>
296an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rapping\ at\ Word<Tab>:set\ lbr! :set lbr! lbr?<CR>
297an 20.440.160 &Edit.F&ile\ Settings.Toggle\ Tab\ &Expanding<Tab>:set\ et! :set et! et?<CR>
298an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &Auto\ Indenting<Tab>:set\ ai! :set ai! ai?<CR>
299an 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 +0000300
301" other options
302an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
303an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
304an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
305an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
306an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
307an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
308an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
309
310an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
311an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
312an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
313an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
314an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
315an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
316
317an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
318an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
319fun! s:TextWidth()
320 if !exists("g:menutrans_textwidth_dialog")
321 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
322 endif
323 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
324 if n != ""
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200325 " Remove leading zeros to avoid it being used as an octal number.
326 " But keep a zero by itself.
327 let tw = substitute(n, "^0*", "", "")
Bram Moolenaar214641f2017-03-05 17:04:09 +0100328 let &tw = tw == '' ? 0 : tw
Bram Moolenaar071d4272004-06-13 20:20:40 +0000329 endif
330endfun
331
332fun! s:FileFormat()
333 if !exists("g:menutrans_fileformat_dialog")
334 let g:menutrans_fileformat_dialog = "Select format for writing the file"
335 endif
336 if !exists("g:menutrans_fileformat_choices")
337 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
338 endif
339 if &ff == "dos"
340 let def = 2
341 elseif &ff == "mac"
342 let def = 3
343 else
344 let def = 1
345 endif
346 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
347 if n == 1
348 set ff=unix
349 elseif n == 2
350 set ff=dos
351 elseif n == 3
352 set ff=mac
353 endif
354endfun
355
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100356let s:did_setup_color_schemes = 0
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200357
Bram Moolenaar071d4272004-06-13 20:20:40 +0000358" Setup the Edit.Color Scheme submenu
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100359func s:SetupColorSchemes() abort
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100360 if s:did_setup_color_schemes
361 return
362 endif
363 let s:did_setup_color_schemes = 1
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200364
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100365 let n = globpath(&runtimepath, "colors/*.vim", 1, 1)
Bram Moolenaar30e9b3c2019-09-07 16:24:12 +0200366 let n += globpath(&packpath, "pack/*/start/*/colors/*.vim", 1, 1)
367 let n += globpath(&packpath, "pack/*/opt/*/colors/*.vim", 1, 1)
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200368
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100369 " Ignore case for VMS and windows, sort on name
370 let names = sort(map(n, 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200371
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100372 " define all the submenu entries
373 let idx = 100
374 for name in names
375 exe "an 20.450." . idx . ' &Edit.C&olor\ Scheme.' . name . " :colors " . name . "<CR>"
376 let idx = idx + 10
377 endfor
378 silent! aunmenu &Edit.Show\ C&olor\ Schemes\ in\ Menu
379endfun
380if exists("do_no_lazyload_menus")
381 call s:SetupColorSchemes()
382else
383 an <silent> 20.450 &Edit.Show\ C&olor\ Schemes\ in\ Menu :call <SID>SetupColorSchemes()<CR>
384endif
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200385
Bram Moolenaar071d4272004-06-13 20:20:40 +0000386
387" Setup the Edit.Keymap submenu
388if has("keymap")
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100389 let s:did_setup_keymaps = 0
390
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100391 func s:SetupKeymaps() abort
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100392 if s:did_setup_keymaps
393 return
394 endif
395 let s:did_setup_keymaps = 1
396
397 let n = globpath(&runtimepath, "keymap/*.vim", 1, 1)
398 if !empty(n)
399 let idx = 100
400 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
401 for name in n
402 " Ignore case for VMS and windows
403 let name = substitute(name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
404 exe "an 20.460." . idx . ' &Edit.&Keymap.' . name . " :set keymap=" . name . "<CR>"
405 let idx = idx + 10
406 endfor
407 endif
408 silent! aunmenu &Edit.Show\ &Keymaps\ in\ Menu
409 endfun
410 if exists("do_no_lazyload_menus")
411 call s:SetupKeymaps()
412 else
413 an <silent> 20.460 &Edit.Show\ &Keymaps\ in\ Menu :call <SID>SetupKeymaps()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000414 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000415endif
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100416if has("win32") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000417 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
418endif
419
420" Programming menu
421if !exists("g:ctags_command")
422 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000423 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000424 else
425 let g:ctags_command = "ctags -R ."
426 endif
427endif
428
Bram Moolenaar214641f2017-03-05 17:04:09 +0100429an 40.300 &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
430vunmenu &Tools.&Jump\ to\ This\ Tag<Tab>g^]
431vnoremenu &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
432an 40.310 &Tools.Jump\ &Back<Tab>^T <C-T>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000433an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
434
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000435if has("folding") || has("spell")
436 an 40.330 &Tools.-SEP1- <Nop>
437endif
438
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000439" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000440if has("spell")
441 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
442 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100443 an 40.335.130 &Tools.&Spelling.To\ &Next\ Error<Tab>]s ]s
444 an 40.335.130 &Tools.&Spelling.To\ &Previous\ Error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000445 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar214641f2017-03-05 17:04:09 +0100446 an 40.335.150 &Tools.&Spelling.&Repeat\ Correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000447 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100448 an 40.335.210 &Tools.&Spelling.Set\ Language\ to\ "en" :set spl=en spell<CR>
449 an 40.335.220 &Tools.&Spelling.Set\ Language\ to\ "en_au" :set spl=en_au spell<CR>
450 an 40.335.230 &Tools.&Spelling.Set\ Language\ to\ "en_ca" :set spl=en_ca spell<CR>
451 an 40.335.240 &Tools.&Spelling.Set\ Language\ to\ "en_gb" :set spl=en_gb spell<CR>
452 an 40.335.250 &Tools.&Spelling.Set\ Language\ to\ "en_nz" :set spl=en_nz spell<CR>
453 an 40.335.260 &Tools.&Spelling.Set\ Language\ to\ "en_us" :set spl=en_us spell<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000454 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
455
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000456 let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100457 func s:SpellLang()
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000458 for cmd in s:undo_spellang
459 exe "silent! " . cmd
460 endfor
461 let s:undo_spellang = []
462
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000463 if &enc == "iso-8859-15"
464 let enc = "latin1"
465 else
466 let enc = &enc
467 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000468
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200469 if !exists("g:menutrans_set_lang_to")
Bram Moolenaar214641f2017-03-05 17:04:09 +0100470 let g:menutrans_set_lang_to = 'Set Language to'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200471 endif
472
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000473 let found = 0
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100474 let s = globpath(&runtimepath, "spell/*." . enc . ".spl", 1, 1)
475 if !empty(s)
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000476 let n = 300
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100477 for f in s
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000478 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000479 if nm != "en" && nm !~ '/'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200480 let _nm = nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000481 let found += 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200482 let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"'
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000483 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
484 let s:undo_spellang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000485 endif
486 let n += 10
487 endfor
488 endif
489 if found == 0
490 echomsg "Could not find other spell files"
491 elseif found == 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200492 echomsg "Found spell file " . _nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000493 else
494 echomsg "Found " . found . " more spell files"
495 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000496 " Need to redo this when 'encoding' is changed.
497 augroup spellmenu
498 au! EncodingChanged * call <SID>SpellLang()
499 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000500 endfun
501
502endif
503
Bram Moolenaar071d4272004-06-13 20:20:40 +0000504" Tools.Fold Menu
505if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000506 " open close folds
Bram Moolenaar214641f2017-03-05 17:04:09 +0100507 an 40.340.110 &Tools.&Folding.&Enable/Disable\ Folds<Tab>zi zi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000508 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
Bram Moolenaar214641f2017-03-05 17:04:09 +0100509 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx zMzx
510 inoremenu 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx <C-O>zM<C-O>zx
511 an 40.340.130 &Tools.&Folding.C&lose\ More\ Folds<Tab>zm zm
512 an 40.340.140 &Tools.&Folding.&Close\ All\ Folds<Tab>zM zM
513 an 40.340.150 &Tools.&Folding.O&pen\ More\ Folds<Tab>zr zr
Bram Moolenaar3df01732017-02-17 22:47:16 +0100514 an 40.340.160 &Tools.&Folding.&Open\ All\ Folds<Tab>zR zR
Bram Moolenaar071d4272004-06-13 20:20:40 +0000515 " fold method
516 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
517 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
518 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
519 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
520 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
521 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
522 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
523 " create and delete folds
524 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
525 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
526 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
527 " moving around in folds
528 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100529 an 40.340.310.10 &Tools.&Folding.Fold\ Col&umn\ Width.\ &0\ :set fdc=0<CR>
530 an 40.340.310.20 &Tools.&Folding.Fold\ Col&umn\ Width.\ &2\ :set fdc=2<CR>
531 an 40.340.310.30 &Tools.&Folding.Fold\ Col&umn\ Width.\ &3\ :set fdc=3<CR>
532 an 40.340.310.40 &Tools.&Folding.Fold\ Col&umn\ Width.\ &4\ :set fdc=4<CR>
533 an 40.340.310.50 &Tools.&Folding.Fold\ Col&umn\ Width.\ &5\ :set fdc=5<CR>
534 an 40.340.310.60 &Tools.&Folding.Fold\ Col&umn\ Width.\ &6\ :set fdc=6<CR>
535 an 40.340.310.70 &Tools.&Folding.Fold\ Col&umn\ Width.\ &7\ :set fdc=7<CR>
536 an 40.340.310.80 &Tools.&Folding.Fold\ Col&umn\ Width.\ &8\ :set fdc=8<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000537endif " has folding
538
539if has("diff")
540 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
541 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
542 vunmenu &Tools.&Diff.&Get\ Block
543 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
544 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
545 vunmenu &Tools.&Diff.&Put\ Block
546 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
547endif
548
549an 40.358 &Tools.-SEP2- <Nop>
550an 40.360 &Tools.&Make<Tab>:make :make<CR>
551an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
552an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
553an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
554an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
555an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
556an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
557an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
558an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
559an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
560
561an 40.520 &Tools.-SEP3- <Nop>
562an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
563 \ :call <SID>XxdConv()<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100564an <silent> 40.540 &Tools.Conve&rt\ Back<Tab>:%!xxd\ -r
Bram Moolenaar071d4272004-06-13 20:20:40 +0000565 \ :call <SID>XxdBack()<CR>
566
567" Use a function to do the conversion, so that it also works with 'insertmode'
568" set.
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100569func s:XxdConv()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000570 let mod = &mod
571 if has("vms")
572 %!mc vim:xxd
573 else
574 call s:XxdFind()
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100575 exe '%!' . g:xxdprogram
Bram Moolenaar071d4272004-06-13 20:20:40 +0000576 endif
577 if getline(1) =~ "^0000000:" " only if it worked
578 set ft=xxd
579 endif
580 let &mod = mod
581endfun
582
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100583func s:XxdBack()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000584 let mod = &mod
585 if has("vms")
586 %!mc vim:xxd -r
587 else
588 call s:XxdFind()
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100589 exe '%!' . g:xxdprogram . ' -r'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000590 endif
591 set ft=
592 doautocmd filetypedetect BufReadPost
593 let &mod = mod
594endfun
595
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100596func s:XxdFind()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000597 if !exists("g:xxdprogram")
598 " On the PC xxd may not be in the path but in the install directory
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200599 if has("win32") && !executable("xxd")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000600 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100601 if g:xxdprogram =~ ' '
602 let g:xxdprogram = '"' .. g:xxdprogram .. '"'
603 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000604 else
605 let g:xxdprogram = "xxd"
606 endif
607 endif
608endfun
609
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100610let s:did_setup_compilers = 0
611
Bram Moolenaar071d4272004-06-13 20:20:40 +0000612" Setup the Tools.Compiler submenu
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100613func s:SetupCompilers() abort
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100614 if s:did_setup_compilers
615 return
Bram Moolenaar071d4272004-06-13 20:20:40 +0000616 endif
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100617 let s:did_setup_compilers = 1
618
619 let n = globpath(&runtimepath, "compiler/*.vim", 1, 1)
620 let idx = 100
621 for name in n
622 " Ignore case for VMS and windows
623 let name = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
624 exe "an 30.440." . idx . ' &Tools.Se&t\ Compiler.' . name . " :compiler " . name . "<CR>"
625 let idx = idx + 10
626 endfor
627 silent! aunmenu &Tools.Show\ Compiler\ Se&ttings\ in\ Menu
628endfun
629if exists("do_no_lazyload_menus")
630 call s:SetupCompilers()
631else
632 an <silent> 30.440 &Tools.Show\ Compiler\ Se&ttings\ in\ Menu :call <SID>SetupCompilers()<CR>
633endif
634
635" Load ColorScheme, Compiler Setting and Keymap menus when idle.
636if !exists("do_no_lazyload_menus")
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100637 func s:SetupLazyloadMenus()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100638 call s:SetupColorSchemes()
639 call s:SetupCompilers()
640 if has("keymap")
641 call s:SetupKeymaps()
642 endif
643 endfunc
644 augroup SetupLazyloadMenus
645 au!
646 au CursorHold,CursorHoldI * call <SID>SetupLazyloadMenus() | au! SetupLazyloadMenus
647 augroup END
648endif
649
Bram Moolenaar071d4272004-06-13 20:20:40 +0000650
651if !exists("no_buffers_menu")
652
653" Buffer list menu -- Setup functions & actions
654
655" wait with building the menu until after loading 'session' files. Makes
656" startup faster.
657let s:bmenu_wait = 1
658
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100659" Dictionary of buffer number to name. This helps prevent problems where a
660" buffer as renamed and we didn't keep track of that.
661let s:bmenu_items = {}
662
Bram Moolenaar071d4272004-06-13 20:20:40 +0000663if !exists("bmenu_priority")
664 let bmenu_priority = 60
665endif
666
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100667" invoked from a BufCreate or BufFilePost autocommand
668func s:BMAdd()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000669 if s:bmenu_wait == 0
670 " when adding too many buffers, redraw in short format
671 if s:bmenu_count == &menuitems && s:bmenu_short == 0
672 call s:BMShow()
673 else
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100674 let name = expand("<afile>")
Bram Moolenaar5908fdf2020-03-29 20:08:45 +0200675 let num = expand("<abuf>") + 0 " add zero to convert to a number type
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100676 if s:BMCanAdd(name, num)
677 call <SID>BMFilename(name, num)
678 let s:bmenu_count += 1
679 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000680 endif
681 endif
682endfunc
683
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100684" invoked from a BufDelete or BufFilePre autocommand
685func s:BMRemove()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000686 if s:bmenu_wait == 0
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100687 let bufnum = expand("<abuf>")
688 if s:bmenu_items->has_key(bufnum)
689 let menu_name = s:bmenu_items[bufnum]
690 exe 'silent! aun &Buffers.' . menu_name
691 let s:bmenu_count = s:bmenu_count - 1
692 unlet s:bmenu_items[bufnum]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000693 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000694 endif
695endfunc
696
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100697" Return non-zero if buffer with number "name" / "num" is useful to add in the
698" buffer menu.
699func s:BMCanAdd(name, num)
700 " no directory or unlisted buffer
701 if isdirectory(a:name) || !buflisted(a:num)
702 return 0
703 endif
704
705 " no special buffer, such as terminal or popup
706 let buftype = getbufvar(a:num, '&buftype')
707 if buftype != '' && buftype != 'nofile' && buftype != 'nowrite'
708 return 0
709 endif
710
711 " only existing buffers
712 return bufexists(a:num)
713endfunc
714
Bram Moolenaar071d4272004-06-13 20:20:40 +0000715" Create the buffer menu (delete an existing one first).
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100716func s:BMShow(...)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000717 let s:bmenu_wait = 1
718 let s:bmenu_short = 1
719 let s:bmenu_count = 0
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100720 let s:bmenu_items = {}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000721 "
722 " get new priority, if exists
723 if a:0 == 1
724 let g:bmenu_priority = a:1
725 endif
726
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100727 " Remove old menu, if it exists; keep one entry to avoid a torn off menu to
Bram Moolenaare24c5b32019-12-10 22:11:53 +0100728 " disappear. Use try/catch to avoid setting v:errmsg
729 try | unmenu &Buffers | catch | endtry
Bram Moolenaar071d4272004-06-13 20:20:40 +0000730 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
Bram Moolenaare24c5b32019-12-10 22:11:53 +0100731 try | unmenu! &Buffers | catch | endtry
Bram Moolenaar071d4272004-06-13 20:20:40 +0000732
733 " create new menu; set 'cpo' to include the <CR>
734 let cpo_save = &cpo
735 set cpo&vim
736 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
737 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
738 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
739 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
740 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
741 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
742 let &cpo = cpo_save
743 unmenu &Buffers.Dummy
744
745 " figure out how many buffers there are
746 let buf = 1
747 while buf <= bufnr('$')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100748 if s:BMCanAdd(bufname(buf), buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000749 let s:bmenu_count = s:bmenu_count + 1
750 endif
751 let buf = buf + 1
752 endwhile
753 if s:bmenu_count <= &menuitems
754 let s:bmenu_short = 0
755 endif
756
757 " iterate through buffer list, adding each buffer to the menu:
758 let buf = 1
759 while buf <= bufnr('$')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100760 let name = bufname(buf)
761 if s:BMCanAdd(name, buf)
762 call <SID>BMFilename(name, buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000763 endif
764 let buf = buf + 1
765 endwhile
766 let s:bmenu_wait = 0
767 aug buffer_list
768 au!
769 au BufCreate,BufFilePost * call <SID>BMAdd()
770 au BufDelete,BufFilePre * call <SID>BMRemove()
771 aug END
772endfunc
773
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100774func s:BMHash(name)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000775 " Make name all upper case, so that chars are between 32 and 96
776 let nm = substitute(a:name, ".*", '\U\0', "")
777 if has("ebcdic")
778 " HACK: Replace all non alphabetics with 'Z'
779 " Just to make it work for now.
780 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
781 let sp = char2nr('A') - 1
782 else
783 let sp = char2nr(' ')
784 endif
785 " convert first six chars into a number for sorting:
786 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)
787endfunc
788
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100789func s:BMHash2(name)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000790 let nm = substitute(a:name, ".", '\L\0', "")
791 " Not exactly right for EBCDIC...
792 if nm[0] < 'a' || nm[0] > 'z'
793 return '&others.'
794 elseif nm[0] <= 'd'
795 return '&abcd.'
796 elseif nm[0] <= 'h'
797 return '&efgh.'
798 elseif nm[0] <= 'l'
799 return '&ijkl.'
800 elseif nm[0] <= 'p'
801 return '&mnop.'
802 elseif nm[0] <= 't'
803 return '&qrst.'
804 else
805 return '&u-z.'
806 endif
807endfunc
808
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100809" Insert a buffer name into the buffer menu.
810func s:BMFilename(name, num)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000811 let munge = <SID>BMMunge(a:name, a:num)
812 let hash = <SID>BMHash(munge)
813 if s:bmenu_short == 0
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100814 let s:bmenu_items[a:num] = munge
815 let cmd = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
Bram Moolenaar071d4272004-06-13 20:20:40 +0000816 else
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100817 let menu_name = <SID>BMHash2(munge) . munge
818 let s:bmenu_items[a:num] = menu_name
819 let cmd = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . menu_name
Bram Moolenaar071d4272004-06-13 20:20:40 +0000820 endif
821 " set 'cpo' to include the <CR>
822 let cpo_save = &cpo
823 set cpo&vim
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100824 exe cmd . ' :confirm b' . a:num . '<CR>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000825 let &cpo = cpo_save
826endfunc
827
828" Truncate a long path to fit it in a menu item.
829if !exists("g:bmenu_max_pathlen")
830 let g:bmenu_max_pathlen = 35
831endif
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100832func s:BMTruncName(fname)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000833 let name = a:fname
834 if g:bmenu_max_pathlen < 5
835 let name = ""
836 else
837 let len = strlen(name)
838 if len > g:bmenu_max_pathlen
839 let amountl = (g:bmenu_max_pathlen / 2) - 2
840 let amountr = g:bmenu_max_pathlen - amountl - 3
841 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
842 let left = substitute(name, pattern, '\1', '')
843 let right = substitute(name, pattern, '\2', '')
844 if strlen(left) + strlen(right) < len
845 let name = left . '...' . right
846 endif
847 endif
848 endif
849 return name
850endfunc
851
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100852func s:BMMunge(fname, bnum)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000853 let name = a:fname
854 if name == ''
855 if !exists("g:menutrans_no_file")
Bram Moolenaar6dc819b2018-07-03 16:42:19 +0200856 let g:menutrans_no_file = "[No Name]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000857 endif
858 let name = g:menutrans_no_file
859 else
860 let name = fnamemodify(name, ':p:~')
861 endif
862 " detach file name and separate it out:
863 let name2 = fnamemodify(name, ':t')
864 if a:bnum >= 0
865 let name2 = name2 . ' (' . a:bnum . ')'
866 endif
867 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
868 let name = escape(name, "\\. \t|")
869 let name = substitute(name, "&", "&&", "g")
870 let name = substitute(name, "\n", "^@", "g")
871 return name
872endfunc
873
874" When just starting Vim, load the buffer menu later
875if has("vim_starting")
876 augroup LoadBufferMenu
877 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
878 au VimEnter * au! LoadBufferMenu
879 augroup END
880else
881 call <SID>BMShow()
882endif
883
884endif " !exists("no_buffers_menu")
885
886" Window menu
887an 70.300 &Window.&New<Tab>^Wn <C-W>n
888an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
889an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
890an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
Bram Moolenaar314dd792019-02-03 15:27:20 +0100891an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
892if !exists("*MenuExplOpen")
893 fun MenuExplOpen()
894 if @% == ""
895 20vsp .
896 else
897 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
898 endif
899 endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000900endif
901an 70.335 &Window.-SEP1- <Nop>
902an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
903an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
904an 70.350 &Window.-SEP2- <Nop>
905an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
906an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
Bram Moolenaar214641f2017-03-05 17:04:09 +0100907an 70.355 &Window.Move\ &To.&Left\ Side<Tab>^WH <C-W>H
908an 70.355 &Window.Move\ &To.&Right\ Side<Tab>^WL <C-W>L
Bram Moolenaar071d4272004-06-13 20:20:40 +0000909an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
910an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
911an 70.365 &Window.-SEP3- <Nop>
912an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
913an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
914an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
915an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
916an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
917
918" The popup menu
919an 1.10 PopUp.&Undo u
920an 1.15 PopUp.-SEP1- <Nop>
921vnoremenu 1.20 PopUp.Cu&t "+x
922vnoremenu 1.30 PopUp.&Copy "+y
923cnoremenu 1.30 PopUp.&Copy <C-Y>
924nnoremenu 1.40 PopUp.&Paste "+gP
925cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000926exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
927exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000928vnoremenu 1.50 PopUp.&Delete x
929an 1.55 PopUp.-SEP2- <Nop>
930vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000931
932nnoremenu 1.70 PopUp.Select\ &Word vaw
933onoremenu 1.70 PopUp.Select\ &Word aw
934vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
935inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
936cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
937
938nnoremenu 1.73 PopUp.Select\ &Sentence vas
939onoremenu 1.73 PopUp.Select\ &Sentence as
940vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
941inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
942cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
943
944nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
945onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
946vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
947inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
948cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
949
950nnoremenu 1.80 PopUp.Select\ &Line V
951onoremenu 1.80 PopUp.Select\ &Line <C-C>V
952vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
953inoremenu 1.80 PopUp.Select\ &Line <C-O>V
954cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
955
956nnoremenu 1.90 PopUp.Select\ &Block <C-V>
957onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
958vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
959inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
960cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
961
Bram Moolenaar071d4272004-06-13 20:20:40 +0000962noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
963inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
964cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
965
Bram Moolenaar45360022005-07-21 21:08:21 +0000966if has("spell")
967 " Spell suggestions in the popup menu. Note that this will slow down the
968 " appearance of the menu!
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100969 func s:SpellPopup()
Bram Moolenaar45360022005-07-21 21:08:21 +0000970 if exists("s:changeitem") && s:changeitem != ''
971 call <SID>SpellDel()
972 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000973
974 " Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000975 if !&spell || &spelllang == ''
976 return
977 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000978
979 let curcol = col('.')
Bram Moolenaar1c7715d2005-10-03 22:02:18 +0000980 let [w, a] = spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +0000981 if col('.') > curcol " don't use word after the cursor
982 let w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +0000983 endif
984 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000985 if a == 'caps'
986 let s:suglist = [substitute(w, '.*', '\u&', '')]
987 else
988 let s:suglist = spellsuggest(w, 10)
989 endif
Bram Moolenaar62292582010-07-10 16:36:59 +0200990 if len(s:suglist) > 0
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +0200991 if !exists("g:menutrans_spell_change_ARG_to")
992 let g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to'
993 endif
994 let s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .'))
Bram Moolenaar45360022005-07-21 21:08:21 +0000995 let s:fromword = w
996 let pri = 1
Bram Moolenaar62292582010-07-10 16:36:59 +0200997 " set 'cpo' to include the <CR>
998 let cpo_save = &cpo
999 set cpo&vim
Bram Moolenaar45360022005-07-21 21:08:21 +00001000 for sug in s:suglist
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001001 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
Bram Moolenaar45360022005-07-21 21:08:21 +00001002 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
1003 let pri += 1
1004 endfor
1005
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001006 if !exists("g:menutrans_spell_add_ARG_to_word_list")
1007 let g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List'
1008 endif
1009 let s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .'))
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001010 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001011
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001012 if !exists("g:menutrans_spell_ignore_ARG")
1013 let g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"'
1014 endif
1015 let s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .'))
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001016 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001017
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001018 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar62292582010-07-10 16:36:59 +02001019 let &cpo = cpo_save
Bram Moolenaar45360022005-07-21 21:08:21 +00001020 endif
1021 endif
Bram Moolenaar62292582010-07-10 16:36:59 +02001022 call cursor(0, curcol) " put the cursor back where it was
Bram Moolenaar45360022005-07-21 21:08:21 +00001023 endfunc
1024
Bram Moolenaar5e94a292020-03-19 18:46:57 +01001025 func s:SpellReplace(n)
Bram Moolenaar45360022005-07-21 21:08:21 +00001026 let l = getline('.')
Bram Moolenaar62292582010-07-10 16:36:59 +02001027 " Move the cursor to the start of the word.
1028 call spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +00001029 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
1030 \ . strpart(l, col('.') + len(s:fromword) - 1))
1031 endfunc
1032
Bram Moolenaar5e94a292020-03-19 18:46:57 +01001033 func s:SpellDel()
Bram Moolenaar45360022005-07-21 21:08:21 +00001034 exe "aunmenu PopUp." . s:changeitem
1035 exe "aunmenu PopUp." . s:additem
1036 exe "aunmenu PopUp." . s:ignoreitem
1037 aunmenu PopUp.-SpellSep-
1038 let s:changeitem = ''
1039 endfun
1040
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001041 augroup SpellPopupMenu
1042 au! MenuPopup * call <SID>SpellPopup()
1043 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +00001044endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00001045
1046" The GUI toolbar (for MS-Windows and GTK)
1047if has("toolbar")
1048 an 1.10 ToolBar.Open :browse confirm e<CR>
1049 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
1050 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
1051
1052 if has("printer")
1053 an 1.40 ToolBar.Print :hardcopy<CR>
1054 vunmenu ToolBar.Print
1055 vnoremenu ToolBar.Print :hardcopy<CR>
1056 elseif has("unix")
1057 an 1.40 ToolBar.Print :w !lpr<CR>
1058 vunmenu ToolBar.Print
1059 vnoremenu ToolBar.Print :w !lpr<CR>
1060 endif
1061
1062 an 1.45 ToolBar.-sep1- <Nop>
1063 an 1.50 ToolBar.Undo u
1064 an 1.60 ToolBar.Redo <C-R>
1065
1066 an 1.65 ToolBar.-sep2- <Nop>
1067 vnoremenu 1.70 ToolBar.Cut "+x
1068 vnoremenu 1.80 ToolBar.Copy "+y
1069 cnoremenu 1.80 ToolBar.Copy <C-Y>
1070 nnoremenu 1.90 ToolBar.Paste "+gP
1071 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001072 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
1073 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +00001074
1075 if !has("gui_athena")
1076 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001077 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001078 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001079 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001080 an 1.110 ToolBar.FindNext n
1081 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +00001082 endif
1083
Bram Moolenaar071d4272004-06-13 20:20:40 +00001084 an 1.215 ToolBar.-sep5- <Nop>
1085 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
1086 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
1087 an 1.240 ToolBar.RunScript :browse so<CR>
1088
1089 an 1.245 ToolBar.-sep6- <Nop>
1090 an 1.250 ToolBar.Make :make<CR>
1091 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
1092 an 1.280 ToolBar.TagJump g<C-]>
1093
1094 an 1.295 ToolBar.-sep7- <Nop>
1095 an 1.300 ToolBar.Help :help<CR>
1096 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1097
1098" Only set the tooltips here if not done in a language menu file
1099if exists("*Do_toolbar_tmenu")
1100 call Do_toolbar_tmenu()
1101else
1102 let did_toolbar_tmenu = 1
1103 tmenu ToolBar.Open Open file
1104 tmenu ToolBar.Save Save current file
1105 tmenu ToolBar.SaveAll Save all files
1106 tmenu ToolBar.Print Print
1107 tmenu ToolBar.Undo Undo
1108 tmenu ToolBar.Redo Redo
1109 tmenu ToolBar.Cut Cut to clipboard
1110 tmenu ToolBar.Copy Copy to clipboard
1111 tmenu ToolBar.Paste Paste from Clipboard
1112 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001113 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001114 tmenu ToolBar.FindNext Find Next
1115 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001116 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001117 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001118 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001119 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001120 tmenu ToolBar.Make Make current project (:make)
1121 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001122 tmenu ToolBar.TagJump Jump to tag under cursor
1123 tmenu ToolBar.Help Vim Help
1124 tmenu ToolBar.FindHelp Search Vim Help
1125endif
1126
1127" Select a session to load; default to current session name if present
1128fun! s:LoadVimSesn()
1129 if strlen(v:this_session) > 0
Bram Moolenaaraba88572008-06-25 20:13:35 +00001130 let name = s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001131 else
1132 let name = "Session.vim"
1133 endif
1134 execute "browse so " . name
1135endfun
1136
1137" Select a session to save; default to current session name if present
1138fun! s:SaveVimSesn()
1139 if strlen(v:this_session) == 0
1140 let v:this_session = "Session.vim"
1141 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +00001142 execute "browse mksession! " . s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001143endfun
1144
1145endif
1146
1147endif " !exists("did_install_default_menus")
1148
1149" Define these items always, so that syntax can be switched on when it wasn't.
1150" But skip them when the Syntax menu was disabled by the user.
1151if !exists("did_install_syntax_menu")
1152 an 50.212 &Syntax.&Manual :syn manual<CR>
1153 an 50.214 &Syntax.A&utomatic :syn on<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001154 an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001155 if !exists("*s:SynOnOff")
1156 fun s:SynOnOff()
1157 if has("syntax_items")
1158 syn clear
1159 else
1160 if !exists("g:syntax_on")
1161 syn manual
1162 endif
1163 set syn=ON
1164 endif
1165 endfun
1166 endif
1167endif
1168
1169
1170" Install the Syntax menu only when filetype.vim has been loaded or when
1171" manual syntax highlighting is enabled.
1172" Avoid installing the Syntax menu twice.
1173if (exists("did_load_filetypes") || exists("syntax_on"))
1174 \ && !exists("did_install_syntax_menu")
1175 let did_install_syntax_menu = 1
1176
1177" Skip setting up the individual syntax selection menus unless
1178" do_syntax_sel_menu is defined (it takes quite a bit of time).
1179if exists("do_syntax_sel_menu")
1180 runtime! synmenu.vim
1181else
Bram Moolenaar040c1fe2017-11-09 19:45:48 +01001182 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 +00001183 an 50.195 &Syntax.-SEP1- <Nop>
1184endif
1185
1186an 50.210 &Syntax.&Off :syn off<CR>
1187an 50.700 &Syntax.-SEP3- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001188an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1189an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001190an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1191
1192endif " !exists("did_install_syntax_menu")
1193
Bram Moolenaar071d4272004-06-13 20:20:40 +00001194" Restore the previous value of 'cpoptions'.
1195let &cpo = s:cpo_save
1196unlet s:cpo_save
1197
1198" vim: set sw=2 :