blob: d449a75102b171533c1e4377198c950b07336848 [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 Moolenaar1588bc82022-03-08 21:35:07 +00005" Last Change: 2022 Mar 02
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*", "", "")
344 &tw = tw == '' ? 0 : tw
345 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 Moolenaar3e79c972022-02-04 19:48:06 +0000477 def s:SpellLang()
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 Moolenaarf3408e72012-10-21 01:21:59 +0200485 if !exists("g:menutrans_set_lang_to")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000486 g:menutrans_set_lang_to = 'Set Language to'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200487 endif
488
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000489 var found = 0
490 var _nm = ''
491 var names = globpath(&runtimepath, "spell/*." .. enc .. ".spl", 1, 1)
492 if !empty(names)
493 var n = 300
494 for f in names
495 var nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000496 if nm != "en" && nm !~ '/'
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000497 _nm = nm
498 found += 1
499 var menuname = '&Tools.&Spelling.' .. escape(g:menutrans_set_lang_to, "\\. \t|") .. '\ "' .. nm .. '"'
500 exe 'an 40.335.' .. n .. ' ' .. menuname .. ' :set spl=' .. nm .. ' spell<CR>'
501 s:undo_spelllang += ['aun ' .. menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000502 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000503 n += 10
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000504 endfor
505 endif
506 if found == 0
507 echomsg "Could not find other spell files"
508 elseif found == 1
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000509 echomsg "Found spell file " .. _nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000510 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000511 echomsg "Found " .. found .. " more spell files"
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000512 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000513 # Need to redo this when 'encoding' is changed.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000514 augroup spellmenu
515 au! EncodingChanged * call <SID>SpellLang()
516 augroup END
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000517 enddef
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000518
519endif
520
Bram Moolenaar071d4272004-06-13 20:20:40 +0000521" Tools.Fold Menu
522if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000523 " open close folds
Bram Moolenaar214641f2017-03-05 17:04:09 +0100524 an 40.340.110 &Tools.&Folding.&Enable/Disable\ Folds<Tab>zi zi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000525 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
Bram Moolenaar214641f2017-03-05 17:04:09 +0100526 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx zMzx
527 inoremenu 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx <C-O>zM<C-O>zx
528 an 40.340.130 &Tools.&Folding.C&lose\ More\ Folds<Tab>zm zm
529 an 40.340.140 &Tools.&Folding.&Close\ All\ Folds<Tab>zM zM
530 an 40.340.150 &Tools.&Folding.O&pen\ More\ Folds<Tab>zr zr
Bram Moolenaar3df01732017-02-17 22:47:16 +0100531 an 40.340.160 &Tools.&Folding.&Open\ All\ Folds<Tab>zR zR
Bram Moolenaar071d4272004-06-13 20:20:40 +0000532 " fold method
533 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
534 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
535 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
536 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
537 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
538 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
539 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
540 " create and delete folds
541 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
542 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
543 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
544 " moving around in folds
545 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100546 an 40.340.310.10 &Tools.&Folding.Fold\ Col&umn\ Width.\ &0\ :set fdc=0<CR>
547 an 40.340.310.20 &Tools.&Folding.Fold\ Col&umn\ Width.\ &2\ :set fdc=2<CR>
548 an 40.340.310.30 &Tools.&Folding.Fold\ Col&umn\ Width.\ &3\ :set fdc=3<CR>
549 an 40.340.310.40 &Tools.&Folding.Fold\ Col&umn\ Width.\ &4\ :set fdc=4<CR>
550 an 40.340.310.50 &Tools.&Folding.Fold\ Col&umn\ Width.\ &5\ :set fdc=5<CR>
551 an 40.340.310.60 &Tools.&Folding.Fold\ Col&umn\ Width.\ &6\ :set fdc=6<CR>
552 an 40.340.310.70 &Tools.&Folding.Fold\ Col&umn\ Width.\ &7\ :set fdc=7<CR>
553 an 40.340.310.80 &Tools.&Folding.Fold\ Col&umn\ Width.\ &8\ :set fdc=8<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000554endif " has folding
555
556if has("diff")
557 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
558 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
559 vunmenu &Tools.&Diff.&Get\ Block
560 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
561 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
562 vunmenu &Tools.&Diff.&Put\ Block
563 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
564endif
565
566an 40.358 &Tools.-SEP2- <Nop>
567an 40.360 &Tools.&Make<Tab>:make :make<CR>
568an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
569an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
570an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
571an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
572an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
573an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
574an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
575an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
576an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
577
578an 40.520 &Tools.-SEP3- <Nop>
579an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
580 \ :call <SID>XxdConv()<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100581an <silent> 40.540 &Tools.Conve&rt\ Back<Tab>:%!xxd\ -r
Bram Moolenaar071d4272004-06-13 20:20:40 +0000582 \ :call <SID>XxdBack()<CR>
583
584" Use a function to do the conversion, so that it also works with 'insertmode'
585" set.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000586def s:XxdConv()
587 var mod = &mod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000588 if has("vms")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000589 :%!mc vim:xxd
Bram Moolenaar071d4272004-06-13 20:20:40 +0000590 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000591 s:XxdFind()
Bram Moolenaar1588bc82022-03-08 21:35:07 +0000592 exe ':%!' .. g:xxdprogram
Bram Moolenaar071d4272004-06-13 20:20:40 +0000593 endif
Bram Moolenaar1588bc82022-03-08 21:35:07 +0000594 if getline(1) =~ "^00000000:" # only if it worked
Bram Moolenaar071d4272004-06-13 20:20:40 +0000595 set ft=xxd
596 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000597 &mod = mod
598enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000599
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000600def s:XxdBack()
601 var mod = &mod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000602 if has("vms")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000603 :%!mc vim:xxd -r
Bram Moolenaar071d4272004-06-13 20:20:40 +0000604 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000605 s:XxdFind()
Bram Moolenaar1588bc82022-03-08 21:35:07 +0000606 exe ':%!' .. g:xxdprogram .. ' -r'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000607 endif
608 set ft=
609 doautocmd filetypedetect BufReadPost
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000610 &mod = mod
611enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000612
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000613def s:XxdFind()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000614 if !exists("g:xxdprogram")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000615 # On the PC xxd may not be in the path but in the install directory
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200616 if has("win32") && !executable("xxd")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000617 g:xxdprogram = $VIMRUNTIME .. (&shellslash ? '/' : '\') .. "xxd.exe"
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100618 if g:xxdprogram =~ ' '
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000619 g:xxdprogram = '"' .. g:xxdprogram .. '"'
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100620 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000621 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000622 g:xxdprogram = "xxd"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000623 endif
624 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000625enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000626
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100627let s:did_setup_compilers = 0
628
Bram Moolenaar071d4272004-06-13 20:20:40 +0000629" Setup the Tools.Compiler submenu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000630def s:SetupCompilers()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100631 if s:did_setup_compilers
632 return
Bram Moolenaar071d4272004-06-13 20:20:40 +0000633 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000634 s:did_setup_compilers = 1
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100635
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000636 var names = globpath(&runtimepath, "compiler/*.vim", 1, 1)
637 var idx = 100
638 for name in names
639 # Ignore case for VMS and windows
640 var cname = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
641 exe "an 30.440." .. idx .. ' &Tools.Se&t\ Compiler.' .. cname .. " :compiler " .. cname .. "<CR>"
642 idx += 10
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100643 endfor
644 silent! aunmenu &Tools.Show\ Compiler\ Se&ttings\ in\ Menu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000645enddef
646
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100647if exists("do_no_lazyload_menus")
648 call s:SetupCompilers()
649else
650 an <silent> 30.440 &Tools.Show\ Compiler\ Se&ttings\ in\ Menu :call <SID>SetupCompilers()<CR>
651endif
652
653" Load ColorScheme, Compiler Setting and Keymap menus when idle.
654if !exists("do_no_lazyload_menus")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000655 def s:SetupLazyloadMenus()
656 s:SetupColorSchemes()
657 s:SetupCompilers()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100658 if has("keymap")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000659 s:SetupKeymaps()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100660 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000661 enddef
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100662 augroup SetupLazyloadMenus
663 au!
664 au CursorHold,CursorHoldI * call <SID>SetupLazyloadMenus() | au! SetupLazyloadMenus
665 augroup END
666endif
667
Bram Moolenaar071d4272004-06-13 20:20:40 +0000668
669if !exists("no_buffers_menu")
670
671" Buffer list menu -- Setup functions & actions
672
673" wait with building the menu until after loading 'session' files. Makes
674" startup faster.
675let s:bmenu_wait = 1
676
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100677" Dictionary of buffer number to name. This helps prevent problems where a
678" buffer as renamed and we didn't keep track of that.
679let s:bmenu_items = {}
680
Bram Moolenaar071d4272004-06-13 20:20:40 +0000681if !exists("bmenu_priority")
682 let bmenu_priority = 60
683endif
684
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100685" invoked from a BufCreate or BufFilePost autocommand
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000686def s:BMAdd()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000687 if s:bmenu_wait == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000688 # when adding too many buffers, redraw in short format
Bram Moolenaar071d4272004-06-13 20:20:40 +0000689 if s:bmenu_count == &menuitems && s:bmenu_short == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000690 s:BMShow()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000691 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000692 var name = expand("<afile>")
693 var num = str2nr(expand("<abuf>"))
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100694 if s:BMCanAdd(name, num)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000695 s:BMFilename(name, num)
696 s:bmenu_count += 1
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100697 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000698 endif
699 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000700enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000701
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100702" invoked from a BufDelete or BufFilePre autocommand
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000703def s:BMRemove()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000704 if s:bmenu_wait == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000705 var bufnum = expand("<abuf>")
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100706 if s:bmenu_items->has_key(bufnum)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000707 var menu_name = s:bmenu_items[bufnum]
708 exe 'silent! aun &Buffers.' .. menu_name
709 s:bmenu_count = s:bmenu_count - 1
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100710 unlet s:bmenu_items[bufnum]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000711 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000712 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000713enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000714
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100715" Return non-zero if buffer with number "name" / "num" is useful to add in the
716" buffer menu.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000717def s:BMCanAdd(name: string, num: number): bool
718 # no directory or unlisted buffer
719 if isdirectory(name) || !buflisted(num)
720 return false
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100721 endif
722
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000723 # no name with control characters
724 if name =~ '[\x01-\x1f]'
725 return false
Bram Moolenaarfa3b7232021-12-24 13:18:38 +0000726 endif
727
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000728 # no special buffer, such as terminal or popup
729 var buftype = getbufvar(num, '&buftype')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100730 if buftype != '' && buftype != 'nofile' && buftype != 'nowrite'
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000731 return false
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100732 endif
733
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000734 # only existing buffers
735 return bufexists(num)
736enddef
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100737
Bram Moolenaar071d4272004-06-13 20:20:40 +0000738" Create the buffer menu (delete an existing one first).
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000739def s:BMShow()
740 s:bmenu_wait = 1
741 s:bmenu_short = 1
742 s:bmenu_count = 0
743 s:bmenu_items = {}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000744
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000745 # Remove old menu, if it exists; keep one entry to avoid a torn off menu to
746 # disappear. Use try/catch to avoid setting v:errmsg
747 try
748 unmenu &Buffers
749 catch
750 endtry
751 exe 'noremenu ' .. g:bmenu_priority .. ".1 &Buffers.Dummy l"
752 try
753 unmenu! &Buffers
754 catch
755 endtry
Bram Moolenaar071d4272004-06-13 20:20:40 +0000756
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000757 # create new menu
758 exe 'an <silent> ' .. g:bmenu_priority .. ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
759 exe 'an ' .. g:bmenu_priority .. ".4 &Buffers.&Delete :confirm bd<CR>"
760 exe 'an ' .. g:bmenu_priority .. ".6 &Buffers.&Alternate :confirm b #<CR>"
761 exe 'an ' .. g:bmenu_priority .. ".7 &Buffers.&Next :confirm bnext<CR>"
762 exe 'an ' .. g:bmenu_priority .. ".8 &Buffers.&Previous :confirm bprev<CR>"
763 exe 'an ' .. g:bmenu_priority .. ".9 &Buffers.-SEP- :"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000764 unmenu &Buffers.Dummy
765
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000766 # figure out how many buffers there are
767 var buf = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000768 while buf <= bufnr('$')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100769 if s:BMCanAdd(bufname(buf), buf)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000770 s:bmenu_count = s:bmenu_count + 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000771 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000772 buf += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000773 endwhile
774 if s:bmenu_count <= &menuitems
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000775 s:bmenu_short = 0
Bram Moolenaar071d4272004-06-13 20:20:40 +0000776 endif
777
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000778 # iterate through buffer list, adding each buffer to the menu:
779 buf = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000780 while buf <= bufnr('$')
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000781 var name = bufname(buf)
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100782 if s:BMCanAdd(name, buf)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000783 call s:BMFilename(name, buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000784 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000785 buf += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000786 endwhile
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000787 s:bmenu_wait = 0
Bram Moolenaar071d4272004-06-13 20:20:40 +0000788 aug buffer_list
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000789 au!
790 au BufCreate,BufFilePost * call s:BMAdd()
791 au BufDelete,BufFilePre * call s:BMRemove()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000792 aug END
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000793enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000794
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000795def s:BMHash(name: string): number
796 # Make name all upper case, so that chars are between 32 and 96
797 var nm = substitute(name, ".*", '\U\0', "")
798 var sp: number
Bram Moolenaar071d4272004-06-13 20:20:40 +0000799 if has("ebcdic")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000800 # HACK: Replace all non alphabetics with 'Z'
801 # Just to make it work for now.
802 nm = substitute(nm, "[^A-Z]", 'Z', "g")
803 sp = char2nr('A') - 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000804 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000805 sp = char2nr(' ')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000806 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000807 # convert first six chars into a number for sorting:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000808 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 +0000809enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000810
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000811def s:BMHash2(name: string): string
812 var nm = substitute(name, ".", '\L\0', "")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000813 if nm[0] < 'a' || nm[0] > 'z'
814 return '&others.'
815 elseif nm[0] <= 'd'
816 return '&abcd.'
817 elseif nm[0] <= 'h'
818 return '&efgh.'
819 elseif nm[0] <= 'l'
820 return '&ijkl.'
821 elseif nm[0] <= 'p'
822 return '&mnop.'
823 elseif nm[0] <= 't'
824 return '&qrst.'
825 else
826 return '&u-z.'
827 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000828enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000829
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100830" Insert a buffer name into the buffer menu.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000831def s:BMFilename(name: string, num: number)
832 var munge = s:BMMunge(name, num)
833 var hash = s:BMHash(munge)
834 var cmd: string
Bram Moolenaar071d4272004-06-13 20:20:40 +0000835 if s:bmenu_short == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000836 s:bmenu_items[num] = munge
837 cmd = 'an ' .. g:bmenu_priority .. '.' .. hash .. ' &Buffers.' .. munge
Bram Moolenaar071d4272004-06-13 20:20:40 +0000838 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000839 var menu_name = s:BMHash2(munge) .. munge
840 s:bmenu_items[num] = menu_name
841 cmd = 'an ' .. g:bmenu_priority .. '.' .. hash .. '.' .. hash .. ' &Buffers.' .. menu_name
Bram Moolenaar071d4272004-06-13 20:20:40 +0000842 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000843 exe cmd .. ' :confirm b' .. num .. '<CR>'
844enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000845
846" Truncate a long path to fit it in a menu item.
847if !exists("g:bmenu_max_pathlen")
848 let g:bmenu_max_pathlen = 35
849endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000850
851def s:BMTruncName(fname: string): string
852 var name = fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000853 if g:bmenu_max_pathlen < 5
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000854 name = ""
Bram Moolenaar071d4272004-06-13 20:20:40 +0000855 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000856 var len = strlen(name)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000857 if len > g:bmenu_max_pathlen
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000858 var amountl = (g:bmenu_max_pathlen / 2) - 2
859 var amountr = g:bmenu_max_pathlen - amountl - 3
860 var pattern = '^\(.\{,' .. amountl .. '}\).\{-}\(.\{,' .. amountr .. '}\)$'
861 var left = substitute(name, pattern, '\1', '')
862 var right = substitute(name, pattern, '\2', '')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000863 if strlen(left) + strlen(right) < len
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000864 name = left .. '...' .. right
Bram Moolenaar071d4272004-06-13 20:20:40 +0000865 endif
866 endif
867 endif
868 return name
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000869enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000870
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000871def s:BMMunge(fname: string, bnum: number): string
872 var name = fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000873 if name == ''
874 if !exists("g:menutrans_no_file")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000875 g:menutrans_no_file = "[No Name]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000876 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000877 name = g:menutrans_no_file
Bram Moolenaar071d4272004-06-13 20:20:40 +0000878 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000879 name = fnamemodify(name, ':p:~')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000880 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000881 # detach file name and separate it out:
882 var name2 = fnamemodify(name, ':t')
883 if bnum >= 0
884 name2 = name2 .. ' (' .. bnum .. ')'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000885 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000886 name = name2 .. "\t" .. s:BMTruncName(fnamemodify(name, ':h'))
887 name = escape(name, "\\. \t|")
888 name = substitute(name, "&", "&&", "g")
889 name = substitute(name, "\n", "^@", "g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000890 return name
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000891enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000892
893" When just starting Vim, load the buffer menu later
894if has("vim_starting")
895 augroup LoadBufferMenu
896 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
897 au VimEnter * au! LoadBufferMenu
898 augroup END
899else
900 call <SID>BMShow()
901endif
902
903endif " !exists("no_buffers_menu")
904
905" Window menu
906an 70.300 &Window.&New<Tab>^Wn <C-W>n
907an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
908an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
909an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
Bram Moolenaar314dd792019-02-03 15:27:20 +0100910an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
911if !exists("*MenuExplOpen")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000912 def MenuExplOpen()
Bram Moolenaar314dd792019-02-03 15:27:20 +0100913 if @% == ""
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000914 :20vsp .
Bram Moolenaar314dd792019-02-03 15:27:20 +0100915 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000916 exe ":20vsp " .. fnameescape(expand("%:p:h"))
Bram Moolenaar314dd792019-02-03 15:27:20 +0100917 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000918 enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000919endif
920an 70.335 &Window.-SEP1- <Nop>
921an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
922an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
923an 70.350 &Window.-SEP2- <Nop>
924an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
925an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
Bram Moolenaar214641f2017-03-05 17:04:09 +0100926an 70.355 &Window.Move\ &To.&Left\ Side<Tab>^WH <C-W>H
927an 70.355 &Window.Move\ &To.&Right\ Side<Tab>^WL <C-W>L
Bram Moolenaar071d4272004-06-13 20:20:40 +0000928an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
929an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
930an 70.365 &Window.-SEP3- <Nop>
931an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
932an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
933an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
934an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
935an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
936
937" The popup menu
938an 1.10 PopUp.&Undo u
939an 1.15 PopUp.-SEP1- <Nop>
940vnoremenu 1.20 PopUp.Cu&t "+x
941vnoremenu 1.30 PopUp.&Copy "+y
942cnoremenu 1.30 PopUp.&Copy <C-Y>
943nnoremenu 1.40 PopUp.&Paste "+gP
944cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000945exe 'vnoremenu <script> 1.40 PopUp.&Paste ' .. paste#paste_cmd['v']
946exe 'inoremenu <script> 1.40 PopUp.&Paste ' .. paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000947vnoremenu 1.50 PopUp.&Delete x
948an 1.55 PopUp.-SEP2- <Nop>
949vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000950
951nnoremenu 1.70 PopUp.Select\ &Word vaw
952onoremenu 1.70 PopUp.Select\ &Word aw
953vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
954inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
955cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
956
957nnoremenu 1.73 PopUp.Select\ &Sentence vas
958onoremenu 1.73 PopUp.Select\ &Sentence as
959vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
960inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
961cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
962
963nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
964onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
965vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
966inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
967cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
968
969nnoremenu 1.80 PopUp.Select\ &Line V
970onoremenu 1.80 PopUp.Select\ &Line <C-C>V
971vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
972inoremenu 1.80 PopUp.Select\ &Line <C-O>V
973cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
974
975nnoremenu 1.90 PopUp.Select\ &Block <C-V>
976onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
977vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
978inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
979cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
980
Bram Moolenaar071d4272004-06-13 20:20:40 +0000981noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
982inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
983cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
984
Bram Moolenaar45360022005-07-21 21:08:21 +0000985if has("spell")
986 " Spell suggestions in the popup menu. Note that this will slow down the
987 " appearance of the menu!
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000988 def s:SpellPopup()
Bram Moolenaar45360022005-07-21 21:08:21 +0000989 if exists("s:changeitem") && s:changeitem != ''
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000990 call s:SpellDel()
Bram Moolenaar45360022005-07-21 21:08:21 +0000991 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000992
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000993 # Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000994 if !&spell || &spelllang == ''
995 return
996 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000997
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000998 var curcol = col('.')
999 var w: string
1000 var a: string
1001 [w, a] = spellbadword()
1002 if col('.') > curcol # don't use word after the cursor
1003 w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +00001004 endif
1005 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001006 if a == 'caps'
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001007 s:suglist = [substitute(w, '.*', '\u&', '')]
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001008 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001009 s:suglist = spellsuggest(w, 10)
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001010 endif
Bram Moolenaar62292582010-07-10 16:36:59 +02001011 if len(s:suglist) > 0
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001012 if !exists("g:menutrans_spell_change_ARG_to")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001013 g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001014 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001015 s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .'))
1016 s:fromword = w
1017 var pri = 1
Bram Moolenaar45360022005-07-21 21:08:21 +00001018 for sug in s:suglist
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001019 exe 'anoremenu 1.5.' .. pri .. ' PopUp.' .. s:changeitem .. '.' .. escape(sug, ' .')
1020 \ .. ' :call <SID>SpellReplace(' .. pri .. ')<CR>'
1021 pri += 1
Bram Moolenaar45360022005-07-21 21:08:21 +00001022 endfor
1023
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001024 if !exists("g:menutrans_spell_add_ARG_to_word_list")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001025 g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001026 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001027 s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .'))
1028 exe 'anoremenu 1.6 PopUp.' .. s:additem .. ' :spellgood ' .. w .. '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001029
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001030 if !exists("g:menutrans_spell_ignore_ARG")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001031 g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001032 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001033 s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .'))
1034 exe 'anoremenu 1.7 PopUp.' .. s:ignoreitem .. ' :spellgood! ' .. w .. '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001035
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001036 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar45360022005-07-21 21:08:21 +00001037 endif
1038 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001039 call cursor(0, curcol) # put the cursor back where it was
1040 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001041
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001042 def s:SpellReplace(n: number)
1043 var l = getline('.')
1044 # Move the cursor to the start of the word.
Bram Moolenaar62292582010-07-10 16:36:59 +02001045 call spellbadword()
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001046 call setline('.', strpart(l, 0, col('.') - 1) .. s:suglist[n - 1]
1047 \ .. strpart(l, col('.') + len(s:fromword) - 1))
1048 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001049
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001050 def s:SpellDel()
1051 exe "aunmenu PopUp." .. s:changeitem
1052 exe "aunmenu PopUp." .. s:additem
1053 exe "aunmenu PopUp." .. s:ignoreitem
Bram Moolenaar45360022005-07-21 21:08:21 +00001054 aunmenu PopUp.-SpellSep-
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001055 s:changeitem = ''
1056 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001057
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001058 augroup SpellPopupMenu
1059 au! MenuPopup * call <SID>SpellPopup()
1060 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +00001061endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00001062
1063" The GUI toolbar (for MS-Windows and GTK)
1064if has("toolbar")
1065 an 1.10 ToolBar.Open :browse confirm e<CR>
1066 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
1067 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
1068
1069 if has("printer")
1070 an 1.40 ToolBar.Print :hardcopy<CR>
1071 vunmenu ToolBar.Print
1072 vnoremenu ToolBar.Print :hardcopy<CR>
1073 elseif has("unix")
1074 an 1.40 ToolBar.Print :w !lpr<CR>
1075 vunmenu ToolBar.Print
1076 vnoremenu ToolBar.Print :w !lpr<CR>
1077 endif
1078
1079 an 1.45 ToolBar.-sep1- <Nop>
1080 an 1.50 ToolBar.Undo u
1081 an 1.60 ToolBar.Redo <C-R>
1082
1083 an 1.65 ToolBar.-sep2- <Nop>
1084 vnoremenu 1.70 ToolBar.Cut "+x
1085 vnoremenu 1.80 ToolBar.Copy "+y
1086 cnoremenu 1.80 ToolBar.Copy <C-Y>
1087 nnoremenu 1.90 ToolBar.Paste "+gP
1088 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001089 exe 'vnoremenu <script> ToolBar.Paste ' .. paste#paste_cmd['v']
1090 exe 'inoremenu <script> ToolBar.Paste ' .. paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +00001091
1092 if !has("gui_athena")
1093 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001094 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001095 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001096 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001097 an 1.110 ToolBar.FindNext n
1098 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +00001099 endif
1100
Bram Moolenaar071d4272004-06-13 20:20:40 +00001101 an 1.215 ToolBar.-sep5- <Nop>
1102 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
1103 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
1104 an 1.240 ToolBar.RunScript :browse so<CR>
1105
1106 an 1.245 ToolBar.-sep6- <Nop>
1107 an 1.250 ToolBar.Make :make<CR>
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001108 an 1.270 ToolBar.RunCtags :exe "!" .. g:ctags_command<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001109 an 1.280 ToolBar.TagJump g<C-]>
1110
1111 an 1.295 ToolBar.-sep7- <Nop>
1112 an 1.300 ToolBar.Help :help<CR>
1113 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1114
1115" Only set the tooltips here if not done in a language menu file
1116if exists("*Do_toolbar_tmenu")
1117 call Do_toolbar_tmenu()
1118else
1119 let did_toolbar_tmenu = 1
1120 tmenu ToolBar.Open Open file
1121 tmenu ToolBar.Save Save current file
1122 tmenu ToolBar.SaveAll Save all files
1123 tmenu ToolBar.Print Print
1124 tmenu ToolBar.Undo Undo
1125 tmenu ToolBar.Redo Redo
1126 tmenu ToolBar.Cut Cut to clipboard
1127 tmenu ToolBar.Copy Copy to clipboard
1128 tmenu ToolBar.Paste Paste from Clipboard
1129 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001130 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001131 tmenu ToolBar.FindNext Find Next
1132 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001133 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001134 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001135 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001136 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001137 tmenu ToolBar.Make Make current project (:make)
1138 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001139 tmenu ToolBar.TagJump Jump to tag under cursor
1140 tmenu ToolBar.Help Vim Help
1141 tmenu ToolBar.FindHelp Search Vim Help
1142endif
1143
1144" Select a session to load; default to current session name if present
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001145def s:LoadVimSesn()
1146 var name: string
Bram Moolenaar071d4272004-06-13 20:20:40 +00001147 if strlen(v:this_session) > 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001148 name = fnameescape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001149 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001150 name = "Session.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001151 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001152 execute "browse so " .. name
1153enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001154
1155" Select a session to save; default to current session name if present
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001156def s:SaveVimSesn()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001157 if strlen(v:this_session) == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001158 v:this_session = "Session.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001159 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001160 execute "browse mksession! " .. fnameescape(v:this_session)
1161enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001162
1163endif
1164
1165endif " !exists("did_install_default_menus")
1166
1167" Define these items always, so that syntax can be switched on when it wasn't.
1168" But skip them when the Syntax menu was disabled by the user.
1169if !exists("did_install_syntax_menu")
1170 an 50.212 &Syntax.&Manual :syn manual<CR>
1171 an 50.214 &Syntax.A&utomatic :syn on<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001172 an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001173 if !exists("*s:SynOnOff")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001174 def s:SynOnOff()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001175 if has("syntax_items")
1176 syn clear
1177 else
1178 if !exists("g:syntax_on")
1179 syn manual
1180 endif
1181 set syn=ON
1182 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001183 enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001184 endif
1185endif
1186
1187
1188" Install the Syntax menu only when filetype.vim has been loaded or when
1189" manual syntax highlighting is enabled.
1190" Avoid installing the Syntax menu twice.
1191if (exists("did_load_filetypes") || exists("syntax_on"))
1192 \ && !exists("did_install_syntax_menu")
1193 let did_install_syntax_menu = 1
1194
1195" Skip setting up the individual syntax selection menus unless
1196" do_syntax_sel_menu is defined (it takes quite a bit of time).
1197if exists("do_syntax_sel_menu")
1198 runtime! synmenu.vim
1199else
Bram Moolenaar040c1fe2017-11-09 19:45:48 +01001200 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 +00001201 an 50.195 &Syntax.-SEP1- <Nop>
1202endif
1203
1204an 50.210 &Syntax.&Off :syn off<CR>
1205an 50.700 &Syntax.-SEP3- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001206an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1207an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001208an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1209
Bram Moolenaar9da17d72022-02-09 21:50:44 +00001210" Uncomment the next line to compile the functions early to find any mistakes
1211" defcompile
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001212
Bram Moolenaar071d4272004-06-13 20:20:40 +00001213endif " !exists("did_install_syntax_menu")
1214
Bram Moolenaar071d4272004-06-13 20:20:40 +00001215" Restore the previous value of 'cpoptions'.
1216let &cpo = s:cpo_save
1217unlet s:cpo_save
1218
1219" vim: set sw=2 :