blob: 12924af6fb34872bead8d8af8261dc1cdf4cb1b0 [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 Moolenaar3e79c972022-02-04 19:48:06 +00005" Last Change: 2022 Feb 04
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>
132an 10.335 &File.-SEP1- <Nop>
133an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
134an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR>
135
136if has("diff")
137 an 10.400 &File.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100138 an 10.410 &File.Split\ &Diff\ With\.\.\. :browse vert diffsplit<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139 an 10.420 &File.Split\ Patched\ &By\.\.\. :browse vert diffpatch<CR>
140endif
141
142if has("printer")
143 an 10.500 &File.-SEP3- <Nop>
144 an 10.510 &File.&Print :hardcopy<CR>
145 vunmenu &File.&Print
146 vnoremenu &File.&Print :hardcopy<CR>
147elseif has("unix")
148 an 10.500 &File.-SEP3- <Nop>
149 an 10.510 &File.&Print :w !lpr<CR>
150 vunmenu &File.&Print
151 vnoremenu &File.&Print :w !lpr<CR>
152endif
153an 10.600 &File.-SEP4- <Nop>
154an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR>
155an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR>
156
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000157def s:SelectAll()
158 exe "norm! gg" .. (&slm == "" ? "VG" : "gH\<C-O>G")
159enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000160
161" Edit menu
162an 20.310 &Edit.&Undo<Tab>u u
163an 20.320 &Edit.&Redo<Tab>^R <C-R>
164an 20.330 &Edit.Rep&eat<Tab>\. .
165
166an 20.335 &Edit.-SEP1- <Nop>
167vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
168vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
169cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100170if exists(':tlmenu')
171 tlnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-W>:<C-Y><CR>
172endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000173nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
174cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
Bram Moolenaar4c5d8152018-10-19 22:36:53 +0200175if exists(':tlmenu')
176 tlnoremenu &Edit.&Paste<Tab>"+gP <C-W>"+
177endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000178exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' .. paste#paste_cmd['v']
179exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' .. paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000180nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
181inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
182nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
183inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100184if has("win32")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185 vnoremenu 20.390 &Edit.&Delete<Tab>x x
186endif
187noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
188inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
189cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
190
191an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100192if has("win32") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000193 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
194 vunmenu &Edit.&Find\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000195 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000196 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
197 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000198 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199else
200 an 20.410 &Edit.&Find<Tab>/ /
201 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
202 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
203 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
204endif
205
206an 20.425 &Edit.-SEP3- <Nop>
207an 20.430 &Edit.Settings\ &Window :options<CR>
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000208an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
209
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000210def s:EditVimrc()
211 var fname: string
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000212 if $MYVIMRC != ''
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000213 fname = $MYVIMRC
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200214 elseif has("win32")
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000215 if $HOME != ''
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000216 fname = $HOME .. "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000217 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000218 fname = $VIM .. "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000219 endif
220 elseif has("amiga")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000221 fname = "s:.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000222 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000223 fname = $HOME .. "/.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000224 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000225 fname = fnameescape(fname)
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000226 if &mod
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000227 exe "split " .. fname
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000228 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000229 exe "edit " .. fname
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000230 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000231enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000232
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000233def s:FixFText(): string
234 # Fix text in nameless register to be used with :promptfind.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000235 return substitute(@", "[\r\n]", '\\n', 'g')
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000236enddef
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000237
Bram Moolenaar071d4272004-06-13 20:20:40 +0000238" Edit/Global Settings
239an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100240an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignoring\ Case<Tab>:set\ ic! :set ic! ic?<CR>
241an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showing\ Matched\ Pairs<Tab>:set\ sm! :set sm! sm?<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000242
Bram Moolenaar214641f2017-03-05 17:04:09 +0100243an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 1\ :set so=1<CR>
244an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 2\ :set so=2<CR>
245an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 3\ :set so=3<CR>
246an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 4\ :set so=4<CR>
247an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 5\ :set so=5<CR>
248an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 7\ :set so=7<CR>
249an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 10\ :set so=10<CR>
250an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 100\ :set so=100<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000251
252an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
253an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100254an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ Mode :set ve=insert<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000255an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
256an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
257an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100258an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatibility<Tab>:set\ cp! :set cp!<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000259an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
260an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
261"
262" GUI options
263an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
264an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
265an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
266an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
267an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
268
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000269def s:SearchP()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000270 if !exists("g:menutrans_path_dialog")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000271 g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
Bram Moolenaar071d4272004-06-13 20:20:40 +0000272 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000273 var n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000274 if n != ""
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000275 &path = substitute(n, ' ', '\\ ', 'g')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000276 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000277enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000278
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000279def s:TagFiles()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280 if !exists("g:menutrans_tags_dialog")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000281 g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
Bram Moolenaar071d4272004-06-13 20:20:40 +0000282 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000283 var n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000284 if n != ""
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000285 &tags = substitute(n, ' ', '\\ ', 'g')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000286 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000287enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000288
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000289def s:ToggleGuiOption(option: string)
290 # If a:option is already set in guioptions, then we want to remove it
291 if match(&guioptions, "\\C" .. option) > -1
292 exec "set go-=" .. option
293 else
294 exec "set go+=" .. option
295 endif
296enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000297
298" Edit/File Settings
299
300" Boolean options
301an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100302an 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 +0000303an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100304an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrapping<Tab>:set\ wrap! :set wrap! wrap?<CR>
305an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rapping\ at\ Word<Tab>:set\ lbr! :set lbr! lbr?<CR>
306an 20.440.160 &Edit.F&ile\ Settings.Toggle\ Tab\ &Expanding<Tab>:set\ et! :set et! et?<CR>
307an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &Auto\ Indenting<Tab>:set\ ai! :set ai! ai?<CR>
308an 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 +0000309
310" other options
311an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
312an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
313an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
314an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
315an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
316an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
317an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
318
319an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
320an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
321an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
322an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
323an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
324an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
325
326an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
327an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000328
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000329def s:TextWidth()
330 if !exists("g:menutrans_textwidth_dialog")
331 g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
332 endif
333 var n = inputdialog(g:menutrans_textwidth_dialog, &tw .. '')
334 if n != ""
335 # Remove leading zeros to avoid it being used as an octal number.
336 # But keep a zero by itself.
337 var tw = substitute(n, "^0*", "", "")
338 &tw = tw == '' ? 0 : tw
339 endif
340enddef
341
342def s:FileFormat()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000343 if !exists("g:menutrans_fileformat_dialog")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000344 g:menutrans_fileformat_dialog = "Select format for writing the file"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000345 endif
346 if !exists("g:menutrans_fileformat_choices")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000347 g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000348 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000349 var def_choice: number
Bram Moolenaar071d4272004-06-13 20:20:40 +0000350 if &ff == "dos"
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000351 def_choice = 2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000352 elseif &ff == "mac"
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000353 def_choice = 3
Bram Moolenaar071d4272004-06-13 20:20:40 +0000354 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000355 def_choice = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000356 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000357 var n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def_choice, "Question")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000358 if n == 1
359 set ff=unix
360 elseif n == 2
361 set ff=dos
362 elseif n == 3
363 set ff=mac
364 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000365enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000366
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100367let s:did_setup_color_schemes = 0
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200368
Bram Moolenaar071d4272004-06-13 20:20:40 +0000369" Setup the Edit.Color Scheme submenu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000370def s:SetupColorSchemes()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100371 if s:did_setup_color_schemes
372 return
373 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000374 s:did_setup_color_schemes = 1
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200375
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000376 var n = globpath(&runtimepath, "colors/*.vim", 1, 1)
377 n += globpath(&packpath, "pack/*/start/*/colors/*.vim", 1, 1)
378 n += globpath(&packpath, "pack/*/opt/*/colors/*.vim", 1, 1)
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200379
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000380 # Ignore case for VMS and windows, sort on name
381 var names = sort(map(n, 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200382
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000383 # define all the submenu entries
384 var idx = 100
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100385 for name in names
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000386 exe "an 20.450." .. idx .. ' &Edit.C&olor\ Scheme.' .. name .. " :colors " .. name .. "<CR>"
387 idx += 10
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100388 endfor
389 silent! aunmenu &Edit.Show\ C&olor\ Schemes\ in\ Menu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000390enddef
391
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100392if exists("do_no_lazyload_menus")
393 call s:SetupColorSchemes()
394else
395 an <silent> 20.450 &Edit.Show\ C&olor\ Schemes\ in\ Menu :call <SID>SetupColorSchemes()<CR>
396endif
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200397
Bram Moolenaar071d4272004-06-13 20:20:40 +0000398
399" Setup the Edit.Keymap submenu
400if has("keymap")
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100401 let s:did_setup_keymaps = 0
402
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000403 def s:SetupKeymaps()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100404 if s:did_setup_keymaps
405 return
406 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000407 s:did_setup_keymaps = 1
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100408
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000409 var names = globpath(&runtimepath, "keymap/*.vim", 1, 1)
410 if !empty(names)
411 var idx = 100
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100412 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000413 for name in names
414 # Ignore case for VMS and windows
415 var mapname = substitute(name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
416 exe "an 20.460." .. idx .. ' &Edit.&Keymap.' .. mapname .. " :set keymap=" .. mapname .. "<CR>"
417 idx += 10
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100418 endfor
419 endif
420 silent! aunmenu &Edit.Show\ &Keymaps\ in\ Menu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000421 enddef
422
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100423 if exists("do_no_lazyload_menus")
424 call s:SetupKeymaps()
425 else
426 an <silent> 20.460 &Edit.Show\ &Keymaps\ in\ Menu :call <SID>SetupKeymaps()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000427 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000428endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000429
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100430if has("win32") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000431 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
432endif
433
434" Programming menu
435if !exists("g:ctags_command")
436 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000437 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000438 else
439 let g:ctags_command = "ctags -R ."
440 endif
441endif
442
Bram Moolenaar214641f2017-03-05 17:04:09 +0100443an 40.300 &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
444vunmenu &Tools.&Jump\ to\ This\ Tag<Tab>g^]
445vnoremenu &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
446an 40.310 &Tools.Jump\ &Back<Tab>^T <C-T>
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000447an 40.320 &Tools.Build\ &Tags\ File :exe "!" .. g:ctags_command<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000448
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000449if has("folding") || has("spell")
450 an 40.330 &Tools.-SEP1- <Nop>
451endif
452
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000453" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000454if has("spell")
455 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
456 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100457 an 40.335.130 &Tools.&Spelling.To\ &Next\ Error<Tab>]s ]s
458 an 40.335.130 &Tools.&Spelling.To\ &Previous\ Error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000459 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar214641f2017-03-05 17:04:09 +0100460 an 40.335.150 &Tools.&Spelling.&Repeat\ Correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000461 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100462 an 40.335.210 &Tools.&Spelling.Set\ Language\ to\ "en" :set spl=en spell<CR>
463 an 40.335.220 &Tools.&Spelling.Set\ Language\ to\ "en_au" :set spl=en_au spell<CR>
464 an 40.335.230 &Tools.&Spelling.Set\ Language\ to\ "en_ca" :set spl=en_ca spell<CR>
465 an 40.335.240 &Tools.&Spelling.Set\ Language\ to\ "en_gb" :set spl=en_gb spell<CR>
466 an 40.335.250 &Tools.&Spelling.Set\ Language\ to\ "en_nz" :set spl=en_nz spell<CR>
467 an 40.335.260 &Tools.&Spelling.Set\ Language\ to\ "en_us" :set spl=en_us spell<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000468 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
469
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200470 let s:undo_spelllang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000471 def s:SpellLang()
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200472 for cmd in s:undo_spelllang
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000473 exe "silent! " .. cmd
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000474 endfor
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000475 s:undo_spelllang = []
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000476
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000477 var enc = &enc == "iso-8859-15" ? "latin1" : &enc
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000478
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200479 if !exists("g:menutrans_set_lang_to")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000480 g:menutrans_set_lang_to = 'Set Language to'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200481 endif
482
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000483 var found = 0
484 var _nm = ''
485 var names = globpath(&runtimepath, "spell/*." .. enc .. ".spl", 1, 1)
486 if !empty(names)
487 var n = 300
488 for f in names
489 var nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000490 if nm != "en" && nm !~ '/'
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000491 _nm = nm
492 found += 1
493 var menuname = '&Tools.&Spelling.' .. escape(g:menutrans_set_lang_to, "\\. \t|") .. '\ "' .. nm .. '"'
494 exe 'an 40.335.' .. n .. ' ' .. menuname .. ' :set spl=' .. nm .. ' spell<CR>'
495 s:undo_spelllang += ['aun ' .. menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000496 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000497 n += 10
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000498 endfor
499 endif
500 if found == 0
501 echomsg "Could not find other spell files"
502 elseif found == 1
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000503 echomsg "Found spell file " .. _nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000504 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000505 echomsg "Found " .. found .. " more spell files"
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000506 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000507 # Need to redo this when 'encoding' is changed.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000508 augroup spellmenu
509 au! EncodingChanged * call <SID>SpellLang()
510 augroup END
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000511 enddef
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000512
513endif
514
Bram Moolenaar071d4272004-06-13 20:20:40 +0000515" Tools.Fold Menu
516if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000517 " open close folds
Bram Moolenaar214641f2017-03-05 17:04:09 +0100518 an 40.340.110 &Tools.&Folding.&Enable/Disable\ Folds<Tab>zi zi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000519 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
Bram Moolenaar214641f2017-03-05 17:04:09 +0100520 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx zMzx
521 inoremenu 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx <C-O>zM<C-O>zx
522 an 40.340.130 &Tools.&Folding.C&lose\ More\ Folds<Tab>zm zm
523 an 40.340.140 &Tools.&Folding.&Close\ All\ Folds<Tab>zM zM
524 an 40.340.150 &Tools.&Folding.O&pen\ More\ Folds<Tab>zr zr
Bram Moolenaar3df01732017-02-17 22:47:16 +0100525 an 40.340.160 &Tools.&Folding.&Open\ All\ Folds<Tab>zR zR
Bram Moolenaar071d4272004-06-13 20:20:40 +0000526 " fold method
527 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
528 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
529 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
530 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
531 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
532 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
533 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
534 " create and delete folds
535 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
536 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
537 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
538 " moving around in folds
539 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100540 an 40.340.310.10 &Tools.&Folding.Fold\ Col&umn\ Width.\ &0\ :set fdc=0<CR>
541 an 40.340.310.20 &Tools.&Folding.Fold\ Col&umn\ Width.\ &2\ :set fdc=2<CR>
542 an 40.340.310.30 &Tools.&Folding.Fold\ Col&umn\ Width.\ &3\ :set fdc=3<CR>
543 an 40.340.310.40 &Tools.&Folding.Fold\ Col&umn\ Width.\ &4\ :set fdc=4<CR>
544 an 40.340.310.50 &Tools.&Folding.Fold\ Col&umn\ Width.\ &5\ :set fdc=5<CR>
545 an 40.340.310.60 &Tools.&Folding.Fold\ Col&umn\ Width.\ &6\ :set fdc=6<CR>
546 an 40.340.310.70 &Tools.&Folding.Fold\ Col&umn\ Width.\ &7\ :set fdc=7<CR>
547 an 40.340.310.80 &Tools.&Folding.Fold\ Col&umn\ Width.\ &8\ :set fdc=8<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000548endif " has folding
549
550if has("diff")
551 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
552 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
553 vunmenu &Tools.&Diff.&Get\ Block
554 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
555 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
556 vunmenu &Tools.&Diff.&Put\ Block
557 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
558endif
559
560an 40.358 &Tools.-SEP2- <Nop>
561an 40.360 &Tools.&Make<Tab>:make :make<CR>
562an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
563an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
564an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
565an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
566an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
567an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
568an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
569an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
570an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
571
572an 40.520 &Tools.-SEP3- <Nop>
573an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
574 \ :call <SID>XxdConv()<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100575an <silent> 40.540 &Tools.Conve&rt\ Back<Tab>:%!xxd\ -r
Bram Moolenaar071d4272004-06-13 20:20:40 +0000576 \ :call <SID>XxdBack()<CR>
577
578" Use a function to do the conversion, so that it also works with 'insertmode'
579" set.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000580def s:XxdConv()
581 var mod = &mod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000582 if has("vms")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000583 :%!mc vim:xxd
Bram Moolenaar071d4272004-06-13 20:20:40 +0000584 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000585 s:XxdFind()
586 exe '%!' .. g:xxdprogram
Bram Moolenaar071d4272004-06-13 20:20:40 +0000587 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000588 if getline(1) =~ "^0000000:" # only if it worked
Bram Moolenaar071d4272004-06-13 20:20:40 +0000589 set ft=xxd
590 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000591 &mod = mod
592enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000593
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000594def s:XxdBack()
595 var mod = &mod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000596 if has("vms")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000597 :%!mc vim:xxd -r
Bram Moolenaar071d4272004-06-13 20:20:40 +0000598 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000599 s:XxdFind()
600 exe '%!' .. g:xxdprogram .. ' -r'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000601 endif
602 set ft=
603 doautocmd filetypedetect BufReadPost
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000604 &mod = mod
605enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000606
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000607def s:XxdFind()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000608 if !exists("g:xxdprogram")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000609 # On the PC xxd may not be in the path but in the install directory
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200610 if has("win32") && !executable("xxd")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000611 g:xxdprogram = $VIMRUNTIME .. (&shellslash ? '/' : '\') .. "xxd.exe"
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100612 if g:xxdprogram =~ ' '
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000613 g:xxdprogram = '"' .. g:xxdprogram .. '"'
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100614 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000615 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000616 g:xxdprogram = "xxd"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000617 endif
618 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000619enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000620
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100621let s:did_setup_compilers = 0
622
Bram Moolenaar071d4272004-06-13 20:20:40 +0000623" Setup the Tools.Compiler submenu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000624def s:SetupCompilers()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100625 if s:did_setup_compilers
626 return
Bram Moolenaar071d4272004-06-13 20:20:40 +0000627 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000628 s:did_setup_compilers = 1
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100629
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000630 var names = globpath(&runtimepath, "compiler/*.vim", 1, 1)
631 var idx = 100
632 for name in names
633 # Ignore case for VMS and windows
634 var cname = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
635 exe "an 30.440." .. idx .. ' &Tools.Se&t\ Compiler.' .. cname .. " :compiler " .. cname .. "<CR>"
636 idx += 10
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100637 endfor
638 silent! aunmenu &Tools.Show\ Compiler\ Se&ttings\ in\ Menu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000639enddef
640
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100641if exists("do_no_lazyload_menus")
642 call s:SetupCompilers()
643else
644 an <silent> 30.440 &Tools.Show\ Compiler\ Se&ttings\ in\ Menu :call <SID>SetupCompilers()<CR>
645endif
646
647" Load ColorScheme, Compiler Setting and Keymap menus when idle.
648if !exists("do_no_lazyload_menus")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000649 def s:SetupLazyloadMenus()
650 s:SetupColorSchemes()
651 s:SetupCompilers()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100652 if has("keymap")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000653 s:SetupKeymaps()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100654 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000655 enddef
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100656 augroup SetupLazyloadMenus
657 au!
658 au CursorHold,CursorHoldI * call <SID>SetupLazyloadMenus() | au! SetupLazyloadMenus
659 augroup END
660endif
661
Bram Moolenaar071d4272004-06-13 20:20:40 +0000662
663if !exists("no_buffers_menu")
664
665" Buffer list menu -- Setup functions & actions
666
667" wait with building the menu until after loading 'session' files. Makes
668" startup faster.
669let s:bmenu_wait = 1
670
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100671" Dictionary of buffer number to name. This helps prevent problems where a
672" buffer as renamed and we didn't keep track of that.
673let s:bmenu_items = {}
674
Bram Moolenaar071d4272004-06-13 20:20:40 +0000675if !exists("bmenu_priority")
676 let bmenu_priority = 60
677endif
678
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100679" invoked from a BufCreate or BufFilePost autocommand
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000680def s:BMAdd()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000681 if s:bmenu_wait == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000682 # when adding too many buffers, redraw in short format
Bram Moolenaar071d4272004-06-13 20:20:40 +0000683 if s:bmenu_count == &menuitems && s:bmenu_short == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000684 s:BMShow()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000685 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000686 var name = expand("<afile>")
687 var num = str2nr(expand("<abuf>"))
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100688 if s:BMCanAdd(name, num)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000689 s:BMFilename(name, num)
690 s:bmenu_count += 1
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100691 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000692 endif
693 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000694enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000695
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100696" invoked from a BufDelete or BufFilePre autocommand
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000697def s:BMRemove()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000698 if s:bmenu_wait == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000699 var bufnum = expand("<abuf>")
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100700 if s:bmenu_items->has_key(bufnum)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000701 var menu_name = s:bmenu_items[bufnum]
702 exe 'silent! aun &Buffers.' .. menu_name
703 s:bmenu_count = s:bmenu_count - 1
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100704 unlet s:bmenu_items[bufnum]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000705 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000706 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000707enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000708
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100709" Return non-zero if buffer with number "name" / "num" is useful to add in the
710" buffer menu.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000711def s:BMCanAdd(name: string, num: number): bool
712 # no directory or unlisted buffer
713 if isdirectory(name) || !buflisted(num)
714 return false
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100715 endif
716
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000717 # no name with control characters
718 if name =~ '[\x01-\x1f]'
719 return false
Bram Moolenaarfa3b7232021-12-24 13:18:38 +0000720 endif
721
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000722 # no special buffer, such as terminal or popup
723 var buftype = getbufvar(num, '&buftype')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100724 if buftype != '' && buftype != 'nofile' && buftype != 'nowrite'
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000725 return false
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100726 endif
727
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000728 # only existing buffers
729 return bufexists(num)
730enddef
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100731
Bram Moolenaar071d4272004-06-13 20:20:40 +0000732" Create the buffer menu (delete an existing one first).
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000733def s:BMShow()
734 s:bmenu_wait = 1
735 s:bmenu_short = 1
736 s:bmenu_count = 0
737 s:bmenu_items = {}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000738
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000739 # Remove old menu, if it exists; keep one entry to avoid a torn off menu to
740 # disappear. Use try/catch to avoid setting v:errmsg
741 try
742 unmenu &Buffers
743 catch
744 endtry
745 exe 'noremenu ' .. g:bmenu_priority .. ".1 &Buffers.Dummy l"
746 try
747 unmenu! &Buffers
748 catch
749 endtry
Bram Moolenaar071d4272004-06-13 20:20:40 +0000750
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000751 # create new menu
752 exe 'an <silent> ' .. g:bmenu_priority .. ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
753 exe 'an ' .. g:bmenu_priority .. ".4 &Buffers.&Delete :confirm bd<CR>"
754 exe 'an ' .. g:bmenu_priority .. ".6 &Buffers.&Alternate :confirm b #<CR>"
755 exe 'an ' .. g:bmenu_priority .. ".7 &Buffers.&Next :confirm bnext<CR>"
756 exe 'an ' .. g:bmenu_priority .. ".8 &Buffers.&Previous :confirm bprev<CR>"
757 exe 'an ' .. g:bmenu_priority .. ".9 &Buffers.-SEP- :"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000758 unmenu &Buffers.Dummy
759
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000760 # figure out how many buffers there are
761 var buf = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000762 while buf <= bufnr('$')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100763 if s:BMCanAdd(bufname(buf), buf)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000764 s:bmenu_count = s:bmenu_count + 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000765 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000766 buf += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000767 endwhile
768 if s:bmenu_count <= &menuitems
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000769 s:bmenu_short = 0
Bram Moolenaar071d4272004-06-13 20:20:40 +0000770 endif
771
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000772 # iterate through buffer list, adding each buffer to the menu:
773 buf = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000774 while buf <= bufnr('$')
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000775 var name = bufname(buf)
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100776 if s:BMCanAdd(name, buf)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000777 call s:BMFilename(name, buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000778 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000779 buf += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000780 endwhile
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000781 s:bmenu_wait = 0
Bram Moolenaar071d4272004-06-13 20:20:40 +0000782 aug buffer_list
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000783 au!
784 au BufCreate,BufFilePost * call s:BMAdd()
785 au BufDelete,BufFilePre * call s:BMRemove()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000786 aug END
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000787enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000788
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000789def s:BMHash(name: string): number
790 # Make name all upper case, so that chars are between 32 and 96
791 var nm = substitute(name, ".*", '\U\0', "")
792 var sp: number
Bram Moolenaar071d4272004-06-13 20:20:40 +0000793 if has("ebcdic")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000794 # HACK: Replace all non alphabetics with 'Z'
795 # Just to make it work for now.
796 nm = substitute(nm, "[^A-Z]", 'Z', "g")
797 sp = char2nr('A') - 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000798 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000799 sp = char2nr(' ')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000800 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000801 # convert first six chars into a number for sorting:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000802 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 +0000803enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000804
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000805def s:BMHash2(name: string): string
806 var nm = substitute(name, ".", '\L\0', "")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000807 if nm[0] < 'a' || nm[0] > 'z'
808 return '&others.'
809 elseif nm[0] <= 'd'
810 return '&abcd.'
811 elseif nm[0] <= 'h'
812 return '&efgh.'
813 elseif nm[0] <= 'l'
814 return '&ijkl.'
815 elseif nm[0] <= 'p'
816 return '&mnop.'
817 elseif nm[0] <= 't'
818 return '&qrst.'
819 else
820 return '&u-z.'
821 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000822enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000823
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100824" Insert a buffer name into the buffer menu.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000825def s:BMFilename(name: string, num: number)
826 var munge = s:BMMunge(name, num)
827 var hash = s:BMHash(munge)
828 var cmd: string
Bram Moolenaar071d4272004-06-13 20:20:40 +0000829 if s:bmenu_short == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000830 s:bmenu_items[num] = munge
831 cmd = 'an ' .. g:bmenu_priority .. '.' .. hash .. ' &Buffers.' .. munge
Bram Moolenaar071d4272004-06-13 20:20:40 +0000832 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000833 var menu_name = s:BMHash2(munge) .. munge
834 s:bmenu_items[num] = menu_name
835 cmd = 'an ' .. g:bmenu_priority .. '.' .. hash .. '.' .. hash .. ' &Buffers.' .. menu_name
Bram Moolenaar071d4272004-06-13 20:20:40 +0000836 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000837 exe cmd .. ' :confirm b' .. num .. '<CR>'
838enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000839
840" Truncate a long path to fit it in a menu item.
841if !exists("g:bmenu_max_pathlen")
842 let g:bmenu_max_pathlen = 35
843endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000844
845def s:BMTruncName(fname: string): string
846 var name = fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000847 if g:bmenu_max_pathlen < 5
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000848 name = ""
Bram Moolenaar071d4272004-06-13 20:20:40 +0000849 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000850 var len = strlen(name)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000851 if len > g:bmenu_max_pathlen
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000852 var amountl = (g:bmenu_max_pathlen / 2) - 2
853 var amountr = g:bmenu_max_pathlen - amountl - 3
854 var pattern = '^\(.\{,' .. amountl .. '}\).\{-}\(.\{,' .. amountr .. '}\)$'
855 var left = substitute(name, pattern, '\1', '')
856 var right = substitute(name, pattern, '\2', '')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000857 if strlen(left) + strlen(right) < len
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000858 name = left .. '...' .. right
Bram Moolenaar071d4272004-06-13 20:20:40 +0000859 endif
860 endif
861 endif
862 return name
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000863enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000864
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000865def s:BMMunge(fname: string, bnum: number): string
866 var name = fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000867 if name == ''
868 if !exists("g:menutrans_no_file")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000869 g:menutrans_no_file = "[No Name]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000870 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000871 name = g:menutrans_no_file
Bram Moolenaar071d4272004-06-13 20:20:40 +0000872 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000873 name = fnamemodify(name, ':p:~')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000874 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000875 # detach file name and separate it out:
876 var name2 = fnamemodify(name, ':t')
877 if bnum >= 0
878 name2 = name2 .. ' (' .. bnum .. ')'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000879 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000880 name = name2 .. "\t" .. s:BMTruncName(fnamemodify(name, ':h'))
881 name = escape(name, "\\. \t|")
882 name = substitute(name, "&", "&&", "g")
883 name = substitute(name, "\n", "^@", "g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000884 return name
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000885enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000886
887" When just starting Vim, load the buffer menu later
888if has("vim_starting")
889 augroup LoadBufferMenu
890 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
891 au VimEnter * au! LoadBufferMenu
892 augroup END
893else
894 call <SID>BMShow()
895endif
896
897endif " !exists("no_buffers_menu")
898
899" Window menu
900an 70.300 &Window.&New<Tab>^Wn <C-W>n
901an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
902an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
903an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
Bram Moolenaar314dd792019-02-03 15:27:20 +0100904an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
905if !exists("*MenuExplOpen")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000906 def MenuExplOpen()
Bram Moolenaar314dd792019-02-03 15:27:20 +0100907 if @% == ""
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000908 :20vsp .
Bram Moolenaar314dd792019-02-03 15:27:20 +0100909 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000910 exe ":20vsp " .. fnameescape(expand("%:p:h"))
Bram Moolenaar314dd792019-02-03 15:27:20 +0100911 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000912 enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000913endif
914an 70.335 &Window.-SEP1- <Nop>
915an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
916an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
917an 70.350 &Window.-SEP2- <Nop>
918an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
919an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
Bram Moolenaar214641f2017-03-05 17:04:09 +0100920an 70.355 &Window.Move\ &To.&Left\ Side<Tab>^WH <C-W>H
921an 70.355 &Window.Move\ &To.&Right\ Side<Tab>^WL <C-W>L
Bram Moolenaar071d4272004-06-13 20:20:40 +0000922an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
923an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
924an 70.365 &Window.-SEP3- <Nop>
925an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
926an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
927an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
928an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
929an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
930
931" The popup menu
932an 1.10 PopUp.&Undo u
933an 1.15 PopUp.-SEP1- <Nop>
934vnoremenu 1.20 PopUp.Cu&t "+x
935vnoremenu 1.30 PopUp.&Copy "+y
936cnoremenu 1.30 PopUp.&Copy <C-Y>
937nnoremenu 1.40 PopUp.&Paste "+gP
938cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000939exe 'vnoremenu <script> 1.40 PopUp.&Paste ' .. paste#paste_cmd['v']
940exe 'inoremenu <script> 1.40 PopUp.&Paste ' .. paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000941vnoremenu 1.50 PopUp.&Delete x
942an 1.55 PopUp.-SEP2- <Nop>
943vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000944
945nnoremenu 1.70 PopUp.Select\ &Word vaw
946onoremenu 1.70 PopUp.Select\ &Word aw
947vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
948inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
949cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
950
951nnoremenu 1.73 PopUp.Select\ &Sentence vas
952onoremenu 1.73 PopUp.Select\ &Sentence as
953vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
954inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
955cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
956
957nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
958onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
959vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
960inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
961cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
962
963nnoremenu 1.80 PopUp.Select\ &Line V
964onoremenu 1.80 PopUp.Select\ &Line <C-C>V
965vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
966inoremenu 1.80 PopUp.Select\ &Line <C-O>V
967cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
968
969nnoremenu 1.90 PopUp.Select\ &Block <C-V>
970onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
971vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
972inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
973cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
974
Bram Moolenaar071d4272004-06-13 20:20:40 +0000975noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
976inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
977cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
978
Bram Moolenaar45360022005-07-21 21:08:21 +0000979if has("spell")
980 " Spell suggestions in the popup menu. Note that this will slow down the
981 " appearance of the menu!
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000982 def s:SpellPopup()
Bram Moolenaar45360022005-07-21 21:08:21 +0000983 if exists("s:changeitem") && s:changeitem != ''
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000984 call s:SpellDel()
Bram Moolenaar45360022005-07-21 21:08:21 +0000985 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000986
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000987 # Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000988 if !&spell || &spelllang == ''
989 return
990 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000991
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000992 var curcol = col('.')
993 var w: string
994 var a: string
995 [w, a] = spellbadword()
996 if col('.') > curcol # don't use word after the cursor
997 w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +0000998 endif
999 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001000 if a == 'caps'
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001001 s:suglist = [substitute(w, '.*', '\u&', '')]
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001002 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001003 s:suglist = spellsuggest(w, 10)
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001004 endif
Bram Moolenaar62292582010-07-10 16:36:59 +02001005 if len(s:suglist) > 0
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001006 if !exists("g:menutrans_spell_change_ARG_to")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001007 g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001008 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001009 s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .'))
1010 s:fromword = w
1011 var pri = 1
Bram Moolenaar45360022005-07-21 21:08:21 +00001012 for sug in s:suglist
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001013 exe 'anoremenu 1.5.' .. pri .. ' PopUp.' .. s:changeitem .. '.' .. escape(sug, ' .')
1014 \ .. ' :call <SID>SpellReplace(' .. pri .. ')<CR>'
1015 pri += 1
Bram Moolenaar45360022005-07-21 21:08:21 +00001016 endfor
1017
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001018 if !exists("g:menutrans_spell_add_ARG_to_word_list")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001019 g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001020 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001021 s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .'))
1022 exe 'anoremenu 1.6 PopUp.' .. s:additem .. ' :spellgood ' .. w .. '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001023
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001024 if !exists("g:menutrans_spell_ignore_ARG")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001025 g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001026 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001027 s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .'))
1028 exe 'anoremenu 1.7 PopUp.' .. s:ignoreitem .. ' :spellgood! ' .. w .. '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001029
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001030 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar45360022005-07-21 21:08:21 +00001031 endif
1032 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001033 call cursor(0, curcol) # put the cursor back where it was
1034 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001035
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001036 def s:SpellReplace(n: number)
1037 var l = getline('.')
1038 # Move the cursor to the start of the word.
Bram Moolenaar62292582010-07-10 16:36:59 +02001039 call spellbadword()
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001040 call setline('.', strpart(l, 0, col('.') - 1) .. s:suglist[n - 1]
1041 \ .. strpart(l, col('.') + len(s:fromword) - 1))
1042 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001043
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001044 def s:SpellDel()
1045 exe "aunmenu PopUp." .. s:changeitem
1046 exe "aunmenu PopUp." .. s:additem
1047 exe "aunmenu PopUp." .. s:ignoreitem
Bram Moolenaar45360022005-07-21 21:08:21 +00001048 aunmenu PopUp.-SpellSep-
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001049 s:changeitem = ''
1050 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001051
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001052 augroup SpellPopupMenu
1053 au! MenuPopup * call <SID>SpellPopup()
1054 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +00001055endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00001056
1057" The GUI toolbar (for MS-Windows and GTK)
1058if has("toolbar")
1059 an 1.10 ToolBar.Open :browse confirm e<CR>
1060 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
1061 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
1062
1063 if has("printer")
1064 an 1.40 ToolBar.Print :hardcopy<CR>
1065 vunmenu ToolBar.Print
1066 vnoremenu ToolBar.Print :hardcopy<CR>
1067 elseif has("unix")
1068 an 1.40 ToolBar.Print :w !lpr<CR>
1069 vunmenu ToolBar.Print
1070 vnoremenu ToolBar.Print :w !lpr<CR>
1071 endif
1072
1073 an 1.45 ToolBar.-sep1- <Nop>
1074 an 1.50 ToolBar.Undo u
1075 an 1.60 ToolBar.Redo <C-R>
1076
1077 an 1.65 ToolBar.-sep2- <Nop>
1078 vnoremenu 1.70 ToolBar.Cut "+x
1079 vnoremenu 1.80 ToolBar.Copy "+y
1080 cnoremenu 1.80 ToolBar.Copy <C-Y>
1081 nnoremenu 1.90 ToolBar.Paste "+gP
1082 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001083 exe 'vnoremenu <script> ToolBar.Paste ' .. paste#paste_cmd['v']
1084 exe 'inoremenu <script> ToolBar.Paste ' .. paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +00001085
1086 if !has("gui_athena")
1087 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001088 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001089 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001090 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001091 an 1.110 ToolBar.FindNext n
1092 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +00001093 endif
1094
Bram Moolenaar071d4272004-06-13 20:20:40 +00001095 an 1.215 ToolBar.-sep5- <Nop>
1096 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
1097 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
1098 an 1.240 ToolBar.RunScript :browse so<CR>
1099
1100 an 1.245 ToolBar.-sep6- <Nop>
1101 an 1.250 ToolBar.Make :make<CR>
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001102 an 1.270 ToolBar.RunCtags :exe "!" .. g:ctags_command<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001103 an 1.280 ToolBar.TagJump g<C-]>
1104
1105 an 1.295 ToolBar.-sep7- <Nop>
1106 an 1.300 ToolBar.Help :help<CR>
1107 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1108
1109" Only set the tooltips here if not done in a language menu file
1110if exists("*Do_toolbar_tmenu")
1111 call Do_toolbar_tmenu()
1112else
1113 let did_toolbar_tmenu = 1
1114 tmenu ToolBar.Open Open file
1115 tmenu ToolBar.Save Save current file
1116 tmenu ToolBar.SaveAll Save all files
1117 tmenu ToolBar.Print Print
1118 tmenu ToolBar.Undo Undo
1119 tmenu ToolBar.Redo Redo
1120 tmenu ToolBar.Cut Cut to clipboard
1121 tmenu ToolBar.Copy Copy to clipboard
1122 tmenu ToolBar.Paste Paste from Clipboard
1123 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001124 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001125 tmenu ToolBar.FindNext Find Next
1126 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001127 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001128 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001129 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001130 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001131 tmenu ToolBar.Make Make current project (:make)
1132 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001133 tmenu ToolBar.TagJump Jump to tag under cursor
1134 tmenu ToolBar.Help Vim Help
1135 tmenu ToolBar.FindHelp Search Vim Help
1136endif
1137
1138" Select a session to load; default to current session name if present
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001139def s:LoadVimSesn()
1140 var name: string
Bram Moolenaar071d4272004-06-13 20:20:40 +00001141 if strlen(v:this_session) > 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001142 name = fnameescape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001143 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001144 name = "Session.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001145 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001146 execute "browse so " .. name
1147enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001148
1149" Select a session to save; default to current session name if present
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001150def s:SaveVimSesn()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001151 if strlen(v:this_session) == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001152 v:this_session = "Session.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001153 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001154 execute "browse mksession! " .. fnameescape(v:this_session)
1155enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001156
1157endif
1158
1159endif " !exists("did_install_default_menus")
1160
1161" Define these items always, so that syntax can be switched on when it wasn't.
1162" But skip them when the Syntax menu was disabled by the user.
1163if !exists("did_install_syntax_menu")
1164 an 50.212 &Syntax.&Manual :syn manual<CR>
1165 an 50.214 &Syntax.A&utomatic :syn on<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001166 an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001167 if !exists("*s:SynOnOff")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001168 def s:SynOnOff()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001169 if has("syntax_items")
1170 syn clear
1171 else
1172 if !exists("g:syntax_on")
1173 syn manual
1174 endif
1175 set syn=ON
1176 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001177 enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001178 endif
1179endif
1180
1181
1182" Install the Syntax menu only when filetype.vim has been loaded or when
1183" manual syntax highlighting is enabled.
1184" Avoid installing the Syntax menu twice.
1185if (exists("did_load_filetypes") || exists("syntax_on"))
1186 \ && !exists("did_install_syntax_menu")
1187 let did_install_syntax_menu = 1
1188
1189" Skip setting up the individual syntax selection menus unless
1190" do_syntax_sel_menu is defined (it takes quite a bit of time).
1191if exists("do_syntax_sel_menu")
1192 runtime! synmenu.vim
1193else
Bram Moolenaar040c1fe2017-11-09 19:45:48 +01001194 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 +00001195 an 50.195 &Syntax.-SEP1- <Nop>
1196endif
1197
1198an 50.210 &Syntax.&Off :syn off<CR>
1199an 50.700 &Syntax.-SEP3- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001200an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1201an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001202an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1203
Bram Moolenaar9da17d72022-02-09 21:50:44 +00001204" Uncomment the next line to compile the functions early to find any mistakes
1205" defcompile
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001206
Bram Moolenaar071d4272004-06-13 20:20:40 +00001207endif " !exists("did_install_syntax_menu")
1208
Bram Moolenaar071d4272004-06-13 20:20:40 +00001209" Restore the previous value of 'cpoptions'.
1210let &cpo = s:cpo_save
1211unlet s:cpo_save
1212
1213" vim: set sw=2 :