blob: 5f4e395e122f9103a4238d8a928a8492f7c2d1ba [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 Moolenaarfa3b7232021-12-24 13:18:38 +00005" Last Change: 2021 Dec 22
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
Bram Moolenaarb45cd362020-09-28 21:41:49 +020092if exists(':tlmenu')
93 tlnoremenu 9999.10 &Help.&Overview<Tab><F1> <C-W>:help<CR>
94 tlnoremenu 9999.20 &Help.&User\ Manual <C-W>:help usr_toc<CR>
95 tlnoremenu 9999.30 &Help.&How-To\ Links <C-W>:help how-to<CR>
96 tlnoremenu <silent> 9999.40 &Help.&Find\.\.\. <C-W>:call <SID>Helpfind()<CR>
97 tlnoremenu 9999.45 &Help.-sep1- <Nop>
98 tlnoremenu 9999.50 &Help.&Credits <C-W>:help credits<CR>
99 tlnoremenu 9999.60 &Help.Co&pying <C-W>:help copying<CR>
100 tlnoremenu 9999.70 &Help.&Sponsor/Register <C-W>:help sponsor<CR>
101 tlnoremenu 9999.70 &Help.O&rphans <C-W>:help kcc<CR>
102 tlnoremenu 9999.75 &Help.-sep2- <Nop>
103 tlnoremenu 9999.80 &Help.&Version <C-W>:version<CR>
104 tlnoremenu 9999.90 &Help.&About <C-W>:intro<CR>
105endif
106
Bram Moolenaar071d4272004-06-13 20:20:40 +0000107fun! s:Helpfind()
108 if !exists("g:menutrans_help_dialog")
109 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')"
110 endif
111 let h = inputdialog(g:menutrans_help_dialog)
112 if h != ""
113 let v:errmsg = ""
114 silent! exe "help " . h
115 if v:errmsg != ""
116 echo v:errmsg
117 endif
118 endif
119endfun
120
121" File menu
122an 10.310 &File.&Open\.\.\.<Tab>:e :browse confirm e<CR>
123an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp :browse sp<CR>
Bram Moolenaar5c8837f2006-02-25 21:52:33 +0000124an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew :browse tabnew<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125an 10.325 &File.&New<Tab>:enew :confirm enew<CR>
126an <silent> 10.330 &File.&Close<Tab>:close
Bram Moolenaarcab49df2011-03-22 17:40:10 +0100127 \ :if winheight(2) < 0 && tabpagewinnr(2) == 0 <Bar>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000128 \ confirm enew <Bar>
129 \ else <Bar>
130 \ confirm close <Bar>
131 \ endif<CR>
132an 10.335 &File.-SEP1- <Nop>
133an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
134an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR>
135
136if has("diff")
137 an 10.400 &File.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100138 an 10.410 &File.Split\ &Diff\ With\.\.\. :browse vert diffsplit<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139 an 10.420 &File.Split\ Patched\ &By\.\.\. :browse vert diffpatch<CR>
140endif
141
142if has("printer")
143 an 10.500 &File.-SEP3- <Nop>
144 an 10.510 &File.&Print :hardcopy<CR>
145 vunmenu &File.&Print
146 vnoremenu &File.&Print :hardcopy<CR>
147elseif has("unix")
148 an 10.500 &File.-SEP3- <Nop>
149 an 10.510 &File.&Print :w !lpr<CR>
150 vunmenu &File.&Print
151 vnoremenu &File.&Print :w !lpr<CR>
152endif
153an 10.600 &File.-SEP4- <Nop>
154an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR>
155an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR>
156
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100157func s:SelectAll()
Bram Moolenaara3e6bc92013-01-30 14:18:00 +0100158 exe "norm! gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000159endfunc
160
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100161func s:FnameEscape(fname)
Bram Moolenaaraba88572008-06-25 20:13:35 +0000162 if exists('*fnameescape')
163 return fnameescape(a:fname)
Bram Moolenaar5c736222010-01-06 20:54:52 +0100164 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000165 return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
166endfunc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000167
168" Edit menu
169an 20.310 &Edit.&Undo<Tab>u u
170an 20.320 &Edit.&Redo<Tab>^R <C-R>
171an 20.330 &Edit.Rep&eat<Tab>\. .
172
173an 20.335 &Edit.-SEP1- <Nop>
174vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
175vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
176cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100177if exists(':tlmenu')
178 tlnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-W>:<C-Y><CR>
179endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000180nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
181cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
Bram Moolenaar4c5d8152018-10-19 22:36:53 +0200182if exists(':tlmenu')
183 tlnoremenu &Edit.&Paste<Tab>"+gP <C-W>"+
184endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000185exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v']
186exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000187nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
188inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
189nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
190inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100191if has("win32")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000192 vnoremenu 20.390 &Edit.&Delete<Tab>x x
193endif
194noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
195inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
196cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
197
198an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100199if has("win32") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000200 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
201 vunmenu &Edit.&Find\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000202 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000203 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
204 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000205 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000206else
207 an 20.410 &Edit.&Find<Tab>/ /
208 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
209 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
210 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
211endif
212
213an 20.425 &Edit.-SEP3- <Nop>
214an 20.430 &Edit.Settings\ &Window :options<CR>
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000215an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
216
217fun! s:EditVimrc()
218 if $MYVIMRC != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000219 let fname = $MYVIMRC
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200220 elseif has("win32")
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000221 if $HOME != ''
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000222 let fname = $HOME . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000223 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000224 let fname = $VIM . "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000225 endif
226 elseif has("amiga")
227 let fname = "s:.vimrc"
228 else
Bram Moolenaare30de2d2008-07-01 19:56:57 +0000229 let fname = $HOME . "/.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000230 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +0000231 let fname = s:FnameEscape(fname)
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000232 if &mod
233 exe "split " . fname
234 else
235 exe "edit " . fname
236 endif
237endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000238
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000239fun! s:FixFText()
240 " Fix text in nameless register to be used with :promptfind.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000241 return substitute(@", "[\r\n]", '\\n', 'g')
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000242endfun
243
Bram Moolenaar071d4272004-06-13 20:20:40 +0000244" Edit/Global Settings
245an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100246an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignoring\ Case<Tab>:set\ ic! :set ic! ic?<CR>
247an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showing\ Matched\ Pairs<Tab>:set\ sm! :set sm! sm?<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000248
Bram Moolenaar214641f2017-03-05 17:04:09 +0100249an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 1\ :set so=1<CR>
250an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 2\ :set so=2<CR>
251an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 3\ :set so=3<CR>
252an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 4\ :set so=4<CR>
253an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 5\ :set so=5<CR>
254an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 7\ :set so=7<CR>
255an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 10\ :set so=10<CR>
256an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 100\ :set so=100<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000257
258an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
259an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100260an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ Mode :set ve=insert<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000261an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
262an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
263an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100264an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatibility<Tab>:set\ cp! :set cp!<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000265an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
266an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
267"
268" GUI options
269an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
270an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
271an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
272an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
273an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
274
275fun! s:SearchP()
276 if !exists("g:menutrans_path_dialog")
277 let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
278 endif
279 let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
280 if n != ""
281 let &path = substitute(n, ' ', '\\ ', 'g')
282 endif
283endfun
284
285fun! s:TagFiles()
286 if !exists("g:menutrans_tags_dialog")
287 let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
288 endif
289 let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
290 if n != ""
291 let &tags = substitute(n, ' ', '\\ ', 'g')
292 endif
293endfun
294
295fun! s:ToggleGuiOption(option)
296 " If a:option is already set in guioptions, then we want to remove it
297 if match(&guioptions, "\\C" . a:option) > -1
298 exec "set go-=" . a:option
299 else
300 exec "set go+=" . a:option
301 endif
302endfun
303
304" Edit/File Settings
305
306" Boolean options
307an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100308an 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 +0000309an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100310an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrapping<Tab>:set\ wrap! :set wrap! wrap?<CR>
311an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rapping\ at\ Word<Tab>:set\ lbr! :set lbr! lbr?<CR>
312an 20.440.160 &Edit.F&ile\ Settings.Toggle\ Tab\ &Expanding<Tab>:set\ et! :set et! et?<CR>
313an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &Auto\ Indenting<Tab>:set\ ai! :set ai! ai?<CR>
314an 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 +0000315
316" other options
317an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
318an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
319an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
320an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
321an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
322an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
323an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
324
325an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
326an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
327an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
328an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
329an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
330an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
331
332an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
333an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
334fun! s:TextWidth()
335 if !exists("g:menutrans_textwidth_dialog")
336 let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
337 endif
338 let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
339 if n != ""
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200340 " Remove leading zeros to avoid it being used as an octal number.
341 " But keep a zero by itself.
342 let tw = substitute(n, "^0*", "", "")
Bram Moolenaar214641f2017-03-05 17:04:09 +0100343 let &tw = tw == '' ? 0 : tw
Bram Moolenaar071d4272004-06-13 20:20:40 +0000344 endif
345endfun
346
347fun! s:FileFormat()
348 if !exists("g:menutrans_fileformat_dialog")
349 let g:menutrans_fileformat_dialog = "Select format for writing the file"
350 endif
351 if !exists("g:menutrans_fileformat_choices")
352 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
353 endif
354 if &ff == "dos"
355 let def = 2
356 elseif &ff == "mac"
357 let def = 3
358 else
359 let def = 1
360 endif
361 let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
362 if n == 1
363 set ff=unix
364 elseif n == 2
365 set ff=dos
366 elseif n == 3
367 set ff=mac
368 endif
369endfun
370
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100371let s:did_setup_color_schemes = 0
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200372
Bram Moolenaar071d4272004-06-13 20:20:40 +0000373" Setup the Edit.Color Scheme submenu
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100374func s:SetupColorSchemes() abort
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100375 if s:did_setup_color_schemes
376 return
377 endif
378 let s:did_setup_color_schemes = 1
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200379
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100380 let n = globpath(&runtimepath, "colors/*.vim", 1, 1)
Bram Moolenaar30e9b3c2019-09-07 16:24:12 +0200381 let n += globpath(&packpath, "pack/*/start/*/colors/*.vim", 1, 1)
382 let n += globpath(&packpath, "pack/*/opt/*/colors/*.vim", 1, 1)
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200383
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100384 " Ignore case for VMS and windows, sort on name
385 let names = sort(map(n, 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200386
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100387 " define all the submenu entries
388 let idx = 100
389 for name in names
390 exe "an 20.450." . idx . ' &Edit.C&olor\ Scheme.' . name . " :colors " . name . "<CR>"
391 let idx = idx + 10
392 endfor
393 silent! aunmenu &Edit.Show\ C&olor\ Schemes\ in\ Menu
394endfun
395if exists("do_no_lazyload_menus")
396 call s:SetupColorSchemes()
397else
398 an <silent> 20.450 &Edit.Show\ C&olor\ Schemes\ in\ Menu :call <SID>SetupColorSchemes()<CR>
399endif
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200400
Bram Moolenaar071d4272004-06-13 20:20:40 +0000401
402" Setup the Edit.Keymap submenu
403if has("keymap")
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100404 let s:did_setup_keymaps = 0
405
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100406 func s:SetupKeymaps() abort
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100407 if s:did_setup_keymaps
408 return
409 endif
410 let s:did_setup_keymaps = 1
411
412 let n = globpath(&runtimepath, "keymap/*.vim", 1, 1)
413 if !empty(n)
414 let idx = 100
415 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
416 for name in n
417 " Ignore case for VMS and windows
418 let name = substitute(name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
419 exe "an 20.460." . idx . ' &Edit.&Keymap.' . name . " :set keymap=" . name . "<CR>"
420 let idx = idx + 10
421 endfor
422 endif
423 silent! aunmenu &Edit.Show\ &Keymaps\ in\ Menu
424 endfun
425 if exists("do_no_lazyload_menus")
426 call s:SetupKeymaps()
427 else
428 an <silent> 20.460 &Edit.Show\ &Keymaps\ in\ Menu :call <SID>SetupKeymaps()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000429 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000430endif
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100431if has("win32") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000432 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
433endif
434
435" Programming menu
436if !exists("g:ctags_command")
437 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000438 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000439 else
440 let g:ctags_command = "ctags -R ."
441 endif
442endif
443
Bram Moolenaar214641f2017-03-05 17:04:09 +0100444an 40.300 &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
445vunmenu &Tools.&Jump\ to\ This\ Tag<Tab>g^]
446vnoremenu &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
447an 40.310 &Tools.Jump\ &Back<Tab>^T <C-T>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000448an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
449
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000450if has("folding") || has("spell")
451 an 40.330 &Tools.-SEP1- <Nop>
452endif
453
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000454" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000455if has("spell")
456 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
457 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100458 an 40.335.130 &Tools.&Spelling.To\ &Next\ Error<Tab>]s ]s
459 an 40.335.130 &Tools.&Spelling.To\ &Previous\ Error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000460 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar214641f2017-03-05 17:04:09 +0100461 an 40.335.150 &Tools.&Spelling.&Repeat\ Correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000462 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100463 an 40.335.210 &Tools.&Spelling.Set\ Language\ to\ "en" :set spl=en spell<CR>
464 an 40.335.220 &Tools.&Spelling.Set\ Language\ to\ "en_au" :set spl=en_au spell<CR>
465 an 40.335.230 &Tools.&Spelling.Set\ Language\ to\ "en_ca" :set spl=en_ca spell<CR>
466 an 40.335.240 &Tools.&Spelling.Set\ Language\ to\ "en_gb" :set spl=en_gb spell<CR>
467 an 40.335.250 &Tools.&Spelling.Set\ Language\ to\ "en_nz" :set spl=en_nz spell<CR>
468 an 40.335.260 &Tools.&Spelling.Set\ Language\ to\ "en_us" :set spl=en_us spell<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000469 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
470
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200471 let s:undo_spelllang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100472 func s:SpellLang()
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200473 for cmd in s:undo_spelllang
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000474 exe "silent! " . cmd
475 endfor
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200476 let s:undo_spelllang = []
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000477
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000478 if &enc == "iso-8859-15"
479 let enc = "latin1"
480 else
481 let enc = &enc
482 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000483
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200484 if !exists("g:menutrans_set_lang_to")
Bram Moolenaar214641f2017-03-05 17:04:09 +0100485 let g:menutrans_set_lang_to = 'Set Language to'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200486 endif
487
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000488 let found = 0
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100489 let s = globpath(&runtimepath, "spell/*." . enc . ".spl", 1, 1)
490 if !empty(s)
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000491 let n = 300
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100492 for f in s
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000493 let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000494 if nm != "en" && nm !~ '/'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200495 let _nm = nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000496 let found += 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200497 let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"'
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000498 exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200499 let s:undo_spelllang += ['aun ' . menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000500 endif
501 let n += 10
502 endfor
503 endif
504 if found == 0
505 echomsg "Could not find other spell files"
506 elseif found == 1
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200507 echomsg "Found spell file " . _nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000508 else
509 echomsg "Found " . found . " more spell files"
510 endif
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000511 " Need to redo this when 'encoding' is changed.
512 augroup spellmenu
513 au! EncodingChanged * call <SID>SpellLang()
514 augroup END
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000515 endfun
516
517endif
518
Bram Moolenaar071d4272004-06-13 20:20:40 +0000519" Tools.Fold Menu
520if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000521 " open close folds
Bram Moolenaar214641f2017-03-05 17:04:09 +0100522 an 40.340.110 &Tools.&Folding.&Enable/Disable\ Folds<Tab>zi zi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000523 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
Bram Moolenaar214641f2017-03-05 17:04:09 +0100524 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx zMzx
525 inoremenu 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx <C-O>zM<C-O>zx
526 an 40.340.130 &Tools.&Folding.C&lose\ More\ Folds<Tab>zm zm
527 an 40.340.140 &Tools.&Folding.&Close\ All\ Folds<Tab>zM zM
528 an 40.340.150 &Tools.&Folding.O&pen\ More\ Folds<Tab>zr zr
Bram Moolenaar3df01732017-02-17 22:47:16 +0100529 an 40.340.160 &Tools.&Folding.&Open\ All\ Folds<Tab>zR zR
Bram Moolenaar071d4272004-06-13 20:20:40 +0000530 " fold method
531 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
532 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
533 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
534 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
535 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
536 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
537 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
538 " create and delete folds
539 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
540 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
541 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
542 " moving around in folds
543 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100544 an 40.340.310.10 &Tools.&Folding.Fold\ Col&umn\ Width.\ &0\ :set fdc=0<CR>
545 an 40.340.310.20 &Tools.&Folding.Fold\ Col&umn\ Width.\ &2\ :set fdc=2<CR>
546 an 40.340.310.30 &Tools.&Folding.Fold\ Col&umn\ Width.\ &3\ :set fdc=3<CR>
547 an 40.340.310.40 &Tools.&Folding.Fold\ Col&umn\ Width.\ &4\ :set fdc=4<CR>
548 an 40.340.310.50 &Tools.&Folding.Fold\ Col&umn\ Width.\ &5\ :set fdc=5<CR>
549 an 40.340.310.60 &Tools.&Folding.Fold\ Col&umn\ Width.\ &6\ :set fdc=6<CR>
550 an 40.340.310.70 &Tools.&Folding.Fold\ Col&umn\ Width.\ &7\ :set fdc=7<CR>
551 an 40.340.310.80 &Tools.&Folding.Fold\ Col&umn\ Width.\ &8\ :set fdc=8<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000552endif " has folding
553
554if has("diff")
555 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
556 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
557 vunmenu &Tools.&Diff.&Get\ Block
558 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
559 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
560 vunmenu &Tools.&Diff.&Put\ Block
561 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
562endif
563
564an 40.358 &Tools.-SEP2- <Nop>
565an 40.360 &Tools.&Make<Tab>:make :make<CR>
566an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
567an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
568an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
569an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
570an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
571an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
572an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
573an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
574an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
575
576an 40.520 &Tools.-SEP3- <Nop>
577an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
578 \ :call <SID>XxdConv()<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100579an <silent> 40.540 &Tools.Conve&rt\ Back<Tab>:%!xxd\ -r
Bram Moolenaar071d4272004-06-13 20:20:40 +0000580 \ :call <SID>XxdBack()<CR>
581
582" Use a function to do the conversion, so that it also works with 'insertmode'
583" set.
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100584func s:XxdConv()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000585 let mod = &mod
586 if has("vms")
587 %!mc vim:xxd
588 else
589 call s:XxdFind()
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100590 exe '%!' . g:xxdprogram
Bram Moolenaar071d4272004-06-13 20:20:40 +0000591 endif
592 if getline(1) =~ "^0000000:" " only if it worked
593 set ft=xxd
594 endif
595 let &mod = mod
596endfun
597
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100598func s:XxdBack()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000599 let mod = &mod
600 if has("vms")
601 %!mc vim:xxd -r
602 else
603 call s:XxdFind()
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100604 exe '%!' . g:xxdprogram . ' -r'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000605 endif
606 set ft=
607 doautocmd filetypedetect BufReadPost
608 let &mod = mod
609endfun
610
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100611func s:XxdFind()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000612 if !exists("g:xxdprogram")
613 " On the PC xxd may not be in the path but in the install directory
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200614 if has("win32") && !executable("xxd")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000615 let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100616 if g:xxdprogram =~ ' '
617 let g:xxdprogram = '"' .. g:xxdprogram .. '"'
618 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000619 else
620 let g:xxdprogram = "xxd"
621 endif
622 endif
623endfun
624
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100625let s:did_setup_compilers = 0
626
Bram Moolenaar071d4272004-06-13 20:20:40 +0000627" Setup the Tools.Compiler submenu
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100628func s:SetupCompilers() abort
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100629 if s:did_setup_compilers
630 return
Bram Moolenaar071d4272004-06-13 20:20:40 +0000631 endif
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100632 let s:did_setup_compilers = 1
633
634 let n = globpath(&runtimepath, "compiler/*.vim", 1, 1)
635 let idx = 100
636 for name in n
637 " Ignore case for VMS and windows
638 let name = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
639 exe "an 30.440." . idx . ' &Tools.Se&t\ Compiler.' . name . " :compiler " . name . "<CR>"
640 let idx = idx + 10
641 endfor
642 silent! aunmenu &Tools.Show\ Compiler\ Se&ttings\ in\ Menu
643endfun
644if exists("do_no_lazyload_menus")
645 call s:SetupCompilers()
646else
647 an <silent> 30.440 &Tools.Show\ Compiler\ Se&ttings\ in\ Menu :call <SID>SetupCompilers()<CR>
648endif
649
650" Load ColorScheme, Compiler Setting and Keymap menus when idle.
651if !exists("do_no_lazyload_menus")
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100652 func s:SetupLazyloadMenus()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100653 call s:SetupColorSchemes()
654 call s:SetupCompilers()
655 if has("keymap")
656 call s:SetupKeymaps()
657 endif
658 endfunc
659 augroup SetupLazyloadMenus
660 au!
661 au CursorHold,CursorHoldI * call <SID>SetupLazyloadMenus() | au! SetupLazyloadMenus
662 augroup END
663endif
664
Bram Moolenaar071d4272004-06-13 20:20:40 +0000665
666if !exists("no_buffers_menu")
667
668" Buffer list menu -- Setup functions & actions
669
670" wait with building the menu until after loading 'session' files. Makes
671" startup faster.
672let s:bmenu_wait = 1
673
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100674" Dictionary of buffer number to name. This helps prevent problems where a
675" buffer as renamed and we didn't keep track of that.
676let s:bmenu_items = {}
677
Bram Moolenaar071d4272004-06-13 20:20:40 +0000678if !exists("bmenu_priority")
679 let bmenu_priority = 60
680endif
681
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100682" invoked from a BufCreate or BufFilePost autocommand
683func s:BMAdd()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000684 if s:bmenu_wait == 0
685 " when adding too many buffers, redraw in short format
686 if s:bmenu_count == &menuitems && s:bmenu_short == 0
687 call s:BMShow()
688 else
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100689 let name = expand("<afile>")
Bram Moolenaar5908fdf2020-03-29 20:08:45 +0200690 let num = expand("<abuf>") + 0 " add zero to convert to a number type
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100691 if s:BMCanAdd(name, num)
692 call <SID>BMFilename(name, num)
693 let s:bmenu_count += 1
694 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000695 endif
696 endif
697endfunc
698
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100699" invoked from a BufDelete or BufFilePre autocommand
700func s:BMRemove()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000701 if s:bmenu_wait == 0
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100702 let bufnum = expand("<abuf>")
703 if s:bmenu_items->has_key(bufnum)
704 let menu_name = s:bmenu_items[bufnum]
705 exe 'silent! aun &Buffers.' . menu_name
706 let s:bmenu_count = s:bmenu_count - 1
707 unlet s:bmenu_items[bufnum]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000708 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000709 endif
710endfunc
711
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100712" Return non-zero if buffer with number "name" / "num" is useful to add in the
713" buffer menu.
714func s:BMCanAdd(name, num)
715 " no directory or unlisted buffer
716 if isdirectory(a:name) || !buflisted(a:num)
717 return 0
718 endif
719
Bram Moolenaarfa3b7232021-12-24 13:18:38 +0000720 " no name with control characters
721 if a:name =~ '[\x01-\x1f]'
722 return 0
723 endif
724
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100725 " no special buffer, such as terminal or popup
726 let buftype = getbufvar(a:num, '&buftype')
727 if buftype != '' && buftype != 'nofile' && buftype != 'nowrite'
728 return 0
729 endif
730
731 " only existing buffers
732 return bufexists(a:num)
733endfunc
734
Bram Moolenaar071d4272004-06-13 20:20:40 +0000735" Create the buffer menu (delete an existing one first).
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100736func s:BMShow(...)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000737 let s:bmenu_wait = 1
738 let s:bmenu_short = 1
739 let s:bmenu_count = 0
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100740 let s:bmenu_items = {}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000741 "
742 " get new priority, if exists
743 if a:0 == 1
744 let g:bmenu_priority = a:1
745 endif
746
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100747 " Remove old menu, if it exists; keep one entry to avoid a torn off menu to
Bram Moolenaare24c5b32019-12-10 22:11:53 +0100748 " disappear. Use try/catch to avoid setting v:errmsg
749 try | unmenu &Buffers | catch | endtry
Bram Moolenaar071d4272004-06-13 20:20:40 +0000750 exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
Bram Moolenaare24c5b32019-12-10 22:11:53 +0100751 try | unmenu! &Buffers | catch | endtry
Bram Moolenaar071d4272004-06-13 20:20:40 +0000752
753 " create new menu; set 'cpo' to include the <CR>
754 let cpo_save = &cpo
755 set cpo&vim
756 exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
757 exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
758 exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
759 exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
760 exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
761 exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
762 let &cpo = cpo_save
763 unmenu &Buffers.Dummy
764
765 " figure out how many buffers there are
766 let buf = 1
767 while buf <= bufnr('$')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100768 if s:BMCanAdd(bufname(buf), buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000769 let s:bmenu_count = s:bmenu_count + 1
770 endif
771 let buf = buf + 1
772 endwhile
773 if s:bmenu_count <= &menuitems
774 let s:bmenu_short = 0
775 endif
776
777 " iterate through buffer list, adding each buffer to the menu:
778 let buf = 1
779 while buf <= bufnr('$')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100780 let name = bufname(buf)
781 if s:BMCanAdd(name, buf)
782 call <SID>BMFilename(name, buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000783 endif
784 let buf = buf + 1
785 endwhile
786 let s:bmenu_wait = 0
787 aug buffer_list
788 au!
789 au BufCreate,BufFilePost * call <SID>BMAdd()
790 au BufDelete,BufFilePre * call <SID>BMRemove()
791 aug END
792endfunc
793
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100794func s:BMHash(name)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000795 " Make name all upper case, so that chars are between 32 and 96
796 let nm = substitute(a:name, ".*", '\U\0', "")
797 if has("ebcdic")
798 " HACK: Replace all non alphabetics with 'Z'
799 " Just to make it work for now.
800 let nm = substitute(nm, "[^A-Z]", 'Z', "g")
801 let sp = char2nr('A') - 1
802 else
803 let sp = char2nr(' ')
804 endif
805 " convert first six chars into a number for sorting:
806 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)
807endfunc
808
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100809func s:BMHash2(name)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000810 let nm = substitute(a:name, ".", '\L\0', "")
811 " Not exactly right for EBCDIC...
812 if nm[0] < 'a' || nm[0] > 'z'
813 return '&others.'
814 elseif nm[0] <= 'd'
815 return '&abcd.'
816 elseif nm[0] <= 'h'
817 return '&efgh.'
818 elseif nm[0] <= 'l'
819 return '&ijkl.'
820 elseif nm[0] <= 'p'
821 return '&mnop.'
822 elseif nm[0] <= 't'
823 return '&qrst.'
824 else
825 return '&u-z.'
826 endif
827endfunc
828
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100829" Insert a buffer name into the buffer menu.
830func s:BMFilename(name, num)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000831 let munge = <SID>BMMunge(a:name, a:num)
832 let hash = <SID>BMHash(munge)
833 if s:bmenu_short == 0
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100834 let s:bmenu_items[a:num] = munge
835 let cmd = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
Bram Moolenaar071d4272004-06-13 20:20:40 +0000836 else
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100837 let menu_name = <SID>BMHash2(munge) . munge
838 let s:bmenu_items[a:num] = menu_name
839 let cmd = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . menu_name
Bram Moolenaar071d4272004-06-13 20:20:40 +0000840 endif
841 " set 'cpo' to include the <CR>
842 let cpo_save = &cpo
843 set cpo&vim
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100844 exe cmd . ' :confirm b' . a:num . '<CR>'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000845 let &cpo = cpo_save
846endfunc
847
848" Truncate a long path to fit it in a menu item.
849if !exists("g:bmenu_max_pathlen")
850 let g:bmenu_max_pathlen = 35
851endif
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100852func s:BMTruncName(fname)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000853 let name = a:fname
854 if g:bmenu_max_pathlen < 5
855 let name = ""
856 else
857 let len = strlen(name)
858 if len > g:bmenu_max_pathlen
859 let amountl = (g:bmenu_max_pathlen / 2) - 2
860 let amountr = g:bmenu_max_pathlen - amountl - 3
861 let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
862 let left = substitute(name, pattern, '\1', '')
863 let right = substitute(name, pattern, '\2', '')
864 if strlen(left) + strlen(right) < len
865 let name = left . '...' . right
866 endif
867 endif
868 endif
869 return name
870endfunc
871
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100872func s:BMMunge(fname, bnum)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000873 let name = a:fname
874 if name == ''
875 if !exists("g:menutrans_no_file")
Bram Moolenaar6dc819b2018-07-03 16:42:19 +0200876 let g:menutrans_no_file = "[No Name]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000877 endif
878 let name = g:menutrans_no_file
879 else
880 let name = fnamemodify(name, ':p:~')
881 endif
882 " detach file name and separate it out:
883 let name2 = fnamemodify(name, ':t')
884 if a:bnum >= 0
885 let name2 = name2 . ' (' . a:bnum . ')'
886 endif
887 let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
888 let name = escape(name, "\\. \t|")
889 let name = substitute(name, "&", "&&", "g")
890 let name = substitute(name, "\n", "^@", "g")
891 return name
892endfunc
893
894" When just starting Vim, load the buffer menu later
895if has("vim_starting")
896 augroup LoadBufferMenu
897 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
898 au VimEnter * au! LoadBufferMenu
899 augroup END
900else
901 call <SID>BMShow()
902endif
903
904endif " !exists("no_buffers_menu")
905
906" Window menu
907an 70.300 &Window.&New<Tab>^Wn <C-W>n
908an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
909an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
910an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
Bram Moolenaar314dd792019-02-03 15:27:20 +0100911an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
912if !exists("*MenuExplOpen")
913 fun MenuExplOpen()
914 if @% == ""
915 20vsp .
916 else
917 exe "20vsp " . s:FnameEscape(expand("%:p:h"))
918 endif
919 endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000920endif
921an 70.335 &Window.-SEP1- <Nop>
922an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
923an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
924an 70.350 &Window.-SEP2- <Nop>
925an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
926an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
Bram Moolenaar214641f2017-03-05 17:04:09 +0100927an 70.355 &Window.Move\ &To.&Left\ Side<Tab>^WH <C-W>H
928an 70.355 &Window.Move\ &To.&Right\ Side<Tab>^WL <C-W>L
Bram Moolenaar071d4272004-06-13 20:20:40 +0000929an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
930an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
931an 70.365 &Window.-SEP3- <Nop>
932an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
933an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
934an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
935an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
936an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
937
938" The popup menu
939an 1.10 PopUp.&Undo u
940an 1.15 PopUp.-SEP1- <Nop>
941vnoremenu 1.20 PopUp.Cu&t "+x
942vnoremenu 1.30 PopUp.&Copy "+y
943cnoremenu 1.30 PopUp.&Copy <C-Y>
944nnoremenu 1.40 PopUp.&Paste "+gP
945cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000946exe 'vnoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['v']
947exe 'inoremenu <script> 1.40 PopUp.&Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000948vnoremenu 1.50 PopUp.&Delete x
949an 1.55 PopUp.-SEP2- <Nop>
950vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000951
952nnoremenu 1.70 PopUp.Select\ &Word vaw
953onoremenu 1.70 PopUp.Select\ &Word aw
954vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
955inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
956cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
957
958nnoremenu 1.73 PopUp.Select\ &Sentence vas
959onoremenu 1.73 PopUp.Select\ &Sentence as
960vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
961inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
962cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
963
964nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
965onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
966vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
967inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
968cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
969
970nnoremenu 1.80 PopUp.Select\ &Line V
971onoremenu 1.80 PopUp.Select\ &Line <C-C>V
972vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
973inoremenu 1.80 PopUp.Select\ &Line <C-O>V
974cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
975
976nnoremenu 1.90 PopUp.Select\ &Block <C-V>
977onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
978vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
979inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
980cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
981
Bram Moolenaar071d4272004-06-13 20:20:40 +0000982noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
983inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
984cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
985
Bram Moolenaar45360022005-07-21 21:08:21 +0000986if has("spell")
987 " Spell suggestions in the popup menu. Note that this will slow down the
988 " appearance of the menu!
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100989 func s:SpellPopup()
Bram Moolenaar45360022005-07-21 21:08:21 +0000990 if exists("s:changeitem") && s:changeitem != ''
991 call <SID>SpellDel()
992 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000993
994 " Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000995 if !&spell || &spelllang == ''
996 return
997 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000998
999 let curcol = col('.')
Bram Moolenaar1c7715d2005-10-03 22:02:18 +00001000 let [w, a] = spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +00001001 if col('.') > curcol " don't use word after the cursor
1002 let w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +00001003 endif
1004 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001005 if a == 'caps'
1006 let s:suglist = [substitute(w, '.*', '\u&', '')]
1007 else
1008 let s:suglist = spellsuggest(w, 10)
1009 endif
Bram Moolenaar62292582010-07-10 16:36:59 +02001010 if len(s:suglist) > 0
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001011 if !exists("g:menutrans_spell_change_ARG_to")
1012 let g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to'
1013 endif
1014 let s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .'))
Bram Moolenaar45360022005-07-21 21:08:21 +00001015 let s:fromword = w
1016 let pri = 1
Bram Moolenaar62292582010-07-10 16:36:59 +02001017 " set 'cpo' to include the <CR>
1018 let cpo_save = &cpo
1019 set cpo&vim
Bram Moolenaar45360022005-07-21 21:08:21 +00001020 for sug in s:suglist
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001021 exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
Bram Moolenaar45360022005-07-21 21:08:21 +00001022 \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
1023 let pri += 1
1024 endfor
1025
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001026 if !exists("g:menutrans_spell_add_ARG_to_word_list")
1027 let g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List'
1028 endif
1029 let s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .'))
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001030 exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001031
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001032 if !exists("g:menutrans_spell_ignore_ARG")
1033 let g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"'
1034 endif
1035 let s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .'))
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001036 exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001037
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001038 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar62292582010-07-10 16:36:59 +02001039 let &cpo = cpo_save
Bram Moolenaar45360022005-07-21 21:08:21 +00001040 endif
1041 endif
Bram Moolenaar62292582010-07-10 16:36:59 +02001042 call cursor(0, curcol) " put the cursor back where it was
Bram Moolenaar45360022005-07-21 21:08:21 +00001043 endfunc
1044
Bram Moolenaar5e94a292020-03-19 18:46:57 +01001045 func s:SpellReplace(n)
Bram Moolenaar45360022005-07-21 21:08:21 +00001046 let l = getline('.')
Bram Moolenaar62292582010-07-10 16:36:59 +02001047 " Move the cursor to the start of the word.
1048 call spellbadword()
Bram Moolenaar45360022005-07-21 21:08:21 +00001049 call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
1050 \ . strpart(l, col('.') + len(s:fromword) - 1))
1051 endfunc
1052
Bram Moolenaar5e94a292020-03-19 18:46:57 +01001053 func s:SpellDel()
Bram Moolenaar45360022005-07-21 21:08:21 +00001054 exe "aunmenu PopUp." . s:changeitem
1055 exe "aunmenu PopUp." . s:additem
1056 exe "aunmenu PopUp." . s:ignoreitem
1057 aunmenu PopUp.-SpellSep-
1058 let s:changeitem = ''
1059 endfun
1060
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001061 augroup SpellPopupMenu
1062 au! MenuPopup * call <SID>SpellPopup()
1063 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +00001064endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00001065
1066" The GUI toolbar (for MS-Windows and GTK)
1067if has("toolbar")
1068 an 1.10 ToolBar.Open :browse confirm e<CR>
1069 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
1070 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
1071
1072 if has("printer")
1073 an 1.40 ToolBar.Print :hardcopy<CR>
1074 vunmenu ToolBar.Print
1075 vnoremenu ToolBar.Print :hardcopy<CR>
1076 elseif has("unix")
1077 an 1.40 ToolBar.Print :w !lpr<CR>
1078 vunmenu ToolBar.Print
1079 vnoremenu ToolBar.Print :w !lpr<CR>
1080 endif
1081
1082 an 1.45 ToolBar.-sep1- <Nop>
1083 an 1.50 ToolBar.Undo u
1084 an 1.60 ToolBar.Redo <C-R>
1085
1086 an 1.65 ToolBar.-sep2- <Nop>
1087 vnoremenu 1.70 ToolBar.Cut "+x
1088 vnoremenu 1.80 ToolBar.Copy "+y
1089 cnoremenu 1.80 ToolBar.Copy <C-Y>
1090 nnoremenu 1.90 ToolBar.Paste "+gP
1091 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001092 exe 'vnoremenu <script> ToolBar.Paste ' . paste#paste_cmd['v']
1093 exe 'inoremenu <script> ToolBar.Paste ' . paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +00001094
1095 if !has("gui_athena")
1096 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001097 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001098 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001099 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001100 an 1.110 ToolBar.FindNext n
1101 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +00001102 endif
1103
Bram Moolenaar071d4272004-06-13 20:20:40 +00001104 an 1.215 ToolBar.-sep5- <Nop>
1105 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
1106 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
1107 an 1.240 ToolBar.RunScript :browse so<CR>
1108
1109 an 1.245 ToolBar.-sep6- <Nop>
1110 an 1.250 ToolBar.Make :make<CR>
1111 an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
1112 an 1.280 ToolBar.TagJump g<C-]>
1113
1114 an 1.295 ToolBar.-sep7- <Nop>
1115 an 1.300 ToolBar.Help :help<CR>
1116 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1117
1118" Only set the tooltips here if not done in a language menu file
1119if exists("*Do_toolbar_tmenu")
1120 call Do_toolbar_tmenu()
1121else
1122 let did_toolbar_tmenu = 1
1123 tmenu ToolBar.Open Open file
1124 tmenu ToolBar.Save Save current file
1125 tmenu ToolBar.SaveAll Save all files
1126 tmenu ToolBar.Print Print
1127 tmenu ToolBar.Undo Undo
1128 tmenu ToolBar.Redo Redo
1129 tmenu ToolBar.Cut Cut to clipboard
1130 tmenu ToolBar.Copy Copy to clipboard
1131 tmenu ToolBar.Paste Paste from Clipboard
1132 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001133 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001134 tmenu ToolBar.FindNext Find Next
1135 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001136 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001137 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001138 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001139 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001140 tmenu ToolBar.Make Make current project (:make)
1141 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001142 tmenu ToolBar.TagJump Jump to tag under cursor
1143 tmenu ToolBar.Help Vim Help
1144 tmenu ToolBar.FindHelp Search Vim Help
1145endif
1146
1147" Select a session to load; default to current session name if present
1148fun! s:LoadVimSesn()
1149 if strlen(v:this_session) > 0
Bram Moolenaaraba88572008-06-25 20:13:35 +00001150 let name = s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001151 else
1152 let name = "Session.vim"
1153 endif
1154 execute "browse so " . name
1155endfun
1156
1157" Select a session to save; default to current session name if present
1158fun! s:SaveVimSesn()
1159 if strlen(v:this_session) == 0
1160 let v:this_session = "Session.vim"
1161 endif
Bram Moolenaaraba88572008-06-25 20:13:35 +00001162 execute "browse mksession! " . s:FnameEscape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001163endfun
1164
1165endif
1166
1167endif " !exists("did_install_default_menus")
1168
1169" Define these items always, so that syntax can be switched on when it wasn't.
1170" But skip them when the Syntax menu was disabled by the user.
1171if !exists("did_install_syntax_menu")
1172 an 50.212 &Syntax.&Manual :syn manual<CR>
1173 an 50.214 &Syntax.A&utomatic :syn on<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001174 an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001175 if !exists("*s:SynOnOff")
1176 fun s:SynOnOff()
1177 if has("syntax_items")
1178 syn clear
1179 else
1180 if !exists("g:syntax_on")
1181 syn manual
1182 endif
1183 set syn=ON
1184 endif
1185 endfun
1186 endif
1187endif
1188
1189
1190" Install the Syntax menu only when filetype.vim has been loaded or when
1191" manual syntax highlighting is enabled.
1192" Avoid installing the Syntax menu twice.
1193if (exists("did_load_filetypes") || exists("syntax_on"))
1194 \ && !exists("did_install_syntax_menu")
1195 let did_install_syntax_menu = 1
1196
1197" Skip setting up the individual syntax selection menus unless
1198" do_syntax_sel_menu is defined (it takes quite a bit of time).
1199if exists("do_syntax_sel_menu")
1200 runtime! synmenu.vim
1201else
Bram Moolenaar040c1fe2017-11-09 19:45:48 +01001202 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 +00001203 an 50.195 &Syntax.-SEP1- <Nop>
1204endif
1205
1206an 50.210 &Syntax.&Off :syn off<CR>
1207an 50.700 &Syntax.-SEP3- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001208an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1209an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001210an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1211
1212endif " !exists("did_install_syntax_menu")
1213
Bram Moolenaar071d4272004-06-13 20:20:40 +00001214" Restore the previous value of 'cpoptions'.
1215let &cpo = s:cpo_save
1216unlet s:cpo_save
1217
1218" vim: set sw=2 :