blob: afe61d637ee2bb02faf57855e5282a62f4b6d1c8 [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"
Christian Brabandte978b452023-08-13 10:33:05 +02004" Maintainer: The Vim Project <https://github.com/vim/vim>
SUN Haitao08896dd2025-06-04 21:25:31 +02005" Last Change: 2025 Jun 04
Christian Brabandte978b452023-08-13 10:33:05 +02006" Former Maintainer: Bram Moolenaar <Bram@vim.org>
Bram Moolenaar071d4272004-06-13 20:20:40 +00007
8" Note that ":an" (short for ":anoremenu") is often used to make a menu work
9" in all modes and avoid side effects from mappings defined by the user.
10
11" Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise
12" <CR> would not be recognized. See ":help 'cpoptions'".
13let s:cpo_save = &cpo
14set cpo&vim
15
16" Avoid installing the menus twice
17if !exists("did_install_default_menus")
18let did_install_default_menus = 1
19
20
21if exists("v:lang") || &langmenu != ""
22 " Try to find a menu translation file for the current language.
23 if &langmenu != ""
24 if &langmenu =~ "none"
25 let s:lang = ""
26 else
27 let s:lang = &langmenu
28 endif
29 else
30 let s:lang = v:lang
31 endif
32 " A language name must be at least two characters, don't accept "C"
Bram Moolenaar5be4cee2019-09-27 19:34:08 +020033 " Also skip "en_US" to avoid picking up "en_gb" translations.
34 if strlen(s:lang) > 1 && s:lang !~? '^en_us'
Bram Moolenaar071d4272004-06-13 20:20:40 +000035 " When the language does not include the charset add 'encoding'
36 if s:lang =~ '^\a\a$\|^\a\a_\a\a$'
Bram Moolenaar3e79c972022-02-04 19:48:06 +000037 let s:lang = s:lang .. '.' .. &enc
Bram Moolenaar071d4272004-06-13 20:20:40 +000038 endif
39
40 " We always use a lowercase name.
41 " Change "iso-8859" to "iso_8859" and "iso8859" to "iso_8859", some
42 " systems appear to use this.
43 " Change spaces to underscores.
44 let s:lang = substitute(tolower(s:lang), '\.iso-', ".iso_", "")
45 let s:lang = substitute(s:lang, '\.iso8859', ".iso_8859", "")
46 let s:lang = substitute(s:lang, " ", "_", "g")
47 " Remove "@euro", otherwise "LC_ALL=de_DE@euro gvim" will show English menus
48 let s:lang = substitute(s:lang, "@euro", "", "")
49 " Change "iso_8859-1" and "iso_8859-15" to "latin1", we always use the
50 " same menu file for them.
51 let s:lang = substitute(s:lang, 'iso_8859-15\=$', "latin1", "")
52 menutrans clear
Bram Moolenaar3e79c972022-02-04 19:48:06 +000053 exe "runtime! lang/menu_" .. s:lang .. ".vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000054
55 if !exists("did_menu_trans")
56 " There is no exact match, try matching with a wildcard added
57 " (e.g. find menu_de_de.iso_8859-1.vim if s:lang == de_DE).
58 let s:lang = substitute(s:lang, '\.[^.]*', "", "")
Bram Moolenaar3e79c972022-02-04 19:48:06 +000059 exe "runtime! lang/menu_" .. s:lang .. "[^a-z]*vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000060
Bram Moolenaar68f1b1b2018-07-23 05:10:14 +020061 if !exists("did_menu_trans") && s:lang =~ '_'
62 " If the language includes a region try matching without that region.
63 " (e.g. find menu_de.vim if s:lang == de_DE).
64 let langonly = substitute(s:lang, '_.*', "", "")
Bram Moolenaar3e79c972022-02-04 19:48:06 +000065 exe "runtime! lang/menu_" .. langonly .. "[^a-z]*vim"
Bram Moolenaar68f1b1b2018-07-23 05:10:14 +020066 endif
67
Bram Moolenaare2cc9702005-03-15 22:43:58 +000068 if !exists("did_menu_trans") && strlen($LANG) > 1 && s:lang !~ '^en_us'
Bram Moolenaar071d4272004-06-13 20:20:40 +000069 " On windows locale names are complicated, try using $LANG, it might
Bram Moolenaare2cc9702005-03-15 22:43:58 +000070 " have been set by set_init_1(). But don't do this for "en" or "en_us".
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000071 " But don't match "slovak" when $LANG is "sl".
Bram Moolenaar3e79c972022-02-04 19:48:06 +000072 exe "runtime! lang/menu_" .. tolower($LANG) .. "[^a-z]*vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +000073 endif
74 endif
75 endif
76endif
77
78
79" Help menu
80an 9999.10 &Help.&Overview<Tab><F1> :help<CR>
81an 9999.20 &Help.&User\ Manual :help usr_toc<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +010082an 9999.30 &Help.&How-To\ Links :help how-to<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +000083an <silent> 9999.40 &Help.&Find\.\.\. :call <SID>Helpfind()<CR>
84an 9999.45 &Help.-sep1- <Nop>
85an 9999.50 &Help.&Credits :help credits<CR>
86an 9999.60 &Help.Co&pying :help copying<CR>
87an 9999.70 &Help.&Sponsor/Register :help sponsor<CR>
88an 9999.70 &Help.O&rphans :help kcc<CR>
89an 9999.75 &Help.-sep2- <Nop>
90an 9999.80 &Help.&Version :version<CR>
91an 9999.90 &Help.&About :intro<CR>
92
Bram Moolenaarb45cd362020-09-28 21:41:49 +020093if exists(':tlmenu')
94 tlnoremenu 9999.10 &Help.&Overview<Tab><F1> <C-W>:help<CR>
95 tlnoremenu 9999.20 &Help.&User\ Manual <C-W>:help usr_toc<CR>
96 tlnoremenu 9999.30 &Help.&How-To\ Links <C-W>:help how-to<CR>
97 tlnoremenu <silent> 9999.40 &Help.&Find\.\.\. <C-W>:call <SID>Helpfind()<CR>
98 tlnoremenu 9999.45 &Help.-sep1- <Nop>
99 tlnoremenu 9999.50 &Help.&Credits <C-W>:help credits<CR>
100 tlnoremenu 9999.60 &Help.Co&pying <C-W>:help copying<CR>
101 tlnoremenu 9999.70 &Help.&Sponsor/Register <C-W>:help sponsor<CR>
102 tlnoremenu 9999.70 &Help.O&rphans <C-W>:help kcc<CR>
103 tlnoremenu 9999.75 &Help.-sep2- <Nop>
104 tlnoremenu 9999.80 &Help.&Version <C-W>:version<CR>
105 tlnoremenu 9999.90 &Help.&About <C-W>:intro<CR>
106endif
107
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000108def s:Helpfind()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000109 if !exists("g:menutrans_help_dialog")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000110 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 +0000111 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000112 var h = inputdialog(g:menutrans_help_dialog)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000113 if h != ""
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000114 v:errmsg = ""
115 silent! exe "help " .. h
Bram Moolenaar071d4272004-06-13 20:20:40 +0000116 if v:errmsg != ""
117 echo v:errmsg
118 endif
119 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000120enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121
122" File menu
123an 10.310 &File.&Open\.\.\.<Tab>:e :browse confirm e<CR>
124an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp :browse sp<CR>
Christian Brabandte059fae2023-08-23 17:07:55 +0100125an 10.320 &File.Open\ &Tab\.\.\.<Tab>:tabnew :browse tabnew<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000126an 10.325 &File.&New<Tab>:enew :confirm enew<CR>
127an <silent> 10.330 &File.&Close<Tab>:close
Bram Moolenaarcab49df2011-03-22 17:40:10 +0100128 \ :if winheight(2) < 0 && tabpagewinnr(2) == 0 <Bar>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000129 \ confirm enew <Bar>
130 \ else <Bar>
131 \ confirm close <Bar>
132 \ endif<CR>
Yee Cheng Chin15b314f2022-10-09 18:53:32 +0100133tln <silent> 10.330 &File.&Close<Tab>:close
134 \ <C-W>:if winheight(2) < 0 && tabpagewinnr(2) == 0 <Bar>
135 \ confirm enew <Bar>
136 \ else <Bar>
137 \ confirm close <Bar>
138 \ endif<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139an 10.335 &File.-SEP1- <Nop>
140an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
141an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR>
142
143if has("diff")
144 an 10.400 &File.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100145 an 10.410 &File.Split\ &Diff\ With\.\.\. :browse vert diffsplit<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000146 an 10.420 &File.Split\ Patched\ &By\.\.\. :browse vert diffpatch<CR>
147endif
148
149if has("printer")
150 an 10.500 &File.-SEP3- <Nop>
151 an 10.510 &File.&Print :hardcopy<CR>
152 vunmenu &File.&Print
153 vnoremenu &File.&Print :hardcopy<CR>
154elseif has("unix")
155 an 10.500 &File.-SEP3- <Nop>
156 an 10.510 &File.&Print :w !lpr<CR>
157 vunmenu &File.&Print
158 vnoremenu &File.&Print :w !lpr<CR>
159endif
160an 10.600 &File.-SEP4- <Nop>
161an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR>
162an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR>
163
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000164def s:SelectAll()
165 exe "norm! gg" .. (&slm == "" ? "VG" : "gH\<C-O>G")
166enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000167
168" Edit menu
169an 20.310 &Edit.&Undo<Tab>u u
170an 20.320 &Edit.&Redo<Tab>^R <C-R>
171an 20.330 &Edit.Rep&eat<Tab>\. .
172
173an 20.335 &Edit.-SEP1- <Nop>
174vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
175vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
176cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100177if exists(':tlmenu')
178 tlnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-W>:<C-Y><CR>
179endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000180nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
181cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
Bram Moolenaar4c5d8152018-10-19 22:36:53 +0200182if exists(':tlmenu')
183 tlnoremenu &Edit.&Paste<Tab>"+gP <C-W>"+
184endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000185exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' .. paste#paste_cmd['v']
186exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' .. paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000187nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
188inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
189nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
190inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100191if has("win32")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000192 vnoremenu 20.390 &Edit.&Delete<Tab>x x
193endif
194noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
195inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
196cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
197
198an 20.405 &Edit.-SEP2- <Nop>
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100199if has("win32") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000200 an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
201 vunmenu &Edit.&Find\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000202 vnoremenu <silent> &Edit.&Find\.\.\. y:promptfind <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000203 an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
204 vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000205 vnoremenu <silent> &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000206else
207 an 20.410 &Edit.&Find<Tab>/ /
208 an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
209 vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
210 vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
211endif
212
213an 20.425 &Edit.-SEP3- <Nop>
214an 20.430 &Edit.Settings\ &Window :options<CR>
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000215an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR>
216
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000217def s:EditVimrc()
218 var fname: string
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000219 if $MYVIMRC != ''
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000220 fname = $MYVIMRC
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200221 elseif has("win32")
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000222 if $HOME != ''
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000223 fname = $HOME .. "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000224 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000225 fname = $VIM .. "/_vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000226 endif
227 elseif has("amiga")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000228 fname = "s:.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000229 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000230 fname = $HOME .. "/.vimrc"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000231 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000232 fname = fnameescape(fname)
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000233 if &mod
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000234 exe "split " .. fname
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000235 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000236 exe "edit " .. fname
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000237 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000238enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000239
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000240def s:FixFText(): string
241 # Fix text in nameless register to be used with :promptfind.
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000242 return substitute(@", "[\r\n]", '\\n', 'g')
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000243enddef
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000244
Bram Moolenaar071d4272004-06-13 20:20:40 +0000245" Edit/Global Settings
246an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100247an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignoring\ Case<Tab>:set\ ic! :set ic! ic?<CR>
248an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showing\ Matched\ Pairs<Tab>:set\ sm! :set sm! sm?<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000249
Bram Moolenaar214641f2017-03-05 17:04:09 +0100250an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 1\ :set so=1<CR>
251an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 2\ :set so=2<CR>
252an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 3\ :set so=3<CR>
253an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 4\ :set so=4<CR>
254an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 5\ :set so=5<CR>
255an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 7\ :set so=7<CR>
256an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 10\ :set so=10<CR>
257an 20.440.120 &Edit.&Global\ Settings.&Context\ Lines.\ 100\ :set so=100<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000258
259an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
260an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100261an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ Mode :set ve=insert<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000262an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
263an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
264an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100265an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatibility<Tab>:set\ cp! :set cp!<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000266an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
267an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
268"
269" GUI options
270an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
271an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
272an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
273an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
274an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
275
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000276def s:SearchP()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000277 if !exists("g:menutrans_path_dialog")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000278 g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
Bram Moolenaar071d4272004-06-13 20:20:40 +0000279 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000280 var n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000281 if n != ""
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000282 &path = substitute(n, ' ', '\\ ', 'g')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000283 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000284enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000285
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000286def s:TagFiles()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000287 if !exists("g:menutrans_tags_dialog")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000288 g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
Bram Moolenaar071d4272004-06-13 20:20:40 +0000289 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000290 var n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000291 if n != ""
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000292 &tags = substitute(n, ' ', '\\ ', 'g')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000293 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000294enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000295
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000296def s:ToggleGuiOption(option: string)
297 # If a:option is already set in guioptions, then we want to remove it
298 if match(&guioptions, "\\C" .. option) > -1
299 exec "set go-=" .. option
300 else
301 exec "set go+=" .. option
302 endif
303enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000304
305" Edit/File Settings
306
307" Boolean options
308an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100309an 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 +0000310an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100311an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrapping<Tab>:set\ wrap! :set wrap! wrap?<CR>
312an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rapping\ at\ Word<Tab>:set\ lbr! :set lbr! lbr?<CR>
313an 20.440.160 &Edit.F&ile\ Settings.Toggle\ Tab\ &Expanding<Tab>:set\ et! :set et! et?<CR>
314an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &Auto\ Indenting<Tab>:set\ ai! :set ai! ai?<CR>
315an 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 +0000316
317" other options
318an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
319an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
320an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
321an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
322an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
323an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
324an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
325
326an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
327an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
328an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
329an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
330an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
331an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
332
333an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
334an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000335
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000336def s:TextWidth()
337 if !exists("g:menutrans_textwidth_dialog")
338 g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
339 endif
340 var n = inputdialog(g:menutrans_textwidth_dialog, &tw .. '')
341 if n != ""
342 # Remove leading zeros to avoid it being used as an octal number.
343 # But keep a zero by itself.
344 var tw = substitute(n, "^0*", "", "")
Bram Moolenaar8b336a62022-11-27 15:51:46 +0000345 &tw = tw == '' ? 0 : str2nr(tw)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000346 endif
347enddef
348
349def s:FileFormat()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000350 if !exists("g:menutrans_fileformat_dialog")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000351 g:menutrans_fileformat_dialog = "Select format for writing the file"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000352 endif
353 if !exists("g:menutrans_fileformat_choices")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000354 g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000355 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000356 var def_choice: number
Bram Moolenaar071d4272004-06-13 20:20:40 +0000357 if &ff == "dos"
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000358 def_choice = 2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000359 elseif &ff == "mac"
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000360 def_choice = 3
Bram Moolenaar071d4272004-06-13 20:20:40 +0000361 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000362 def_choice = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000363 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000364 var n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def_choice, "Question")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000365 if n == 1
366 set ff=unix
367 elseif n == 2
368 set ff=dos
369 elseif n == 3
370 set ff=mac
371 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000372enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000373
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100374let s:did_setup_color_schemes = 0
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200375
Bram Moolenaar071d4272004-06-13 20:20:40 +0000376" Setup the Edit.Color Scheme submenu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000377def s:SetupColorSchemes()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100378 if s:did_setup_color_schemes
379 return
380 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000381 s:did_setup_color_schemes = 1
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200382
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000383 var n = globpath(&runtimepath, "colors/*.vim", 1, 1)
384 n += globpath(&packpath, "pack/*/start/*/colors/*.vim", 1, 1)
385 n += globpath(&packpath, "pack/*/opt/*/colors/*.vim", 1, 1)
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200386
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000387 # Ignore case for VMS and windows, sort on name
Bram Moolenaar2007dd42022-02-23 13:17:47 +0000388 var names = sort(map(n, 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 'i')
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200389
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000390 # define all the submenu entries
391 var idx = 100
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100392 for name in names
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000393 exe "an 20.450." .. idx .. ' &Edit.C&olor\ Scheme.' .. name .. " :colors " .. name .. "<CR>"
394 idx += 10
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100395 endfor
396 silent! aunmenu &Edit.Show\ C&olor\ Schemes\ in\ Menu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000397enddef
398
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100399if exists("do_no_lazyload_menus")
400 call s:SetupColorSchemes()
401else
402 an <silent> 20.450 &Edit.Show\ C&olor\ Schemes\ in\ Menu :call <SID>SetupColorSchemes()<CR>
403endif
Bram Moolenaarc5604bc2010-07-17 15:20:30 +0200404
Bram Moolenaar071d4272004-06-13 20:20:40 +0000405
406" Setup the Edit.Keymap submenu
407if has("keymap")
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100408 let s:did_setup_keymaps = 0
409
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000410 def s:SetupKeymaps()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100411 if s:did_setup_keymaps
412 return
413 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000414 s:did_setup_keymaps = 1
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100415
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000416 var names = globpath(&runtimepath, "keymap/*.vim", 1, 1)
417 if !empty(names)
418 var idx = 100
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100419 an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000420 for name in names
421 # Ignore case for VMS and windows
422 var mapname = substitute(name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
423 exe "an 20.460." .. idx .. ' &Edit.&Keymap.' .. mapname .. " :set keymap=" .. mapname .. "<CR>"
424 idx += 10
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100425 endfor
426 endif
427 silent! aunmenu &Edit.Show\ &Keymaps\ in\ Menu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000428 enddef
429
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100430 if exists("do_no_lazyload_menus")
431 call s:SetupKeymaps()
432 else
433 an <silent> 20.460 &Edit.Show\ &Keymaps\ in\ Menu :call <SID>SetupKeymaps()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000434 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000435endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000436
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100437if has("win32") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000438 an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
439endif
440
441" Programming menu
442if !exists("g:ctags_command")
443 if has("vms")
Bram Moolenaard675e2c2007-01-09 14:09:25 +0000444 let g:ctags_command = "mc vim:ctags *.*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000445 else
446 let g:ctags_command = "ctags -R ."
447 endif
448endif
449
Bram Moolenaar214641f2017-03-05 17:04:09 +0100450an 40.300 &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
451vunmenu &Tools.&Jump\ to\ This\ Tag<Tab>g^]
452vnoremenu &Tools.&Jump\ to\ This\ Tag<Tab>g^] g<C-]>
453an 40.310 &Tools.Jump\ &Back<Tab>^T <C-T>
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000454an 40.320 &Tools.Build\ &Tags\ File :exe "!" .. g:ctags_command<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000455
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000456if has("folding") || has("spell")
457 an 40.330 &Tools.-SEP1- <Nop>
458endif
459
Bram Moolenaarf3681cc2005-06-08 22:03:13 +0000460" Tools.Spelling Menu
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000461if has("spell")
462 an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR>
463 an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100464 an 40.335.130 &Tools.&Spelling.To\ &Next\ Error<Tab>]s ]s
465 an 40.335.130 &Tools.&Spelling.To\ &Previous\ Error<Tab>[s [s
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000466 an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z= z=
Bram Moolenaar214641f2017-03-05 17:04:09 +0100467 an 40.335.150 &Tools.&Spelling.&Repeat\ Correction<Tab>:spellrepall :spellrepall<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000468 an 40.335.200 &Tools.&Spelling.-SEP1- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100469 an 40.335.210 &Tools.&Spelling.Set\ Language\ to\ "en" :set spl=en spell<CR>
470 an 40.335.220 &Tools.&Spelling.Set\ Language\ to\ "en_au" :set spl=en_au spell<CR>
471 an 40.335.230 &Tools.&Spelling.Set\ Language\ to\ "en_ca" :set spl=en_ca spell<CR>
472 an 40.335.240 &Tools.&Spelling.Set\ Language\ to\ "en_gb" :set spl=en_gb spell<CR>
473 an 40.335.250 &Tools.&Spelling.Set\ Language\ to\ "en_nz" :set spl=en_nz spell<CR>
474 an 40.335.260 &Tools.&Spelling.Set\ Language\ to\ "en_us" :set spl=en_us spell<CR>
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000475 an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR>
476
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200477 let s:undo_spelllang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
Bram Moolenaar502e9172022-11-27 16:18:33 +0000478 def s:SpellLang(encChanged = false)
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200479 for cmd in s:undo_spelllang
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000480 exe "silent! " .. cmd
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000481 endfor
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000482 s:undo_spelllang = []
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000483
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000484 var enc = &enc == "iso-8859-15" ? "latin1" : &enc
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000485
Bram Moolenaar502e9172022-11-27 16:18:33 +0000486 # Reset g:menutrans_set_lang_to when called for the EncodingChanged event.
487 if !exists("g:menutrans_set_lang_to") || encChanged
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000488 g:menutrans_set_lang_to = 'Set Language to'
Bram Moolenaarf3408e72012-10-21 01:21:59 +0200489 endif
490
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000491 var found = 0
492 var _nm = ''
493 var names = globpath(&runtimepath, "spell/*." .. enc .. ".spl", 1, 1)
494 if !empty(names)
495 var n = 300
496 for f in names
497 var nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000498 if nm != "en" && nm !~ '/'
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000499 _nm = nm
500 found += 1
501 var menuname = '&Tools.&Spelling.' .. escape(g:menutrans_set_lang_to, "\\. \t|") .. '\ "' .. nm .. '"'
502 exe 'an 40.335.' .. n .. ' ' .. menuname .. ' :set spl=' .. nm .. ' spell<CR>'
503 s:undo_spelllang += ['aun ' .. menuname]
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000504 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000505 n += 10
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000506 endfor
507 endif
508 if found == 0
509 echomsg "Could not find other spell files"
510 elseif found == 1
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000511 echomsg "Found spell file " .. _nm
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000512 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000513 echomsg "Found " .. found .. " more spell files"
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000514 endif
Bram Moolenaar502e9172022-11-27 16:18:33 +0000515
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000516 # Need to redo this when 'encoding' is changed.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000517 augroup spellmenu
Bram Moolenaar502e9172022-11-27 16:18:33 +0000518 au! EncodingChanged * call SpellLang(true)
Bram Moolenaar5a8684e2005-07-30 22:43:24 +0000519 augroup END
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000520 enddef
Bram Moolenaar82cf9b62005-06-07 21:09:25 +0000521endif
522
Bram Moolenaar071d4272004-06-13 20:20:40 +0000523" Tools.Fold Menu
524if has("folding")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000525 " open close folds
Bram Moolenaar214641f2017-03-05 17:04:09 +0100526 an 40.340.110 &Tools.&Folding.&Enable/Disable\ Folds<Tab>zi zi
Bram Moolenaar071d4272004-06-13 20:20:40 +0000527 an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
Bram Moolenaar214641f2017-03-05 17:04:09 +0100528 an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx zMzx
529 inoremenu 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ Only<Tab>zMzx <C-O>zM<C-O>zx
530 an 40.340.130 &Tools.&Folding.C&lose\ More\ Folds<Tab>zm zm
531 an 40.340.140 &Tools.&Folding.&Close\ All\ Folds<Tab>zM zM
532 an 40.340.150 &Tools.&Folding.O&pen\ More\ Folds<Tab>zr zr
Bram Moolenaar3df01732017-02-17 22:47:16 +0100533 an 40.340.160 &Tools.&Folding.&Open\ All\ Folds<Tab>zR zR
Bram Moolenaar071d4272004-06-13 20:20:40 +0000534 " fold method
535 an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
536 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
537 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
538 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
539 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
540 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
541 an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
542 " create and delete folds
543 vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
544 an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
545 an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
546 " moving around in folds
547 an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100548 an 40.340.310.10 &Tools.&Folding.Fold\ Col&umn\ Width.\ &0\ :set fdc=0<CR>
549 an 40.340.310.20 &Tools.&Folding.Fold\ Col&umn\ Width.\ &2\ :set fdc=2<CR>
550 an 40.340.310.30 &Tools.&Folding.Fold\ Col&umn\ Width.\ &3\ :set fdc=3<CR>
551 an 40.340.310.40 &Tools.&Folding.Fold\ Col&umn\ Width.\ &4\ :set fdc=4<CR>
552 an 40.340.310.50 &Tools.&Folding.Fold\ Col&umn\ Width.\ &5\ :set fdc=5<CR>
553 an 40.340.310.60 &Tools.&Folding.Fold\ Col&umn\ Width.\ &6\ :set fdc=6<CR>
554 an 40.340.310.70 &Tools.&Folding.Fold\ Col&umn\ Width.\ &7\ :set fdc=7<CR>
555 an 40.340.310.80 &Tools.&Folding.Fold\ Col&umn\ Width.\ &8\ :set fdc=8<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000556endif " has folding
557
558if has("diff")
559 an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
560 an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
561 vunmenu &Tools.&Diff.&Get\ Block
562 vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
563 an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
564 vunmenu &Tools.&Diff.&Put\ Block
565 vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
566endif
567
568an 40.358 &Tools.-SEP2- <Nop>
569an 40.360 &Tools.&Make<Tab>:make :make<CR>
570an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
571an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
572an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
573an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
574an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
575an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
576an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
577an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
578an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
579
580an 40.520 &Tools.-SEP3- <Nop>
581an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
582 \ :call <SID>XxdConv()<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +0100583an <silent> 40.540 &Tools.Conve&rt\ Back<Tab>:%!xxd\ -r
Bram Moolenaar071d4272004-06-13 20:20:40 +0000584 \ :call <SID>XxdBack()<CR>
585
586" Use a function to do the conversion, so that it also works with 'insertmode'
587" set.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000588def s:XxdConv()
589 var mod = &mod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000590 if has("vms")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000591 :%!mc vim:xxd
Bram Moolenaar071d4272004-06-13 20:20:40 +0000592 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000593 s:XxdFind()
Bram Moolenaar1588bc82022-03-08 21:35:07 +0000594 exe ':%!' .. g:xxdprogram
Bram Moolenaar071d4272004-06-13 20:20:40 +0000595 endif
Bram Moolenaar1588bc82022-03-08 21:35:07 +0000596 if getline(1) =~ "^00000000:" # only if it worked
Bram Moolenaar071d4272004-06-13 20:20:40 +0000597 set ft=xxd
598 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000599 &mod = mod
600enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000601
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000602def s:XxdBack()
603 var mod = &mod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000604 if has("vms")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000605 :%!mc vim:xxd -r
Bram Moolenaar071d4272004-06-13 20:20:40 +0000606 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000607 s:XxdFind()
Bram Moolenaar1588bc82022-03-08 21:35:07 +0000608 exe ':%!' .. g:xxdprogram .. ' -r'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000609 endif
610 set ft=
Bram Moolenaarb7398fe2023-05-14 18:50:25 +0100611 if exists('#filetypedetect') && exists('#BufReadPost')
612 doautocmd filetypedetect BufReadPost
613 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000614 &mod = mod
615enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000616
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000617def s:XxdFind()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000618 if !exists("g:xxdprogram")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000619 # On the PC xxd may not be in the path but in the install directory
Bram Moolenaar42ebd062016-07-17 13:35:14 +0200620 if has("win32") && !executable("xxd")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000621 g:xxdprogram = $VIMRUNTIME .. (&shellslash ? '/' : '\') .. "xxd.exe"
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100622 if g:xxdprogram =~ ' '
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000623 g:xxdprogram = '"' .. g:xxdprogram .. '"'
Bram Moolenaar5ef1c6a2019-11-10 22:09:11 +0100624 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000625 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000626 g:xxdprogram = "xxd"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000627 endif
628 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000629enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000630
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100631let s:did_setup_compilers = 0
632
Bram Moolenaar071d4272004-06-13 20:20:40 +0000633" Setup the Tools.Compiler submenu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000634def s:SetupCompilers()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100635 if s:did_setup_compilers
636 return
Bram Moolenaar071d4272004-06-13 20:20:40 +0000637 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000638 s:did_setup_compilers = 1
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100639
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000640 var names = globpath(&runtimepath, "compiler/*.vim", 1, 1)
641 var idx = 100
642 for name in names
643 # Ignore case for VMS and windows
644 var cname = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
645 exe "an 30.440." .. idx .. ' &Tools.Se&t\ Compiler.' .. cname .. " :compiler " .. cname .. "<CR>"
646 idx += 10
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100647 endfor
648 silent! aunmenu &Tools.Show\ Compiler\ Se&ttings\ in\ Menu
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000649enddef
650
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100651if exists("do_no_lazyload_menus")
652 call s:SetupCompilers()
653else
654 an <silent> 30.440 &Tools.Show\ Compiler\ Se&ttings\ in\ Menu :call <SID>SetupCompilers()<CR>
655endif
656
657" Load ColorScheme, Compiler Setting and Keymap menus when idle.
658if !exists("do_no_lazyload_menus")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000659 def s:SetupLazyloadMenus()
660 s:SetupColorSchemes()
661 s:SetupCompilers()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100662 if has("keymap")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000663 s:SetupKeymaps()
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100664 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000665 enddef
Bram Moolenaar040c1fe2017-11-09 19:45:48 +0100666 augroup SetupLazyloadMenus
667 au!
668 au CursorHold,CursorHoldI * call <SID>SetupLazyloadMenus() | au! SetupLazyloadMenus
669 augroup END
670endif
671
Bram Moolenaar071d4272004-06-13 20:20:40 +0000672
673if !exists("no_buffers_menu")
674
675" Buffer list menu -- Setup functions & actions
676
677" wait with building the menu until after loading 'session' files. Makes
678" startup faster.
679let s:bmenu_wait = 1
680
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100681" Dictionary of buffer number to name. This helps prevent problems where a
682" buffer as renamed and we didn't keep track of that.
683let s:bmenu_items = {}
684
Bram Moolenaar071d4272004-06-13 20:20:40 +0000685if !exists("bmenu_priority")
686 let bmenu_priority = 60
687endif
688
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100689" invoked from a BufCreate or BufFilePost autocommand
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000690def s:BMAdd()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000691 if s:bmenu_wait == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000692 # when adding too many buffers, redraw in short format
Bram Moolenaar071d4272004-06-13 20:20:40 +0000693 if s:bmenu_count == &menuitems && s:bmenu_short == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000694 s:BMShow()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000695 else
SUN Haitao08896dd2025-06-04 21:25:31 +0200696 s:BMRedraw()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000697 endif
698 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000699enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000700
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100701" invoked from a BufDelete or BufFilePre autocommand
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000702def s:BMRemove()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000703 if s:bmenu_wait == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000704 var bufnum = expand("<abuf>")
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100705 if s:bmenu_items->has_key(bufnum)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000706 var menu_name = s:bmenu_items[bufnum]
707 exe 'silent! aun &Buffers.' .. menu_name
708 s:bmenu_count = s:bmenu_count - 1
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100709 unlet s:bmenu_items[bufnum]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000710 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000711 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000712enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000713
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100714" Return non-zero if buffer with number "name" / "num" is useful to add in the
715" buffer menu.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000716def s:BMCanAdd(name: string, num: number): bool
717 # no directory or unlisted buffer
718 if isdirectory(name) || !buflisted(num)
719 return false
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100720 endif
721
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000722 # no name with control characters
723 if name =~ '[\x01-\x1f]'
724 return false
Bram Moolenaarfa3b7232021-12-24 13:18:38 +0000725 endif
726
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000727 # no special buffer, such as terminal or popup
728 var buftype = getbufvar(num, '&buftype')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100729 if buftype != '' && buftype != 'nofile' && buftype != 'nowrite'
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000730 return false
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100731 endif
732
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000733 # only existing buffers
734 return bufexists(num)
735enddef
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100736
Bram Moolenaar071d4272004-06-13 20:20:40 +0000737" Create the buffer menu (delete an existing one first).
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000738def s:BMShow()
739 s:bmenu_wait = 1
740 s:bmenu_short = 1
741 s:bmenu_count = 0
742 s:bmenu_items = {}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000743
SUN Haitao08896dd2025-06-04 21:25:31 +0200744 s:BMRedraw()
745enddef
746
747def s:BMRedraw()
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000748 # Remove old menu, if it exists; keep one entry to avoid a torn off menu to
749 # disappear. Use try/catch to avoid setting v:errmsg
750 try
751 unmenu &Buffers
752 catch
753 endtry
754 exe 'noremenu ' .. g:bmenu_priority .. ".1 &Buffers.Dummy l"
755 try
756 unmenu! &Buffers
757 catch
758 endtry
Bram Moolenaar071d4272004-06-13 20:20:40 +0000759
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000760 # create new menu
761 exe 'an <silent> ' .. g:bmenu_priority .. ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
762 exe 'an ' .. g:bmenu_priority .. ".4 &Buffers.&Delete :confirm bd<CR>"
763 exe 'an ' .. g:bmenu_priority .. ".6 &Buffers.&Alternate :confirm b #<CR>"
764 exe 'an ' .. g:bmenu_priority .. ".7 &Buffers.&Next :confirm bnext<CR>"
765 exe 'an ' .. g:bmenu_priority .. ".8 &Buffers.&Previous :confirm bprev<CR>"
766 exe 'an ' .. g:bmenu_priority .. ".9 &Buffers.-SEP- :"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000767 unmenu &Buffers.Dummy
768
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000769 # figure out how many buffers there are
SUN Haitao08896dd2025-06-04 21:25:31 +0200770 var buffer_menu_items = []
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000771 var buf = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000772 while buf <= bufnr('$')
SUN Haitao08896dd2025-06-04 21:25:31 +0200773 var name = bufname(buf)
774 if s:BMCanAdd(name, buf)
775 add(buffer_menu_items, [substitute(name, ".", '\L\0', ""), name, buf])
Bram Moolenaar071d4272004-06-13 20:20:40 +0000776 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000777 buf += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000778 endwhile
SUN Haitao08896dd2025-06-04 21:25:31 +0200779 s:bmenu_count = len(buffer_menu_items)
780
Bram Moolenaar071d4272004-06-13 20:20:40 +0000781 if s:bmenu_count <= &menuitems
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000782 s:bmenu_short = 0
Bram Moolenaar071d4272004-06-13 20:20:40 +0000783 endif
784
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000785 # iterate through buffer list, adding each buffer to the menu:
SUN Haitao08896dd2025-06-04 21:25:31 +0200786 sort(buffer_menu_items)
787
788 var i = 0
789 for menu_item in buffer_menu_items
790 s:BMFilename(menu_item[1], menu_item[2], i)
791 i += 1
792 endfor
793
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000794 s:bmenu_wait = 0
Bram Moolenaar071d4272004-06-13 20:20:40 +0000795 aug buffer_list
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000796 au!
797 au BufCreate,BufFilePost * call s:BMAdd()
798 au BufDelete,BufFilePre * call s:BMRemove()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000799 aug END
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000800enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000801
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000802def s:BMHash2(name: string): string
803 var nm = substitute(name, ".", '\L\0', "")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000804 if nm[0] < 'a' || nm[0] > 'z'
805 return '&others.'
806 elseif nm[0] <= 'd'
807 return '&abcd.'
808 elseif nm[0] <= 'h'
809 return '&efgh.'
810 elseif nm[0] <= 'l'
811 return '&ijkl.'
812 elseif nm[0] <= 'p'
813 return '&mnop.'
814 elseif nm[0] <= 't'
815 return '&qrst.'
816 else
817 return '&u-z.'
818 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000819enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000820
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100821" Insert a buffer name into the buffer menu.
SUN Haitao08896dd2025-06-04 21:25:31 +0200822def s:BMFilename(name: string, num: number, index: number)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000823 var munge = s:BMMunge(name, num)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000824 var cmd: string
Bram Moolenaar071d4272004-06-13 20:20:40 +0000825 if s:bmenu_short == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000826 s:bmenu_items[num] = munge
SUN Haitao08896dd2025-06-04 21:25:31 +0200827 cmd = 'an ' .. g:bmenu_priority .. '.9999.' .. index .. ' &Buffers.' .. munge
Bram Moolenaar071d4272004-06-13 20:20:40 +0000828 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000829 var menu_name = s:BMHash2(munge) .. munge
830 s:bmenu_items[num] = menu_name
SUN Haitao08896dd2025-06-04 21:25:31 +0200831 cmd = 'an ' .. g:bmenu_priority .. '.9999.0.' .. index .. ' &Buffers.' .. menu_name
Bram Moolenaar071d4272004-06-13 20:20:40 +0000832 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000833 exe cmd .. ' :confirm b' .. num .. '<CR>'
834enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000835
836" Truncate a long path to fit it in a menu item.
837if !exists("g:bmenu_max_pathlen")
838 let g:bmenu_max_pathlen = 35
839endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000840
841def s:BMTruncName(fname: string): string
842 var name = fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000843 if g:bmenu_max_pathlen < 5
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000844 name = ""
Bram Moolenaar071d4272004-06-13 20:20:40 +0000845 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000846 var len = strlen(name)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000847 if len > g:bmenu_max_pathlen
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000848 var amountl = (g:bmenu_max_pathlen / 2) - 2
849 var amountr = g:bmenu_max_pathlen - amountl - 3
850 var pattern = '^\(.\{,' .. amountl .. '}\).\{-}\(.\{,' .. amountr .. '}\)$'
851 var left = substitute(name, pattern, '\1', '')
852 var right = substitute(name, pattern, '\2', '')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000853 if strlen(left) + strlen(right) < len
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000854 name = left .. '...' .. right
Bram Moolenaar071d4272004-06-13 20:20:40 +0000855 endif
856 endif
857 endif
858 return name
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000859enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000860
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000861def s:BMMunge(fname: string, bnum: number): string
862 var name = fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000863 if name == ''
864 if !exists("g:menutrans_no_file")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000865 g:menutrans_no_file = "[No Name]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000866 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000867 name = g:menutrans_no_file
Bram Moolenaar071d4272004-06-13 20:20:40 +0000868 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000869 name = fnamemodify(name, ':p:~')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000870 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000871 # detach file name and separate it out:
872 var name2 = fnamemodify(name, ':t')
873 if bnum >= 0
874 name2 = name2 .. ' (' .. bnum .. ')'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000875 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000876 name = name2 .. "\t" .. s:BMTruncName(fnamemodify(name, ':h'))
877 name = escape(name, "\\. \t|")
878 name = substitute(name, "&", "&&", "g")
879 name = substitute(name, "\n", "^@", "g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000880 return name
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000881enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000882
883" When just starting Vim, load the buffer menu later
884if has("vim_starting")
885 augroup LoadBufferMenu
886 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
887 au VimEnter * au! LoadBufferMenu
888 augroup END
889else
890 call <SID>BMShow()
891endif
892
893endif " !exists("no_buffers_menu")
894
895" Window menu
896an 70.300 &Window.&New<Tab>^Wn <C-W>n
897an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
898an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
899an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
Bram Moolenaar314dd792019-02-03 15:27:20 +0100900an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
901if !exists("*MenuExplOpen")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000902 def MenuExplOpen()
Bram Moolenaar314dd792019-02-03 15:27:20 +0100903 if @% == ""
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000904 :20vsp .
Bram Moolenaar314dd792019-02-03 15:27:20 +0100905 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000906 exe ":20vsp " .. fnameescape(expand("%:p:h"))
Bram Moolenaar314dd792019-02-03 15:27:20 +0100907 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000908 enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000909endif
910an 70.335 &Window.-SEP1- <Nop>
911an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
912an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
913an 70.350 &Window.-SEP2- <Nop>
914an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
915an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
Bram Moolenaar214641f2017-03-05 17:04:09 +0100916an 70.355 &Window.Move\ &To.&Left\ Side<Tab>^WH <C-W>H
917an 70.355 &Window.Move\ &To.&Right\ Side<Tab>^WL <C-W>L
Bram Moolenaar071d4272004-06-13 20:20:40 +0000918an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
919an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
920an 70.365 &Window.-SEP3- <Nop>
921an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
922an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
923an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
924an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
925an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
926
927" The popup menu
928an 1.10 PopUp.&Undo u
929an 1.15 PopUp.-SEP1- <Nop>
930vnoremenu 1.20 PopUp.Cu&t "+x
931vnoremenu 1.30 PopUp.&Copy "+y
932cnoremenu 1.30 PopUp.&Copy <C-Y>
933nnoremenu 1.40 PopUp.&Paste "+gP
934cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000935exe 'vnoremenu <script> 1.40 PopUp.&Paste ' .. paste#paste_cmd['v']
936exe 'inoremenu <script> 1.40 PopUp.&Paste ' .. paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000937vnoremenu 1.50 PopUp.&Delete x
938an 1.55 PopUp.-SEP2- <Nop>
939vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000940
941nnoremenu 1.70 PopUp.Select\ &Word vaw
942onoremenu 1.70 PopUp.Select\ &Word aw
943vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
944inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
945cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
946
947nnoremenu 1.73 PopUp.Select\ &Sentence vas
948onoremenu 1.73 PopUp.Select\ &Sentence as
949vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
950inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
951cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
952
953nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
954onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
955vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
956inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
957cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
958
959nnoremenu 1.80 PopUp.Select\ &Line V
960onoremenu 1.80 PopUp.Select\ &Line <C-C>V
961vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
962inoremenu 1.80 PopUp.Select\ &Line <C-O>V
963cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
964
965nnoremenu 1.90 PopUp.Select\ &Block <C-V>
966onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
967vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
968inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
969cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
970
Bram Moolenaar071d4272004-06-13 20:20:40 +0000971noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
972inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
973cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
974
Bram Moolenaar45360022005-07-21 21:08:21 +0000975if has("spell")
976 " Spell suggestions in the popup menu. Note that this will slow down the
977 " appearance of the menu!
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000978 def s:SpellPopup()
Bram Moolenaar45360022005-07-21 21:08:21 +0000979 if exists("s:changeitem") && s:changeitem != ''
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000980 call s:SpellDel()
Bram Moolenaar45360022005-07-21 21:08:21 +0000981 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000982
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000983 # Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000984 if !&spell || &spelllang == ''
985 return
986 endif
Bram Moolenaar45360022005-07-21 21:08:21 +0000987
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000988 var curcol = col('.')
989 var w: string
990 var a: string
991 [w, a] = spellbadword()
992 if col('.') > curcol # don't use word after the cursor
993 w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +0000994 endif
995 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000996 if a == 'caps'
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000997 s:suglist = [substitute(w, '.*', '\u&', '')]
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000998 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000999 s:suglist = spellsuggest(w, 10)
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001000 endif
Bram Moolenaar62292582010-07-10 16:36:59 +02001001 if len(s:suglist) > 0
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001002 if !exists("g:menutrans_spell_change_ARG_to")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001003 g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001004 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001005 s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .'))
1006 s:fromword = w
1007 var pri = 1
Bram Moolenaar45360022005-07-21 21:08:21 +00001008 for sug in s:suglist
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001009 exe 'anoremenu 1.5.' .. pri .. ' PopUp.' .. s:changeitem .. '.' .. escape(sug, ' .')
1010 \ .. ' :call <SID>SpellReplace(' .. pri .. ')<CR>'
1011 pri += 1
Bram Moolenaar45360022005-07-21 21:08:21 +00001012 endfor
1013
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001014 if !exists("g:menutrans_spell_add_ARG_to_word_list")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001015 g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001016 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001017 s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .'))
1018 exe 'anoremenu 1.6 PopUp.' .. s:additem .. ' :spellgood ' .. w .. '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001019
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001020 if !exists("g:menutrans_spell_ignore_ARG")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001021 g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001022 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001023 s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .'))
1024 exe 'anoremenu 1.7 PopUp.' .. s:ignoreitem .. ' :spellgood! ' .. w .. '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001025
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001026 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar45360022005-07-21 21:08:21 +00001027 endif
1028 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001029 call cursor(0, curcol) # put the cursor back where it was
1030 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001031
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001032 def s:SpellReplace(n: number)
1033 var l = getline('.')
1034 # Move the cursor to the start of the word.
Bram Moolenaar62292582010-07-10 16:36:59 +02001035 call spellbadword()
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001036 call setline('.', strpart(l, 0, col('.') - 1) .. s:suglist[n - 1]
1037 \ .. strpart(l, col('.') + len(s:fromword) - 1))
1038 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001039
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001040 def s:SpellDel()
1041 exe "aunmenu PopUp." .. s:changeitem
1042 exe "aunmenu PopUp." .. s:additem
1043 exe "aunmenu PopUp." .. s:ignoreitem
Bram Moolenaar45360022005-07-21 21:08:21 +00001044 aunmenu PopUp.-SpellSep-
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001045 s:changeitem = ''
1046 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001047
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001048 augroup SpellPopupMenu
1049 au! MenuPopup * call <SID>SpellPopup()
1050 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +00001051endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00001052
1053" The GUI toolbar (for MS-Windows and GTK)
1054if has("toolbar")
1055 an 1.10 ToolBar.Open :browse confirm e<CR>
1056 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
1057 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
1058
1059 if has("printer")
1060 an 1.40 ToolBar.Print :hardcopy<CR>
1061 vunmenu ToolBar.Print
1062 vnoremenu ToolBar.Print :hardcopy<CR>
1063 elseif has("unix")
1064 an 1.40 ToolBar.Print :w !lpr<CR>
1065 vunmenu ToolBar.Print
1066 vnoremenu ToolBar.Print :w !lpr<CR>
1067 endif
1068
1069 an 1.45 ToolBar.-sep1- <Nop>
1070 an 1.50 ToolBar.Undo u
1071 an 1.60 ToolBar.Redo <C-R>
1072
1073 an 1.65 ToolBar.-sep2- <Nop>
1074 vnoremenu 1.70 ToolBar.Cut "+x
1075 vnoremenu 1.80 ToolBar.Copy "+y
1076 cnoremenu 1.80 ToolBar.Copy <C-Y>
1077 nnoremenu 1.90 ToolBar.Paste "+gP
1078 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001079 exe 'vnoremenu <script> ToolBar.Paste ' .. paste#paste_cmd['v']
1080 exe 'inoremenu <script> ToolBar.Paste ' .. paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +00001081
1082 if !has("gui_athena")
1083 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001084 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001085 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001086 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001087 an 1.110 ToolBar.FindNext n
1088 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +00001089 endif
1090
Bram Moolenaar071d4272004-06-13 20:20:40 +00001091 an 1.215 ToolBar.-sep5- <Nop>
1092 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
1093 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
1094 an 1.240 ToolBar.RunScript :browse so<CR>
1095
1096 an 1.245 ToolBar.-sep6- <Nop>
1097 an 1.250 ToolBar.Make :make<CR>
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001098 an 1.270 ToolBar.RunCtags :exe "!" .. g:ctags_command<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001099 an 1.280 ToolBar.TagJump g<C-]>
1100
1101 an 1.295 ToolBar.-sep7- <Nop>
1102 an 1.300 ToolBar.Help :help<CR>
1103 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1104
1105" Only set the tooltips here if not done in a language menu file
1106if exists("*Do_toolbar_tmenu")
1107 call Do_toolbar_tmenu()
1108else
1109 let did_toolbar_tmenu = 1
1110 tmenu ToolBar.Open Open file
1111 tmenu ToolBar.Save Save current file
1112 tmenu ToolBar.SaveAll Save all files
1113 tmenu ToolBar.Print Print
1114 tmenu ToolBar.Undo Undo
1115 tmenu ToolBar.Redo Redo
1116 tmenu ToolBar.Cut Cut to clipboard
1117 tmenu ToolBar.Copy Copy to clipboard
1118 tmenu ToolBar.Paste Paste from Clipboard
1119 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001120 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001121 tmenu ToolBar.FindNext Find Next
1122 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001123 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001124 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001125 tmenu ToolBar.SaveSesn Save current session
h-easta4205472024-10-13 19:16:42 +02001126 tmenu ToolBar.RunScript Choose a Vim script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001127 tmenu ToolBar.Make Make current project (:make)
1128 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001129 tmenu ToolBar.TagJump Jump to tag under cursor
1130 tmenu ToolBar.Help Vim Help
1131 tmenu ToolBar.FindHelp Search Vim Help
1132endif
1133
1134" Select a session to load; default to current session name if present
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001135def s:LoadVimSesn()
1136 var name: string
Bram Moolenaar071d4272004-06-13 20:20:40 +00001137 if strlen(v:this_session) > 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001138 name = fnameescape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001139 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001140 name = "Session.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001141 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001142 execute "browse so " .. name
1143enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001144
1145" Select a session to save; default to current session name if present
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001146def s:SaveVimSesn()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001147 if strlen(v:this_session) == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001148 v:this_session = "Session.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001149 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001150 execute "browse mksession! " .. fnameescape(v:this_session)
1151enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001152
1153endif
1154
1155endif " !exists("did_install_default_menus")
1156
1157" Define these items always, so that syntax can be switched on when it wasn't.
1158" But skip them when the Syntax menu was disabled by the user.
1159if !exists("did_install_syntax_menu")
1160 an 50.212 &Syntax.&Manual :syn manual<CR>
1161 an 50.214 &Syntax.A&utomatic :syn on<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001162 an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001163 if !exists("*s:SynOnOff")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001164 def s:SynOnOff()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001165 if has("syntax_items")
1166 syn clear
1167 else
1168 if !exists("g:syntax_on")
1169 syn manual
1170 endif
1171 set syn=ON
1172 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001173 enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001174 endif
1175endif
1176
1177
1178" Install the Syntax menu only when filetype.vim has been loaded or when
1179" manual syntax highlighting is enabled.
1180" Avoid installing the Syntax menu twice.
1181if (exists("did_load_filetypes") || exists("syntax_on"))
1182 \ && !exists("did_install_syntax_menu")
1183 let did_install_syntax_menu = 1
1184
1185" Skip setting up the individual syntax selection menus unless
1186" do_syntax_sel_menu is defined (it takes quite a bit of time).
1187if exists("do_syntax_sel_menu")
1188 runtime! synmenu.vim
1189else
Bram Moolenaar040c1fe2017-11-09 19:45:48 +01001190 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 +00001191 an 50.195 &Syntax.-SEP1- <Nop>
1192endif
1193
1194an 50.210 &Syntax.&Off :syn off<CR>
1195an 50.700 &Syntax.-SEP3- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001196an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1197an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001198an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1199
Bram Moolenaar9da17d72022-02-09 21:50:44 +00001200" Uncomment the next line to compile the functions early to find any mistakes
1201" defcompile
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001202
Bram Moolenaar071d4272004-06-13 20:20:40 +00001203endif " !exists("did_install_syntax_menu")
1204
Bram Moolenaar071d4272004-06-13 20:20:40 +00001205" Restore the previous value of 'cpoptions'.
1206let &cpo = s:cpo_save
1207unlet s:cpo_save
1208
1209" vim: set sw=2 :