blob: dc90eeb607a153a4c5754aa4f915c8325cfd3b53 [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 Moolenaar86b48162022-12-06 18:20:10 +00005" Last Change: 2022 Nov 27
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=
610 doautocmd filetypedetect BufReadPost
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000611 &mod = mod
612enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000613
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000614def s:XxdFind()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000615 if !exists("g:xxdprogram")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000616 # On the PC xxd may not be in the path but in the install directory
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200617 if has("win32") && !executable("xxd")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000618 g:xxdprogram = $VIMRUNTIME .. (&shellslash ? '/' : '\') .. "xxd.exe"
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100619 if g:xxdprogram =~ ' '
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000620 g:xxdprogram = '"' .. g:xxdprogram .. '"'
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100621 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000622 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000623 g:xxdprogram = "xxd"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000624 endif
625 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000626enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000627
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100628let s:did_setup_compilers = 0
629
Bram Moolenaar071d4272004-06-13 20:20:40 +0000630" Setup the Tools.Compiler submenu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000631def s:SetupCompilers()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100632 if s:did_setup_compilers
633 return
Bram Moolenaar071d4272004-06-13 20:20:40 +0000634 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000635 s:did_setup_compilers = 1
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100636
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000637 var names = globpath(&runtimepath, "compiler/*.vim", 1, 1)
638 var idx = 100
639 for name in names
640 # Ignore case for VMS and windows
641 var cname = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
642 exe "an 30.440." .. idx .. ' &Tools.Se&t\ Compiler.' .. cname .. " :compiler " .. cname .. "<CR>"
643 idx += 10
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100644 endfor
645 silent! aunmenu &Tools.Show\ Compiler\ Se&ttings\ in\ Menu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000646enddef
647
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100648if exists("do_no_lazyload_menus")
649 call s:SetupCompilers()
650else
651 an <silent> 30.440 &Tools.Show\ Compiler\ Se&ttings\ in\ Menu :call <SID>SetupCompilers()<CR>
652endif
653
654" Load ColorScheme, Compiler Setting and Keymap menus when idle.
655if !exists("do_no_lazyload_menus")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000656 def s:SetupLazyloadMenus()
657 s:SetupColorSchemes()
658 s:SetupCompilers()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100659 if has("keymap")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000660 s:SetupKeymaps()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100661 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000662 enddef
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100663 augroup SetupLazyloadMenus
664 au!
665 au CursorHold,CursorHoldI * call <SID>SetupLazyloadMenus() | au! SetupLazyloadMenus
666 augroup END
667endif
668
Bram Moolenaar071d4272004-06-13 20:20:40 +0000669
670if !exists("no_buffers_menu")
671
672" Buffer list menu -- Setup functions & actions
673
674" wait with building the menu until after loading 'session' files. Makes
675" startup faster.
676let s:bmenu_wait = 1
677
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100678" Dictionary of buffer number to name. This helps prevent problems where a
679" buffer as renamed and we didn't keep track of that.
680let s:bmenu_items = {}
681
Bram Moolenaar071d4272004-06-13 20:20:40 +0000682if !exists("bmenu_priority")
683 let bmenu_priority = 60
684endif
685
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100686" invoked from a BufCreate or BufFilePost autocommand
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000687def s:BMAdd()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000688 if s:bmenu_wait == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000689 # when adding too many buffers, redraw in short format
Bram Moolenaar071d4272004-06-13 20:20:40 +0000690 if s:bmenu_count == &menuitems && s:bmenu_short == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000691 s:BMShow()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000692 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000693 var name = expand("<afile>")
694 var num = str2nr(expand("<abuf>"))
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100695 if s:BMCanAdd(name, num)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000696 s:BMFilename(name, num)
697 s:bmenu_count += 1
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100698 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000699 endif
700 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000701enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000702
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100703" invoked from a BufDelete or BufFilePre autocommand
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000704def s:BMRemove()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000705 if s:bmenu_wait == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000706 var bufnum = expand("<abuf>")
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100707 if s:bmenu_items->has_key(bufnum)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000708 var menu_name = s:bmenu_items[bufnum]
709 exe 'silent! aun &Buffers.' .. menu_name
710 s:bmenu_count = s:bmenu_count - 1
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100711 unlet s:bmenu_items[bufnum]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000712 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000713 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000714enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000715
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100716" Return non-zero if buffer with number "name" / "num" is useful to add in the
717" buffer menu.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000718def s:BMCanAdd(name: string, num: number): bool
719 # no directory or unlisted buffer
720 if isdirectory(name) || !buflisted(num)
721 return false
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100722 endif
723
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000724 # no name with control characters
725 if name =~ '[\x01-\x1f]'
726 return false
Bram Moolenaarfa3b7232021-12-24 13:18:38 +0000727 endif
728
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000729 # no special buffer, such as terminal or popup
730 var buftype = getbufvar(num, '&buftype')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100731 if buftype != '' && buftype != 'nofile' && buftype != 'nowrite'
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000732 return false
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100733 endif
734
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000735 # only existing buffers
736 return bufexists(num)
737enddef
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100738
Bram Moolenaar071d4272004-06-13 20:20:40 +0000739" Create the buffer menu (delete an existing one first).
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000740def s:BMShow()
741 s:bmenu_wait = 1
742 s:bmenu_short = 1
743 s:bmenu_count = 0
744 s:bmenu_items = {}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000745
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000746 # Remove old menu, if it exists; keep one entry to avoid a torn off menu to
747 # disappear. Use try/catch to avoid setting v:errmsg
748 try
749 unmenu &Buffers
750 catch
751 endtry
752 exe 'noremenu ' .. g:bmenu_priority .. ".1 &Buffers.Dummy l"
753 try
754 unmenu! &Buffers
755 catch
756 endtry
Bram Moolenaar071d4272004-06-13 20:20:40 +0000757
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000758 # create new menu
759 exe 'an <silent> ' .. g:bmenu_priority .. ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
760 exe 'an ' .. g:bmenu_priority .. ".4 &Buffers.&Delete :confirm bd<CR>"
761 exe 'an ' .. g:bmenu_priority .. ".6 &Buffers.&Alternate :confirm b #<CR>"
762 exe 'an ' .. g:bmenu_priority .. ".7 &Buffers.&Next :confirm bnext<CR>"
763 exe 'an ' .. g:bmenu_priority .. ".8 &Buffers.&Previous :confirm bprev<CR>"
764 exe 'an ' .. g:bmenu_priority .. ".9 &Buffers.-SEP- :"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000765 unmenu &Buffers.Dummy
766
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000767 # figure out how many buffers there are
768 var buf = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000769 while buf <= bufnr('$')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100770 if s:BMCanAdd(bufname(buf), buf)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000771 s:bmenu_count = s:bmenu_count + 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000772 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000773 buf += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000774 endwhile
775 if s:bmenu_count <= &menuitems
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000776 s:bmenu_short = 0
Bram Moolenaar071d4272004-06-13 20:20:40 +0000777 endif
778
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000779 # iterate through buffer list, adding each buffer to the menu:
780 buf = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000781 while buf <= bufnr('$')
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000782 var name = bufname(buf)
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100783 if s:BMCanAdd(name, buf)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000784 call s:BMFilename(name, buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000785 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000786 buf += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000787 endwhile
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000788 s:bmenu_wait = 0
Bram Moolenaar071d4272004-06-13 20:20:40 +0000789 aug buffer_list
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000790 au!
791 au BufCreate,BufFilePost * call s:BMAdd()
792 au BufDelete,BufFilePre * call s:BMRemove()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000793 aug END
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000794enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000795
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000796def s:BMHash(name: string): number
797 # Make name all upper case, so that chars are between 32 and 96
798 var nm = substitute(name, ".*", '\U\0', "")
799 var sp: number
Bram Moolenaar071d4272004-06-13 20:20:40 +0000800 if has("ebcdic")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000801 # HACK: Replace all non alphabetics with 'Z'
802 # Just to make it work for now.
803 nm = substitute(nm, "[^A-Z]", 'Z', "g")
804 sp = char2nr('A') - 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000805 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000806 sp = char2nr(' ')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000807 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000808 # convert first six chars into a number for sorting:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000809 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 +0000810enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000811
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000812def s:BMHash2(name: string): string
813 var nm = substitute(name, ".", '\L\0', "")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000814 if nm[0] < 'a' || nm[0] > 'z'
815 return '&others.'
816 elseif nm[0] <= 'd'
817 return '&abcd.'
818 elseif nm[0] <= 'h'
819 return '&efgh.'
820 elseif nm[0] <= 'l'
821 return '&ijkl.'
822 elseif nm[0] <= 'p'
823 return '&mnop.'
824 elseif nm[0] <= 't'
825 return '&qrst.'
826 else
827 return '&u-z.'
828 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000829enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000830
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100831" Insert a buffer name into the buffer menu.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000832def s:BMFilename(name: string, num: number)
833 var munge = s:BMMunge(name, num)
834 var hash = s:BMHash(munge)
835 var cmd: string
Bram Moolenaar071d4272004-06-13 20:20:40 +0000836 if s:bmenu_short == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000837 s:bmenu_items[num] = munge
838 cmd = 'an ' .. g:bmenu_priority .. '.' .. hash .. ' &Buffers.' .. munge
Bram Moolenaar071d4272004-06-13 20:20:40 +0000839 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000840 var menu_name = s:BMHash2(munge) .. munge
841 s:bmenu_items[num] = menu_name
842 cmd = 'an ' .. g:bmenu_priority .. '.' .. hash .. '.' .. hash .. ' &Buffers.' .. menu_name
Bram Moolenaar071d4272004-06-13 20:20:40 +0000843 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000844 exe cmd .. ' :confirm b' .. num .. '<CR>'
845enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000846
847" Truncate a long path to fit it in a menu item.
848if !exists("g:bmenu_max_pathlen")
849 let g:bmenu_max_pathlen = 35
850endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000851
852def s:BMTruncName(fname: string): string
853 var name = fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000854 if g:bmenu_max_pathlen < 5
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000855 name = ""
Bram Moolenaar071d4272004-06-13 20:20:40 +0000856 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000857 var len = strlen(name)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000858 if len > g:bmenu_max_pathlen
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000859 var amountl = (g:bmenu_max_pathlen / 2) - 2
860 var amountr = g:bmenu_max_pathlen - amountl - 3
861 var pattern = '^\(.\{,' .. amountl .. '}\).\{-}\(.\{,' .. amountr .. '}\)$'
862 var left = substitute(name, pattern, '\1', '')
863 var right = substitute(name, pattern, '\2', '')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000864 if strlen(left) + strlen(right) < len
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000865 name = left .. '...' .. right
Bram Moolenaar071d4272004-06-13 20:20:40 +0000866 endif
867 endif
868 endif
869 return name
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000870enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000871
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000872def s:BMMunge(fname: string, bnum: number): string
873 var name = fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000874 if name == ''
875 if !exists("g:menutrans_no_file")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000876 g:menutrans_no_file = "[No Name]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000877 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000878 name = g:menutrans_no_file
Bram Moolenaar071d4272004-06-13 20:20:40 +0000879 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000880 name = fnamemodify(name, ':p:~')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000881 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000882 # detach file name and separate it out:
883 var name2 = fnamemodify(name, ':t')
884 if bnum >= 0
885 name2 = name2 .. ' (' .. bnum .. ')'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000886 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000887 name = name2 .. "\t" .. s:BMTruncName(fnamemodify(name, ':h'))
888 name = escape(name, "\\. \t|")
889 name = substitute(name, "&", "&&", "g")
890 name = substitute(name, "\n", "^@", "g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000891 return name
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000892enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000893
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")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000913 def MenuExplOpen()
Bram Moolenaar314dd792019-02-03 15:27:20 +0100914 if @% == ""
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000915 :20vsp .
Bram Moolenaar314dd792019-02-03 15:27:20 +0100916 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000917 exe ":20vsp " .. fnameescape(expand("%:p:h"))
Bram Moolenaar314dd792019-02-03 15:27:20 +0100918 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000919 enddef
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 Moolenaar3e79c972022-02-04 19:48:06 +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 Moolenaar3e79c972022-02-04 19:48:06 +0000989 def s:SpellPopup()
Bram Moolenaar45360022005-07-21 21:08:21 +0000990 if exists("s:changeitem") && s:changeitem != ''
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000991 call s:SpellDel()
Bram Moolenaar45360022005-07-21 21:08:21 +0000992 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000993
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000994 # 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
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000999 var curcol = col('.')
1000 var w: string
1001 var a: string
1002 [w, a] = spellbadword()
1003 if col('.') > curcol # don't use word after the cursor
1004 w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +00001005 endif
1006 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001007 if a == 'caps'
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001008 s:suglist = [substitute(w, '.*', '\u&', '')]
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001009 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001010 s:suglist = spellsuggest(w, 10)
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001011 endif
Bram Moolenaar62292582010-07-10 16:36:59 +02001012 if len(s:suglist) > 0
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001013 if !exists("g:menutrans_spell_change_ARG_to")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001014 g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001015 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001016 s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .'))
1017 s:fromword = w
1018 var pri = 1
Bram Moolenaar45360022005-07-21 21:08:21 +00001019 for sug in s:suglist
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001020 exe 'anoremenu 1.5.' .. pri .. ' PopUp.' .. s:changeitem .. '.' .. escape(sug, ' .')
1021 \ .. ' :call <SID>SpellReplace(' .. pri .. ')<CR>'
1022 pri += 1
Bram Moolenaar45360022005-07-21 21:08:21 +00001023 endfor
1024
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001025 if !exists("g:menutrans_spell_add_ARG_to_word_list")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001026 g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001027 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001028 s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .'))
1029 exe 'anoremenu 1.6 PopUp.' .. s:additem .. ' :spellgood ' .. w .. '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001030
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001031 if !exists("g:menutrans_spell_ignore_ARG")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001032 g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001033 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001034 s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .'))
1035 exe 'anoremenu 1.7 PopUp.' .. s:ignoreitem .. ' :spellgood! ' .. w .. '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001036
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001037 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar45360022005-07-21 21:08:21 +00001038 endif
1039 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001040 call cursor(0, curcol) # put the cursor back where it was
1041 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001042
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001043 def s:SpellReplace(n: number)
1044 var l = getline('.')
1045 # Move the cursor to the start of the word.
Bram Moolenaar62292582010-07-10 16:36:59 +02001046 call spellbadword()
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001047 call setline('.', strpart(l, 0, col('.') - 1) .. s:suglist[n - 1]
1048 \ .. strpart(l, col('.') + len(s:fromword) - 1))
1049 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001050
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001051 def s:SpellDel()
1052 exe "aunmenu PopUp." .. s:changeitem
1053 exe "aunmenu PopUp." .. s:additem
1054 exe "aunmenu PopUp." .. s:ignoreitem
Bram Moolenaar45360022005-07-21 21:08:21 +00001055 aunmenu PopUp.-SpellSep-
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001056 s:changeitem = ''
1057 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001058
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001059 augroup SpellPopupMenu
1060 au! MenuPopup * call <SID>SpellPopup()
1061 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +00001062endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00001063
1064" The GUI toolbar (for MS-Windows and GTK)
1065if has("toolbar")
1066 an 1.10 ToolBar.Open :browse confirm e<CR>
1067 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
1068 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
1069
1070 if has("printer")
1071 an 1.40 ToolBar.Print :hardcopy<CR>
1072 vunmenu ToolBar.Print
1073 vnoremenu ToolBar.Print :hardcopy<CR>
1074 elseif has("unix")
1075 an 1.40 ToolBar.Print :w !lpr<CR>
1076 vunmenu ToolBar.Print
1077 vnoremenu ToolBar.Print :w !lpr<CR>
1078 endif
1079
1080 an 1.45 ToolBar.-sep1- <Nop>
1081 an 1.50 ToolBar.Undo u
1082 an 1.60 ToolBar.Redo <C-R>
1083
1084 an 1.65 ToolBar.-sep2- <Nop>
1085 vnoremenu 1.70 ToolBar.Cut "+x
1086 vnoremenu 1.80 ToolBar.Copy "+y
1087 cnoremenu 1.80 ToolBar.Copy <C-Y>
1088 nnoremenu 1.90 ToolBar.Paste "+gP
1089 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001090 exe 'vnoremenu <script> ToolBar.Paste ' .. paste#paste_cmd['v']
1091 exe 'inoremenu <script> ToolBar.Paste ' .. paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +00001092
1093 if !has("gui_athena")
1094 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001095 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001096 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001097 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001098 an 1.110 ToolBar.FindNext n
1099 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +00001100 endif
1101
Bram Moolenaar071d4272004-06-13 20:20:40 +00001102 an 1.215 ToolBar.-sep5- <Nop>
1103 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
1104 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
1105 an 1.240 ToolBar.RunScript :browse so<CR>
1106
1107 an 1.245 ToolBar.-sep6- <Nop>
1108 an 1.250 ToolBar.Make :make<CR>
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001109 an 1.270 ToolBar.RunCtags :exe "!" .. g:ctags_command<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001110 an 1.280 ToolBar.TagJump g<C-]>
1111
1112 an 1.295 ToolBar.-sep7- <Nop>
1113 an 1.300 ToolBar.Help :help<CR>
1114 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1115
1116" Only set the tooltips here if not done in a language menu file
1117if exists("*Do_toolbar_tmenu")
1118 call Do_toolbar_tmenu()
1119else
1120 let did_toolbar_tmenu = 1
1121 tmenu ToolBar.Open Open file
1122 tmenu ToolBar.Save Save current file
1123 tmenu ToolBar.SaveAll Save all files
1124 tmenu ToolBar.Print Print
1125 tmenu ToolBar.Undo Undo
1126 tmenu ToolBar.Redo Redo
1127 tmenu ToolBar.Cut Cut to clipboard
1128 tmenu ToolBar.Copy Copy to clipboard
1129 tmenu ToolBar.Paste Paste from Clipboard
1130 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001131 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001132 tmenu ToolBar.FindNext Find Next
1133 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001134 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001135 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001136 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001137 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001138 tmenu ToolBar.Make Make current project (:make)
1139 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001140 tmenu ToolBar.TagJump Jump to tag under cursor
1141 tmenu ToolBar.Help Vim Help
1142 tmenu ToolBar.FindHelp Search Vim Help
1143endif
1144
1145" Select a session to load; default to current session name if present
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001146def s:LoadVimSesn()
1147 var name: string
Bram Moolenaar071d4272004-06-13 20:20:40 +00001148 if strlen(v:this_session) > 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001149 name = fnameescape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001150 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001151 name = "Session.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001152 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001153 execute "browse so " .. name
1154enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001155
1156" Select a session to save; default to current session name if present
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001157def s:SaveVimSesn()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001158 if strlen(v:this_session) == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001159 v:this_session = "Session.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001160 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001161 execute "browse mksession! " .. fnameescape(v:this_session)
1162enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001163
1164endif
1165
1166endif " !exists("did_install_default_menus")
1167
1168" Define these items always, so that syntax can be switched on when it wasn't.
1169" But skip them when the Syntax menu was disabled by the user.
1170if !exists("did_install_syntax_menu")
1171 an 50.212 &Syntax.&Manual :syn manual<CR>
1172 an 50.214 &Syntax.A&utomatic :syn on<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001173 an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001174 if !exists("*s:SynOnOff")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001175 def s:SynOnOff()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001176 if has("syntax_items")
1177 syn clear
1178 else
1179 if !exists("g:syntax_on")
1180 syn manual
1181 endif
1182 set syn=ON
1183 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001184 enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001185 endif
1186endif
1187
1188
1189" Install the Syntax menu only when filetype.vim has been loaded or when
1190" manual syntax highlighting is enabled.
1191" Avoid installing the Syntax menu twice.
1192if (exists("did_load_filetypes") || exists("syntax_on"))
1193 \ && !exists("did_install_syntax_menu")
1194 let did_install_syntax_menu = 1
1195
1196" Skip setting up the individual syntax selection menus unless
1197" do_syntax_sel_menu is defined (it takes quite a bit of time).
1198if exists("do_syntax_sel_menu")
1199 runtime! synmenu.vim
1200else
Bram Moolenaar040c1fe2017-11-09 19:45:48 +01001201 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 +00001202 an 50.195 &Syntax.-SEP1- <Nop>
1203endif
1204
1205an 50.210 &Syntax.&Off :syn off<CR>
1206an 50.700 &Syntax.-SEP3- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001207an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1208an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001209an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1210
Bram Moolenaar9da17d72022-02-09 21:50:44 +00001211" Uncomment the next line to compile the functions early to find any mistakes
1212" defcompile
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001213
Bram Moolenaar071d4272004-06-13 20:20:40 +00001214endif " !exists("did_install_syntax_menu")
1215
Bram Moolenaar071d4272004-06-13 20:20:40 +00001216" Restore the previous value of 'cpoptions'.
1217let &cpo = s:cpo_save
1218unlet s:cpo_save
1219
1220" vim: set sw=2 :