blob: f8f7e7ad737ab05173aeeded67e8d8a49888921e [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 Moolenaarb7398fe2023-05-14 18:50:25 +01005" Last Change: 2023 May 03
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$'
Bram Moolenaar3e79c972022-02-04 19:48:06 +000036 let s:lang = s:lang .. '.' .. &enc
Bram Moolenaar071d4272004-06-13 20:20:40 +000037 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
Bram Moolenaar3e79c972022-02-04 19:48:06 +000052 exe "runtime! lang/menu_" .. s:lang .. ".vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000053
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 Moolenaar3e79c972022-02-04 19:48:06 +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, '_.*', "", "")
Bram Moolenaar3e79c972022-02-04 19:48:06 +000064 exe "runtime! lang/menu_" .. langonly .. "[^a-z]*vim"
Bram Moolenaar68f1b1b2018-07-23 05:10:14 +020065 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".
Bram Moolenaar3e79c972022-02-04 19:48:06 +000071 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 Moolenaar3e79c972022-02-04 19:48:06 +0000107def s:Helpfind()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000108 if !exists("g:menutrans_help_dialog")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000109 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')"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000110 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000111 var h = inputdialog(g:menutrans_help_dialog)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000112 if h != ""
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000113 v:errmsg = ""
114 silent! exe "help " .. h
Bram Moolenaar071d4272004-06-13 20:20:40 +0000115 if v:errmsg != ""
116 echo v:errmsg
117 endif
118 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000119enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000120
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>
Yee Cheng Chin15b314f2022-10-09 18:53:32 +0100132tln <silent> 10.330 &File.&Close<Tab>:close
133 \ <C-W>:if winheight(2) < 0 && tabpagewinnr(2) == 0 <Bar>
134 \ confirm enew <Bar>
135 \ else <Bar>
136 \ confirm close <Bar>
137 \ endif<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000138an 10.335 &File.-SEP1- <Nop>
139an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
140an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR>
141
142if has("diff")
143 an 10.400 &File.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100144 an 10.410 &File.Split\ &Diff\ With\.\.\. :browse vert diffsplit<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145 an 10.420 &File.Split\ Patched\ &By\.\.\. :browse vert diffpatch<CR>
146endif
147
148if has("printer")
149 an 10.500 &File.-SEP3- <Nop>
150 an 10.510 &File.&Print :hardcopy<CR>
151 vunmenu &File.&Print
152 vnoremenu &File.&Print :hardcopy<CR>
153elseif has("unix")
154 an 10.500 &File.-SEP3- <Nop>
155 an 10.510 &File.&Print :w !lpr<CR>
156 vunmenu &File.&Print
157 vnoremenu &File.&Print :w !lpr<CR>
158endif
159an 10.600 &File.-SEP4- <Nop>
160an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR>
161an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR>
162
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000163def s:SelectAll()
164 exe "norm! gg" .. (&slm == "" ? "VG" : "gH\<C-O>G")
165enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000166
167" Edit menu
168an 20.310 &Edit.&Undo<Tab>u u
169an 20.320 &Edit.&Redo<Tab>^R <C-R>
170an 20.330 &Edit.Rep&eat<Tab>\. .
171
172an 20.335 &Edit.-SEP1- <Nop>
173vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
174vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
175cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100176if exists(':tlmenu')
177 tlnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-W>:<C-Y><CR>
178endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000179nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
180cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
Bram Moolenaar4c5d8152018-10-19 22:36:53 +0200181if exists(':tlmenu')
182 tlnoremenu &Edit.&Paste<Tab>"+gP <C-W>"+
183endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000184exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' .. paste#paste_cmd['v']
185exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' .. paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000186nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
187inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
188nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
189inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100190if has("win32")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000191 vnoremenu 20.390 &Edit.&Delete<Tab>x x
192endif
193noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
194inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
195cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
196
197an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100198if has("win32") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
200 vunmenu &Edit.&Find\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000201 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000202 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
203 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000204 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205else
206 an 20.410 &Edit.&Find<Tab>/ /
207 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
208 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
209 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
210endif
211
212an 20.425 &Edit.-SEP3- <Nop>
213an 20.430 &Edit.Settings\ &Window :options<CR>
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000214an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
215
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000216def s:EditVimrc()
217 var fname: string
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000218 if $MYVIMRC != ''
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000219 fname = $MYVIMRC
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200220 elseif has("win32")
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000221 if $HOME != ''
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000222 fname = $HOME .. "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000223 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000224 fname = $VIM .. "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000225 endif
226 elseif has("amiga")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000227 fname = "s:.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000228 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000229 fname = $HOME .. "/.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000230 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000231 fname = fnameescape(fname)
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000232 if &mod
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000233 exe "split " .. fname
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000234 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000235 exe "edit " .. fname
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000236 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000237enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000238
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000239def s:FixFText(): string
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 Moolenaar3e79c972022-02-04 19:48:06 +0000242enddef
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000243
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
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000275def s:SearchP()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000276 if !exists("g:menutrans_path_dialog")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000277 g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
Bram Moolenaar071d4272004-06-13 20:20:40 +0000278 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000279 var n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280 if n != ""
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000281 &path = substitute(n, ' ', '\\ ', 'g')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000282 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000283enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000284
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000285def s:TagFiles()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000286 if !exists("g:menutrans_tags_dialog")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000287 g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
Bram Moolenaar071d4272004-06-13 20:20:40 +0000288 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000289 var n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000290 if n != ""
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000291 &tags = substitute(n, ' ', '\\ ', 'g')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000292 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000293enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000294
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000295def s:ToggleGuiOption(option: string)
296 # If a:option is already set in guioptions, then we want to remove it
297 if match(&guioptions, "\\C" .. option) > -1
298 exec "set go-=" .. option
299 else
300 exec "set go+=" .. option
301 endif
302enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000303
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>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000334
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000335def s:TextWidth()
336 if !exists("g:menutrans_textwidth_dialog")
337 g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
338 endif
339 var n = inputdialog(g:menutrans_textwidth_dialog, &tw .. '')
340 if n != ""
341 # Remove leading zeros to avoid it being used as an octal number.
342 # But keep a zero by itself.
343 var tw = substitute(n, "^0*", "", "")
Bram Moolenaar8b336a62022-11-27 15:51:46 +0000344 &tw = tw == '' ? 0 : str2nr(tw)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000345 endif
346enddef
347
348def s:FileFormat()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000349 if !exists("g:menutrans_fileformat_dialog")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000350 g:menutrans_fileformat_dialog = "Select format for writing the file"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000351 endif
352 if !exists("g:menutrans_fileformat_choices")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000353 g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000354 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000355 var def_choice: number
Bram Moolenaar071d4272004-06-13 20:20:40 +0000356 if &ff == "dos"
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000357 def_choice = 2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000358 elseif &ff == "mac"
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000359 def_choice = 3
Bram Moolenaar071d4272004-06-13 20:20:40 +0000360 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000361 def_choice = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000362 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000363 var n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def_choice, "Question")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000364 if n == 1
365 set ff=unix
366 elseif n == 2
367 set ff=dos
368 elseif n == 3
369 set ff=mac
370 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000371enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000372
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100373let s:did_setup_color_schemes = 0
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200374
Bram Moolenaar071d4272004-06-13 20:20:40 +0000375" Setup the Edit.Color Scheme submenu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000376def s:SetupColorSchemes()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100377 if s:did_setup_color_schemes
378 return
379 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000380 s:did_setup_color_schemes = 1
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200381
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000382 var n = globpath(&runtimepath, "colors/*.vim", 1, 1)
383 n += globpath(&packpath, "pack/*/start/*/colors/*.vim", 1, 1)
384 n += globpath(&packpath, "pack/*/opt/*/colors/*.vim", 1, 1)
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200385
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000386 # Ignore case for VMS and windows, sort on name
Bram Moolenaar2007dd42022-02-23 13:17:47 +0000387 var names = sort(map(n, 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 'i')
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200388
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000389 # define all the submenu entries
390 var idx = 100
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100391 for name in names
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000392 exe "an 20.450." .. idx .. ' &Edit.C&olor\ Scheme.' .. name .. " :colors " .. name .. "<CR>"
393 idx += 10
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100394 endfor
395 silent! aunmenu &Edit.Show\ C&olor\ Schemes\ in\ Menu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000396enddef
397
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100398if exists("do_no_lazyload_menus")
399 call s:SetupColorSchemes()
400else
401 an <silent> 20.450 &Edit.Show\ C&olor\ Schemes\ in\ Menu :call <SID>SetupColorSchemes()<CR>
402endif
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200403
Bram Moolenaar071d4272004-06-13 20:20:40 +0000404
405" Setup the Edit.Keymap submenu
406if has("keymap")
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100407 let s:did_setup_keymaps = 0
408
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000409 def s:SetupKeymaps()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100410 if s:did_setup_keymaps
411 return
412 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000413 s:did_setup_keymaps = 1
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100414
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000415 var names = globpath(&runtimepath, "keymap/*.vim", 1, 1)
416 if !empty(names)
417 var idx = 100
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100418 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000419 for name in names
420 # Ignore case for VMS and windows
421 var mapname = substitute(name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
422 exe "an 20.460." .. idx .. ' &Edit.&Keymap.' .. mapname .. " :set keymap=" .. mapname .. "<CR>"
423 idx += 10
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100424 endfor
425 endif
426 silent! aunmenu &Edit.Show\ &Keymaps\ in\ Menu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000427 enddef
428
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100429 if exists("do_no_lazyload_menus")
430 call s:SetupKeymaps()
431 else
432 an <silent> 20.460 &Edit.Show\ &Keymaps\ in\ Menu :call <SID>SetupKeymaps()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000433 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000434endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000435
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100436if has("win32") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000437 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
438endif
439
440" Programming menu
441if !exists("g:ctags_command")
442 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000443 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000444 else
445 let g:ctags_command = "ctags -R ."
446 endif
447endif
448
Bram Moolenaar214641f2017-03-05 17:04:09 +0100449an 40.300 &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
450vunmenu &Tools.&Jump\ to\ This\ Tag<Tab>g^]
451vnoremenu &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
452an 40.310 &Tools.Jump\ &Back<Tab>^T <C-T>
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000453an 40.320 &Tools.Build\ &Tags\ File :exe "!" .. g:ctags_command<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000454
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000455if has("folding") || has("spell")
456 an 40.330 &Tools.-SEP1- <Nop>
457endif
458
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000459" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000460if has("spell")
461 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
462 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100463 an 40.335.130 &Tools.&Spelling.To\ &Next\ Error<Tab>]s ]s
464 an 40.335.130 &Tools.&Spelling.To\ &Previous\ Error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000465 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar214641f2017-03-05 17:04:09 +0100466 an 40.335.150 &Tools.&Spelling.&Repeat\ Correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000467 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100468 an 40.335.210 &Tools.&Spelling.Set\ Language\ to\ "en" :set spl=en spell<CR>
469 an 40.335.220 &Tools.&Spelling.Set\ Language\ to\ "en_au" :set spl=en_au spell<CR>
470 an 40.335.230 &Tools.&Spelling.Set\ Language\ to\ "en_ca" :set spl=en_ca spell<CR>
471 an 40.335.240 &Tools.&Spelling.Set\ Language\ to\ "en_gb" :set spl=en_gb spell<CR>
472 an 40.335.250 &Tools.&Spelling.Set\ Language\ to\ "en_nz" :set spl=en_nz spell<CR>
473 an 40.335.260 &Tools.&Spelling.Set\ Language\ to\ "en_us" :set spl=en_us spell<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000474 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
475
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200476 let s:undo_spelllang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar502e9172022-11-27 16:18:33 +0000477 def s:SpellLang(encChanged = false)
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200478 for cmd in s:undo_spelllang
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000479 exe "silent! " .. cmd
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000480 endfor
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000481 s:undo_spelllang = []
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000482
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000483 var enc = &enc == "iso-8859-15" ? "latin1" : &enc
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000484
Bram Moolenaar502e9172022-11-27 16:18:33 +0000485 # Reset g:menutrans_set_lang_to when called for the EncodingChanged event.
486 if !exists("g:menutrans_set_lang_to") || encChanged
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000487 g:menutrans_set_lang_to = 'Set Language to'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200488 endif
489
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000490 var found = 0
491 var _nm = ''
492 var names = globpath(&runtimepath, "spell/*." .. enc .. ".spl", 1, 1)
493 if !empty(names)
494 var n = 300
495 for f in names
496 var nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000497 if nm != "en" && nm !~ '/'
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000498 _nm = nm
499 found += 1
500 var menuname = '&Tools.&Spelling.' .. escape(g:menutrans_set_lang_to, "\\. \t|") .. '\ "' .. nm .. '"'
501 exe 'an 40.335.' .. n .. ' ' .. menuname .. ' :set spl=' .. nm .. ' spell<CR>'
502 s:undo_spelllang += ['aun ' .. menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000503 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000504 n += 10
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000505 endfor
506 endif
507 if found == 0
508 echomsg "Could not find other spell files"
509 elseif found == 1
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000510 echomsg "Found spell file " .. _nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000511 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000512 echomsg "Found " .. found .. " more spell files"
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000513 endif
Bram Moolenaar502e9172022-11-27 16:18:33 +0000514
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000515 # Need to redo this when 'encoding' is changed.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000516 augroup spellmenu
Bram Moolenaar502e9172022-11-27 16:18:33 +0000517 au! EncodingChanged * call SpellLang(true)
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000518 augroup END
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000519 enddef
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000520endif
521
Bram Moolenaar071d4272004-06-13 20:20:40 +0000522" Tools.Fold Menu
523if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000524 " open close folds
Bram Moolenaar214641f2017-03-05 17:04:09 +0100525 an 40.340.110 &Tools.&Folding.&Enable/Disable\ Folds<Tab>zi zi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000526 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
Bram Moolenaar214641f2017-03-05 17:04:09 +0100527 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx zMzx
528 inoremenu 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx <C-O>zM<C-O>zx
529 an 40.340.130 &Tools.&Folding.C&lose\ More\ Folds<Tab>zm zm
530 an 40.340.140 &Tools.&Folding.&Close\ All\ Folds<Tab>zM zM
531 an 40.340.150 &Tools.&Folding.O&pen\ More\ Folds<Tab>zr zr
Bram Moolenaar3df01732017-02-17 22:47:16 +0100532 an 40.340.160 &Tools.&Folding.&Open\ All\ Folds<Tab>zR zR
Bram Moolenaar071d4272004-06-13 20:20:40 +0000533 " fold method
534 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
535 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
536 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
537 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
538 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
539 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
540 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
541 " create and delete folds
542 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
543 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
544 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
545 " moving around in folds
546 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100547 an 40.340.310.10 &Tools.&Folding.Fold\ Col&umn\ Width.\ &0\ :set fdc=0<CR>
548 an 40.340.310.20 &Tools.&Folding.Fold\ Col&umn\ Width.\ &2\ :set fdc=2<CR>
549 an 40.340.310.30 &Tools.&Folding.Fold\ Col&umn\ Width.\ &3\ :set fdc=3<CR>
550 an 40.340.310.40 &Tools.&Folding.Fold\ Col&umn\ Width.\ &4\ :set fdc=4<CR>
551 an 40.340.310.50 &Tools.&Folding.Fold\ Col&umn\ Width.\ &5\ :set fdc=5<CR>
552 an 40.340.310.60 &Tools.&Folding.Fold\ Col&umn\ Width.\ &6\ :set fdc=6<CR>
553 an 40.340.310.70 &Tools.&Folding.Fold\ Col&umn\ Width.\ &7\ :set fdc=7<CR>
554 an 40.340.310.80 &Tools.&Folding.Fold\ Col&umn\ Width.\ &8\ :set fdc=8<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000555endif " has folding
556
557if has("diff")
558 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
559 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
560 vunmenu &Tools.&Diff.&Get\ Block
561 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
562 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
563 vunmenu &Tools.&Diff.&Put\ Block
564 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
565endif
566
567an 40.358 &Tools.-SEP2- <Nop>
568an 40.360 &Tools.&Make<Tab>:make :make<CR>
569an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
570an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
571an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
572an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
573an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
574an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
575an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
576an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
577an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
578
579an 40.520 &Tools.-SEP3- <Nop>
580an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
581 \ :call <SID>XxdConv()<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100582an <silent> 40.540 &Tools.Conve&rt\ Back<Tab>:%!xxd\ -r
Bram Moolenaar071d4272004-06-13 20:20:40 +0000583 \ :call <SID>XxdBack()<CR>
584
585" Use a function to do the conversion, so that it also works with 'insertmode'
586" set.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000587def s:XxdConv()
588 var mod = &mod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000589 if has("vms")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000590 :%!mc vim:xxd
Bram Moolenaar071d4272004-06-13 20:20:40 +0000591 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000592 s:XxdFind()
Bram Moolenaar1588bc82022-03-08 21:35:07 +0000593 exe ':%!' .. g:xxdprogram
Bram Moolenaar071d4272004-06-13 20:20:40 +0000594 endif
Bram Moolenaar1588bc82022-03-08 21:35:07 +0000595 if getline(1) =~ "^00000000:" # only if it worked
Bram Moolenaar071d4272004-06-13 20:20:40 +0000596 set ft=xxd
597 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000598 &mod = mod
599enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000600
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000601def s:XxdBack()
602 var mod = &mod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000603 if has("vms")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000604 :%!mc vim:xxd -r
Bram Moolenaar071d4272004-06-13 20:20:40 +0000605 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000606 s:XxdFind()
Bram Moolenaar1588bc82022-03-08 21:35:07 +0000607 exe ':%!' .. g:xxdprogram .. ' -r'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000608 endif
609 set ft=
Bram Moolenaarb7398fe2023-05-14 18:50:25 +0100610 if exists('#filetypedetect') && exists('#BufReadPost')
611 doautocmd filetypedetect BufReadPost
612 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000613 &mod = mod
614enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000615
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000616def s:XxdFind()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000617 if !exists("g:xxdprogram")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000618 # On the PC xxd may not be in the path but in the install directory
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200619 if has("win32") && !executable("xxd")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000620 g:xxdprogram = $VIMRUNTIME .. (&shellslash ? '/' : '\') .. "xxd.exe"
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100621 if g:xxdprogram =~ ' '
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000622 g:xxdprogram = '"' .. g:xxdprogram .. '"'
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100623 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000624 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000625 g:xxdprogram = "xxd"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000626 endif
627 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000628enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000629
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100630let s:did_setup_compilers = 0
631
Bram Moolenaar071d4272004-06-13 20:20:40 +0000632" Setup the Tools.Compiler submenu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000633def s:SetupCompilers()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100634 if s:did_setup_compilers
635 return
Bram Moolenaar071d4272004-06-13 20:20:40 +0000636 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000637 s:did_setup_compilers = 1
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100638
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000639 var names = globpath(&runtimepath, "compiler/*.vim", 1, 1)
640 var idx = 100
641 for name in names
642 # Ignore case for VMS and windows
643 var cname = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
644 exe "an 30.440." .. idx .. ' &Tools.Se&t\ Compiler.' .. cname .. " :compiler " .. cname .. "<CR>"
645 idx += 10
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100646 endfor
647 silent! aunmenu &Tools.Show\ Compiler\ Se&ttings\ in\ Menu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000648enddef
649
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100650if exists("do_no_lazyload_menus")
651 call s:SetupCompilers()
652else
653 an <silent> 30.440 &Tools.Show\ Compiler\ Se&ttings\ in\ Menu :call <SID>SetupCompilers()<CR>
654endif
655
656" Load ColorScheme, Compiler Setting and Keymap menus when idle.
657if !exists("do_no_lazyload_menus")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000658 def s:SetupLazyloadMenus()
659 s:SetupColorSchemes()
660 s:SetupCompilers()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100661 if has("keymap")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000662 s:SetupKeymaps()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100663 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000664 enddef
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100665 augroup SetupLazyloadMenus
666 au!
667 au CursorHold,CursorHoldI * call <SID>SetupLazyloadMenus() | au! SetupLazyloadMenus
668 augroup END
669endif
670
Bram Moolenaar071d4272004-06-13 20:20:40 +0000671
672if !exists("no_buffers_menu")
673
674" Buffer list menu -- Setup functions & actions
675
676" wait with building the menu until after loading 'session' files. Makes
677" startup faster.
678let s:bmenu_wait = 1
679
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100680" Dictionary of buffer number to name. This helps prevent problems where a
681" buffer as renamed and we didn't keep track of that.
682let s:bmenu_items = {}
683
Bram Moolenaar071d4272004-06-13 20:20:40 +0000684if !exists("bmenu_priority")
685 let bmenu_priority = 60
686endif
687
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100688" invoked from a BufCreate or BufFilePost autocommand
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000689def s:BMAdd()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000690 if s:bmenu_wait == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000691 # when adding too many buffers, redraw in short format
Bram Moolenaar071d4272004-06-13 20:20:40 +0000692 if s:bmenu_count == &menuitems && s:bmenu_short == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000693 s:BMShow()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000694 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000695 var name = expand("<afile>")
696 var num = str2nr(expand("<abuf>"))
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100697 if s:BMCanAdd(name, num)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000698 s:BMFilename(name, num)
699 s:bmenu_count += 1
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100700 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000701 endif
702 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000703enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000704
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100705" invoked from a BufDelete or BufFilePre autocommand
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000706def s:BMRemove()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000707 if s:bmenu_wait == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000708 var bufnum = expand("<abuf>")
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100709 if s:bmenu_items->has_key(bufnum)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000710 var menu_name = s:bmenu_items[bufnum]
711 exe 'silent! aun &Buffers.' .. menu_name
712 s:bmenu_count = s:bmenu_count - 1
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100713 unlet s:bmenu_items[bufnum]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000714 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000715 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000716enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000717
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100718" Return non-zero if buffer with number "name" / "num" is useful to add in the
719" buffer menu.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000720def s:BMCanAdd(name: string, num: number): bool
721 # no directory or unlisted buffer
722 if isdirectory(name) || !buflisted(num)
723 return false
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100724 endif
725
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000726 # no name with control characters
727 if name =~ '[\x01-\x1f]'
728 return false
Bram Moolenaarfa3b7232021-12-24 13:18:38 +0000729 endif
730
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000731 # no special buffer, such as terminal or popup
732 var buftype = getbufvar(num, '&buftype')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100733 if buftype != '' && buftype != 'nofile' && buftype != 'nowrite'
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000734 return false
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100735 endif
736
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000737 # only existing buffers
738 return bufexists(num)
739enddef
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100740
Bram Moolenaar071d4272004-06-13 20:20:40 +0000741" Create the buffer menu (delete an existing one first).
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000742def s:BMShow()
743 s:bmenu_wait = 1
744 s:bmenu_short = 1
745 s:bmenu_count = 0
746 s:bmenu_items = {}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000747
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000748 # Remove old menu, if it exists; keep one entry to avoid a torn off menu to
749 # disappear. Use try/catch to avoid setting v:errmsg
750 try
751 unmenu &Buffers
752 catch
753 endtry
754 exe 'noremenu ' .. g:bmenu_priority .. ".1 &Buffers.Dummy l"
755 try
756 unmenu! &Buffers
757 catch
758 endtry
Bram Moolenaar071d4272004-06-13 20:20:40 +0000759
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000760 # create new menu
761 exe 'an <silent> ' .. g:bmenu_priority .. ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
762 exe 'an ' .. g:bmenu_priority .. ".4 &Buffers.&Delete :confirm bd<CR>"
763 exe 'an ' .. g:bmenu_priority .. ".6 &Buffers.&Alternate :confirm b #<CR>"
764 exe 'an ' .. g:bmenu_priority .. ".7 &Buffers.&Next :confirm bnext<CR>"
765 exe 'an ' .. g:bmenu_priority .. ".8 &Buffers.&Previous :confirm bprev<CR>"
766 exe 'an ' .. g:bmenu_priority .. ".9 &Buffers.-SEP- :"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000767 unmenu &Buffers.Dummy
768
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000769 # figure out how many buffers there are
770 var buf = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000771 while buf <= bufnr('$')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100772 if s:BMCanAdd(bufname(buf), buf)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000773 s:bmenu_count = s:bmenu_count + 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000774 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000775 buf += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000776 endwhile
777 if s:bmenu_count <= &menuitems
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000778 s:bmenu_short = 0
Bram Moolenaar071d4272004-06-13 20:20:40 +0000779 endif
780
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000781 # iterate through buffer list, adding each buffer to the menu:
782 buf = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000783 while buf <= bufnr('$')
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000784 var name = bufname(buf)
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100785 if s:BMCanAdd(name, buf)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000786 call s:BMFilename(name, buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000787 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000788 buf += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000789 endwhile
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000790 s:bmenu_wait = 0
Bram Moolenaar071d4272004-06-13 20:20:40 +0000791 aug buffer_list
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000792 au!
793 au BufCreate,BufFilePost * call s:BMAdd()
794 au BufDelete,BufFilePre * call s:BMRemove()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000795 aug END
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000796enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000797
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000798def s:BMHash(name: string): number
799 # Make name all upper case, so that chars are between 32 and 96
800 var nm = substitute(name, ".*", '\U\0', "")
801 var sp: number
Bram Moolenaar071d4272004-06-13 20:20:40 +0000802 if has("ebcdic")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000803 # HACK: Replace all non alphabetics with 'Z'
804 # Just to make it work for now.
805 nm = substitute(nm, "[^A-Z]", 'Z', "g")
806 sp = char2nr('A') - 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000807 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000808 sp = char2nr(' ')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000809 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000810 # convert first six chars into a number for sorting:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000811 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)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000812enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000813
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000814def s:BMHash2(name: string): string
815 var nm = substitute(name, ".", '\L\0', "")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000816 if nm[0] < 'a' || nm[0] > 'z'
817 return '&others.'
818 elseif nm[0] <= 'd'
819 return '&abcd.'
820 elseif nm[0] <= 'h'
821 return '&efgh.'
822 elseif nm[0] <= 'l'
823 return '&ijkl.'
824 elseif nm[0] <= 'p'
825 return '&mnop.'
826 elseif nm[0] <= 't'
827 return '&qrst.'
828 else
829 return '&u-z.'
830 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000831enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000832
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100833" Insert a buffer name into the buffer menu.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000834def s:BMFilename(name: string, num: number)
835 var munge = s:BMMunge(name, num)
836 var hash = s:BMHash(munge)
837 var cmd: string
Bram Moolenaar071d4272004-06-13 20:20:40 +0000838 if s:bmenu_short == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000839 s:bmenu_items[num] = munge
840 cmd = 'an ' .. g:bmenu_priority .. '.' .. hash .. ' &Buffers.' .. munge
Bram Moolenaar071d4272004-06-13 20:20:40 +0000841 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000842 var menu_name = s:BMHash2(munge) .. munge
843 s:bmenu_items[num] = menu_name
844 cmd = 'an ' .. g:bmenu_priority .. '.' .. hash .. '.' .. hash .. ' &Buffers.' .. menu_name
Bram Moolenaar071d4272004-06-13 20:20:40 +0000845 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000846 exe cmd .. ' :confirm b' .. num .. '<CR>'
847enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000848
849" Truncate a long path to fit it in a menu item.
850if !exists("g:bmenu_max_pathlen")
851 let g:bmenu_max_pathlen = 35
852endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000853
854def s:BMTruncName(fname: string): string
855 var name = fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000856 if g:bmenu_max_pathlen < 5
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000857 name = ""
Bram Moolenaar071d4272004-06-13 20:20:40 +0000858 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000859 var len = strlen(name)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000860 if len > g:bmenu_max_pathlen
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000861 var amountl = (g:bmenu_max_pathlen / 2) - 2
862 var amountr = g:bmenu_max_pathlen - amountl - 3
863 var pattern = '^\(.\{,' .. amountl .. '}\).\{-}\(.\{,' .. amountr .. '}\)$'
864 var left = substitute(name, pattern, '\1', '')
865 var right = substitute(name, pattern, '\2', '')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000866 if strlen(left) + strlen(right) < len
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000867 name = left .. '...' .. right
Bram Moolenaar071d4272004-06-13 20:20:40 +0000868 endif
869 endif
870 endif
871 return name
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000872enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000873
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000874def s:BMMunge(fname: string, bnum: number): string
875 var name = fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000876 if name == ''
877 if !exists("g:menutrans_no_file")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000878 g:menutrans_no_file = "[No Name]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000879 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000880 name = g:menutrans_no_file
Bram Moolenaar071d4272004-06-13 20:20:40 +0000881 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000882 name = fnamemodify(name, ':p:~')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000883 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000884 # detach file name and separate it out:
885 var name2 = fnamemodify(name, ':t')
886 if bnum >= 0
887 name2 = name2 .. ' (' .. bnum .. ')'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000888 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000889 name = name2 .. "\t" .. s:BMTruncName(fnamemodify(name, ':h'))
890 name = escape(name, "\\. \t|")
891 name = substitute(name, "&", "&&", "g")
892 name = substitute(name, "\n", "^@", "g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000893 return name
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000894enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000895
896" When just starting Vim, load the buffer menu later
897if has("vim_starting")
898 augroup LoadBufferMenu
899 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
900 au VimEnter * au! LoadBufferMenu
901 augroup END
902else
903 call <SID>BMShow()
904endif
905
906endif " !exists("no_buffers_menu")
907
908" Window menu
909an 70.300 &Window.&New<Tab>^Wn <C-W>n
910an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
911an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
912an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
Bram Moolenaar314dd792019-02-03 15:27:20 +0100913an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
914if !exists("*MenuExplOpen")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000915 def MenuExplOpen()
Bram Moolenaar314dd792019-02-03 15:27:20 +0100916 if @% == ""
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000917 :20vsp .
Bram Moolenaar314dd792019-02-03 15:27:20 +0100918 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000919 exe ":20vsp " .. fnameescape(expand("%:p:h"))
Bram Moolenaar314dd792019-02-03 15:27:20 +0100920 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000921 enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000922endif
923an 70.335 &Window.-SEP1- <Nop>
924an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
925an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
926an 70.350 &Window.-SEP2- <Nop>
927an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
928an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
Bram Moolenaar214641f2017-03-05 17:04:09 +0100929an 70.355 &Window.Move\ &To.&Left\ Side<Tab>^WH <C-W>H
930an 70.355 &Window.Move\ &To.&Right\ Side<Tab>^WL <C-W>L
Bram Moolenaar071d4272004-06-13 20:20:40 +0000931an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
932an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
933an 70.365 &Window.-SEP3- <Nop>
934an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
935an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
936an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
937an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
938an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
939
940" The popup menu
941an 1.10 PopUp.&Undo u
942an 1.15 PopUp.-SEP1- <Nop>
943vnoremenu 1.20 PopUp.Cu&t "+x
944vnoremenu 1.30 PopUp.&Copy "+y
945cnoremenu 1.30 PopUp.&Copy <C-Y>
946nnoremenu 1.40 PopUp.&Paste "+gP
947cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000948exe 'vnoremenu <script> 1.40 PopUp.&Paste ' .. paste#paste_cmd['v']
949exe 'inoremenu <script> 1.40 PopUp.&Paste ' .. paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000950vnoremenu 1.50 PopUp.&Delete x
951an 1.55 PopUp.-SEP2- <Nop>
952vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000953
954nnoremenu 1.70 PopUp.Select\ &Word vaw
955onoremenu 1.70 PopUp.Select\ &Word aw
956vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
957inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
958cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
959
960nnoremenu 1.73 PopUp.Select\ &Sentence vas
961onoremenu 1.73 PopUp.Select\ &Sentence as
962vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
963inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
964cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
965
966nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
967onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
968vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
969inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
970cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
971
972nnoremenu 1.80 PopUp.Select\ &Line V
973onoremenu 1.80 PopUp.Select\ &Line <C-C>V
974vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
975inoremenu 1.80 PopUp.Select\ &Line <C-O>V
976cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
977
978nnoremenu 1.90 PopUp.Select\ &Block <C-V>
979onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
980vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
981inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
982cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
983
Bram Moolenaar071d4272004-06-13 20:20:40 +0000984noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
985inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
986cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
987
Bram Moolenaar45360022005-07-21 21:08:21 +0000988if has("spell")
989 " Spell suggestions in the popup menu. Note that this will slow down the
990 " appearance of the menu!
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000991 def s:SpellPopup()
Bram Moolenaar45360022005-07-21 21:08:21 +0000992 if exists("s:changeitem") && s:changeitem != ''
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000993 call s:SpellDel()
Bram Moolenaar45360022005-07-21 21:08:21 +0000994 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000995
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000996 # Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000997 if !&spell || &spelllang == ''
998 return
999 endif
Bram Moolenaar45360022005-07-21 21:08:21 +00001000
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001001 var curcol = col('.')
1002 var w: string
1003 var a: string
1004 [w, a] = spellbadword()
1005 if col('.') > curcol # don't use word after the cursor
1006 w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +00001007 endif
1008 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001009 if a == 'caps'
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001010 s:suglist = [substitute(w, '.*', '\u&', '')]
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001011 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001012 s:suglist = spellsuggest(w, 10)
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001013 endif
Bram Moolenaar62292582010-07-10 16:36:59 +02001014 if len(s:suglist) > 0
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001015 if !exists("g:menutrans_spell_change_ARG_to")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001016 g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001017 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001018 s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .'))
1019 s:fromword = w
1020 var pri = 1
Bram Moolenaar45360022005-07-21 21:08:21 +00001021 for sug in s:suglist
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001022 exe 'anoremenu 1.5.' .. pri .. ' PopUp.' .. s:changeitem .. '.' .. escape(sug, ' .')
1023 \ .. ' :call <SID>SpellReplace(' .. pri .. ')<CR>'
1024 pri += 1
Bram Moolenaar45360022005-07-21 21:08:21 +00001025 endfor
1026
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001027 if !exists("g:menutrans_spell_add_ARG_to_word_list")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001028 g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001029 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001030 s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .'))
1031 exe 'anoremenu 1.6 PopUp.' .. s:additem .. ' :spellgood ' .. w .. '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001032
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001033 if !exists("g:menutrans_spell_ignore_ARG")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001034 g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001035 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001036 s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .'))
1037 exe 'anoremenu 1.7 PopUp.' .. s:ignoreitem .. ' :spellgood! ' .. w .. '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001038
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001039 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar45360022005-07-21 21:08:21 +00001040 endif
1041 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001042 call cursor(0, curcol) # put the cursor back where it was
1043 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001044
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001045 def s:SpellReplace(n: number)
1046 var l = getline('.')
1047 # Move the cursor to the start of the word.
Bram Moolenaar62292582010-07-10 16:36:59 +02001048 call spellbadword()
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001049 call setline('.', strpart(l, 0, col('.') - 1) .. s:suglist[n - 1]
1050 \ .. strpart(l, col('.') + len(s:fromword) - 1))
1051 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001052
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001053 def s:SpellDel()
1054 exe "aunmenu PopUp." .. s:changeitem
1055 exe "aunmenu PopUp." .. s:additem
1056 exe "aunmenu PopUp." .. s:ignoreitem
Bram Moolenaar45360022005-07-21 21:08:21 +00001057 aunmenu PopUp.-SpellSep-
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001058 s:changeitem = ''
1059 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001060
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 Moolenaar3e79c972022-02-04 19:48:06 +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>
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001111 an 1.270 ToolBar.RunCtags :exe "!" .. g:ctags_command<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001112 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
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001148def s:LoadVimSesn()
1149 var name: string
Bram Moolenaar071d4272004-06-13 20:20:40 +00001150 if strlen(v:this_session) > 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001151 name = fnameescape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001152 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001153 name = "Session.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001154 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001155 execute "browse so " .. name
1156enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001157
1158" Select a session to save; default to current session name if present
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001159def s:SaveVimSesn()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001160 if strlen(v:this_session) == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001161 v:this_session = "Session.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001162 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001163 execute "browse mksession! " .. fnameescape(v:this_session)
1164enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001165
1166endif
1167
1168endif " !exists("did_install_default_menus")
1169
1170" Define these items always, so that syntax can be switched on when it wasn't.
1171" But skip them when the Syntax menu was disabled by the user.
1172if !exists("did_install_syntax_menu")
1173 an 50.212 &Syntax.&Manual :syn manual<CR>
1174 an 50.214 &Syntax.A&utomatic :syn on<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001175 an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001176 if !exists("*s:SynOnOff")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001177 def s:SynOnOff()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001178 if has("syntax_items")
1179 syn clear
1180 else
1181 if !exists("g:syntax_on")
1182 syn manual
1183 endif
1184 set syn=ON
1185 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001186 enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001187 endif
1188endif
1189
1190
1191" Install the Syntax menu only when filetype.vim has been loaded or when
1192" manual syntax highlighting is enabled.
1193" Avoid installing the Syntax menu twice.
1194if (exists("did_load_filetypes") || exists("syntax_on"))
1195 \ && !exists("did_install_syntax_menu")
1196 let did_install_syntax_menu = 1
1197
1198" Skip setting up the individual syntax selection menus unless
1199" do_syntax_sel_menu is defined (it takes quite a bit of time).
1200if exists("do_syntax_sel_menu")
1201 runtime! synmenu.vim
1202else
Bram Moolenaar040c1fe2017-11-09 19:45:48 +01001203 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 +00001204 an 50.195 &Syntax.-SEP1- <Nop>
1205endif
1206
1207an 50.210 &Syntax.&Off :syn off<CR>
1208an 50.700 &Syntax.-SEP3- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001209an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1210an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001211an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1212
Bram Moolenaar9da17d72022-02-09 21:50:44 +00001213" Uncomment the next line to compile the functions early to find any mistakes
1214" defcompile
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001215
Bram Moolenaar071d4272004-06-13 20:20:40 +00001216endif " !exists("did_install_syntax_menu")
1217
Bram Moolenaar071d4272004-06-13 20:20:40 +00001218" Restore the previous value of 'cpoptions'.
1219let &cpo = s:cpo_save
1220unlet s:cpo_save
1221
1222" vim: set sw=2 :