blob: 6d12bcd035f07359f74cd5d0a6ce9725f0b429fa [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>
5" Last Change: 2023 Aug 10
6" 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>
Bram Moolenaar5c8837f2006-02-25 21:52:33 +0000125an 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
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000696 var name = expand("<afile>")
697 var num = str2nr(expand("<abuf>"))
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100698 if s:BMCanAdd(name, num)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000699 s:BMFilename(name, num)
700 s:bmenu_count += 1
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100701 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000702 endif
703 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000704enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000705
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100706" invoked from a BufDelete or BufFilePre autocommand
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000707def s:BMRemove()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000708 if s:bmenu_wait == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000709 var bufnum = expand("<abuf>")
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100710 if s:bmenu_items->has_key(bufnum)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000711 var menu_name = s:bmenu_items[bufnum]
712 exe 'silent! aun &Buffers.' .. menu_name
713 s:bmenu_count = s:bmenu_count - 1
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100714 unlet s:bmenu_items[bufnum]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000715 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000716 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000717enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000718
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100719" Return non-zero if buffer with number "name" / "num" is useful to add in the
720" buffer menu.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000721def s:BMCanAdd(name: string, num: number): bool
722 # no directory or unlisted buffer
723 if isdirectory(name) || !buflisted(num)
724 return false
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100725 endif
726
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000727 # no name with control characters
728 if name =~ '[\x01-\x1f]'
729 return false
Bram Moolenaarfa3b7232021-12-24 13:18:38 +0000730 endif
731
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000732 # no special buffer, such as terminal or popup
733 var buftype = getbufvar(num, '&buftype')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100734 if buftype != '' && buftype != 'nofile' && buftype != 'nowrite'
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000735 return false
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100736 endif
737
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000738 # only existing buffers
739 return bufexists(num)
740enddef
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100741
Bram Moolenaar071d4272004-06-13 20:20:40 +0000742" Create the buffer menu (delete an existing one first).
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000743def s:BMShow()
744 s:bmenu_wait = 1
745 s:bmenu_short = 1
746 s:bmenu_count = 0
747 s:bmenu_items = {}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000748
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000749 # Remove old menu, if it exists; keep one entry to avoid a torn off menu to
750 # disappear. Use try/catch to avoid setting v:errmsg
751 try
752 unmenu &Buffers
753 catch
754 endtry
755 exe 'noremenu ' .. g:bmenu_priority .. ".1 &Buffers.Dummy l"
756 try
757 unmenu! &Buffers
758 catch
759 endtry
Bram Moolenaar071d4272004-06-13 20:20:40 +0000760
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000761 # create new menu
762 exe 'an <silent> ' .. g:bmenu_priority .. ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
763 exe 'an ' .. g:bmenu_priority .. ".4 &Buffers.&Delete :confirm bd<CR>"
764 exe 'an ' .. g:bmenu_priority .. ".6 &Buffers.&Alternate :confirm b #<CR>"
765 exe 'an ' .. g:bmenu_priority .. ".7 &Buffers.&Next :confirm bnext<CR>"
766 exe 'an ' .. g:bmenu_priority .. ".8 &Buffers.&Previous :confirm bprev<CR>"
767 exe 'an ' .. g:bmenu_priority .. ".9 &Buffers.-SEP- :"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000768 unmenu &Buffers.Dummy
769
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000770 # figure out how many buffers there are
771 var buf = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000772 while buf <= bufnr('$')
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100773 if s:BMCanAdd(bufname(buf), buf)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000774 s:bmenu_count = s:bmenu_count + 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000775 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000776 buf += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000777 endwhile
778 if s:bmenu_count <= &menuitems
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000779 s:bmenu_short = 0
Bram Moolenaar071d4272004-06-13 20:20:40 +0000780 endif
781
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000782 # iterate through buffer list, adding each buffer to the menu:
783 buf = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000784 while buf <= bufnr('$')
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000785 var name = bufname(buf)
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100786 if s:BMCanAdd(name, buf)
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000787 call s:BMFilename(name, buf)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000788 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000789 buf += 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000790 endwhile
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000791 s:bmenu_wait = 0
Bram Moolenaar071d4272004-06-13 20:20:40 +0000792 aug buffer_list
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000793 au!
794 au BufCreate,BufFilePost * call s:BMAdd()
795 au BufDelete,BufFilePre * call s:BMRemove()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000796 aug END
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000797enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000798
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000799def s:BMHash(name: string): number
800 # Make name all upper case, so that chars are between 32 and 96
801 var nm = substitute(name, ".*", '\U\0', "")
802 var sp: number
Bram Moolenaar071d4272004-06-13 20:20:40 +0000803 if has("ebcdic")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000804 # HACK: Replace all non alphabetics with 'Z'
805 # Just to make it work for now.
806 nm = substitute(nm, "[^A-Z]", 'Z', "g")
807 sp = char2nr('A') - 1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000808 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000809 sp = char2nr(' ')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000810 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000811 # convert first six chars into a number for sorting:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000812 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 +0000813enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000814
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000815def s:BMHash2(name: string): string
816 var nm = substitute(name, ".", '\L\0', "")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000817 if nm[0] < 'a' || nm[0] > 'z'
818 return '&others.'
819 elseif nm[0] <= 'd'
820 return '&abcd.'
821 elseif nm[0] <= 'h'
822 return '&efgh.'
823 elseif nm[0] <= 'l'
824 return '&ijkl.'
825 elseif nm[0] <= 'p'
826 return '&mnop.'
827 elseif nm[0] <= 't'
828 return '&qrst.'
829 else
830 return '&u-z.'
831 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000832enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000833
Bram Moolenaar5e94a292020-03-19 18:46:57 +0100834" Insert a buffer name into the buffer menu.
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000835def s:BMFilename(name: string, num: number)
836 var munge = s:BMMunge(name, num)
837 var hash = s:BMHash(munge)
838 var cmd: string
Bram Moolenaar071d4272004-06-13 20:20:40 +0000839 if s:bmenu_short == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000840 s:bmenu_items[num] = munge
841 cmd = 'an ' .. g:bmenu_priority .. '.' .. hash .. ' &Buffers.' .. munge
Bram Moolenaar071d4272004-06-13 20:20:40 +0000842 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000843 var menu_name = s:BMHash2(munge) .. munge
844 s:bmenu_items[num] = menu_name
845 cmd = 'an ' .. g:bmenu_priority .. '.' .. hash .. '.' .. hash .. ' &Buffers.' .. menu_name
Bram Moolenaar071d4272004-06-13 20:20:40 +0000846 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000847 exe cmd .. ' :confirm b' .. num .. '<CR>'
848enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000849
850" Truncate a long path to fit it in a menu item.
851if !exists("g:bmenu_max_pathlen")
852 let g:bmenu_max_pathlen = 35
853endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000854
855def s:BMTruncName(fname: string): string
856 var name = fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000857 if g:bmenu_max_pathlen < 5
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000858 name = ""
Bram Moolenaar071d4272004-06-13 20:20:40 +0000859 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000860 var len = strlen(name)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000861 if len > g:bmenu_max_pathlen
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000862 var amountl = (g:bmenu_max_pathlen / 2) - 2
863 var amountr = g:bmenu_max_pathlen - amountl - 3
864 var pattern = '^\(.\{,' .. amountl .. '}\).\{-}\(.\{,' .. amountr .. '}\)$'
865 var left = substitute(name, pattern, '\1', '')
866 var right = substitute(name, pattern, '\2', '')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000867 if strlen(left) + strlen(right) < len
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000868 name = left .. '...' .. right
Bram Moolenaar071d4272004-06-13 20:20:40 +0000869 endif
870 endif
871 endif
872 return name
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000873enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000874
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000875def s:BMMunge(fname: string, bnum: number): string
876 var name = fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000877 if name == ''
878 if !exists("g:menutrans_no_file")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000879 g:menutrans_no_file = "[No Name]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000880 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000881 name = g:menutrans_no_file
Bram Moolenaar071d4272004-06-13 20:20:40 +0000882 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000883 name = fnamemodify(name, ':p:~')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000884 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000885 # detach file name and separate it out:
886 var name2 = fnamemodify(name, ':t')
887 if bnum >= 0
888 name2 = name2 .. ' (' .. bnum .. ')'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000889 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000890 name = name2 .. "\t" .. s:BMTruncName(fnamemodify(name, ':h'))
891 name = escape(name, "\\. \t|")
892 name = substitute(name, "&", "&&", "g")
893 name = substitute(name, "\n", "^@", "g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000894 return name
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000895enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000896
897" When just starting Vim, load the buffer menu later
898if has("vim_starting")
899 augroup LoadBufferMenu
900 au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
901 au VimEnter * au! LoadBufferMenu
902 augroup END
903else
904 call <SID>BMShow()
905endif
906
907endif " !exists("no_buffers_menu")
908
909" Window menu
910an 70.300 &Window.&New<Tab>^Wn <C-W>n
911an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
912an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
913an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
Bram Moolenaar314dd792019-02-03 15:27:20 +0100914an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
915if !exists("*MenuExplOpen")
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000916 def MenuExplOpen()
Bram Moolenaar314dd792019-02-03 15:27:20 +0100917 if @% == ""
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000918 :20vsp .
Bram Moolenaar314dd792019-02-03 15:27:20 +0100919 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000920 exe ":20vsp " .. fnameescape(expand("%:p:h"))
Bram Moolenaar314dd792019-02-03 15:27:20 +0100921 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000922 enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000923endif
924an 70.335 &Window.-SEP1- <Nop>
925an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
926an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
927an 70.350 &Window.-SEP2- <Nop>
928an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
929an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
Bram Moolenaar214641f2017-03-05 17:04:09 +0100930an 70.355 &Window.Move\ &To.&Left\ Side<Tab>^WH <C-W>H
931an 70.355 &Window.Move\ &To.&Right\ Side<Tab>^WL <C-W>L
Bram Moolenaar071d4272004-06-13 20:20:40 +0000932an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
933an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
934an 70.365 &Window.-SEP3- <Nop>
935an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
936an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
937an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
938an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
939an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
940
941" The popup menu
942an 1.10 PopUp.&Undo u
943an 1.15 PopUp.-SEP1- <Nop>
944vnoremenu 1.20 PopUp.Cu&t "+x
945vnoremenu 1.30 PopUp.&Copy "+y
946cnoremenu 1.30 PopUp.&Copy <C-Y>
947nnoremenu 1.40 PopUp.&Paste "+gP
948cnoremenu 1.40 PopUp.&Paste <C-R>+
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000949exe 'vnoremenu <script> 1.40 PopUp.&Paste ' .. paste#paste_cmd['v']
950exe 'inoremenu <script> 1.40 PopUp.&Paste ' .. paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +0000951vnoremenu 1.50 PopUp.&Delete x
952an 1.55 PopUp.-SEP2- <Nop>
953vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000954
955nnoremenu 1.70 PopUp.Select\ &Word vaw
956onoremenu 1.70 PopUp.Select\ &Word aw
957vnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
958inoremenu 1.70 PopUp.Select\ &Word <C-O>vaw
959cnoremenu 1.70 PopUp.Select\ &Word <C-C>vaw
960
961nnoremenu 1.73 PopUp.Select\ &Sentence vas
962onoremenu 1.73 PopUp.Select\ &Sentence as
963vnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
964inoremenu 1.73 PopUp.Select\ &Sentence <C-O>vas
965cnoremenu 1.73 PopUp.Select\ &Sentence <C-C>vas
966
967nnoremenu 1.77 PopUp.Select\ Pa&ragraph vap
968onoremenu 1.77 PopUp.Select\ Pa&ragraph ap
969vnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
970inoremenu 1.77 PopUp.Select\ Pa&ragraph <C-O>vap
971cnoremenu 1.77 PopUp.Select\ Pa&ragraph <C-C>vap
972
973nnoremenu 1.80 PopUp.Select\ &Line V
974onoremenu 1.80 PopUp.Select\ &Line <C-C>V
975vnoremenu 1.80 PopUp.Select\ &Line <C-C>V
976inoremenu 1.80 PopUp.Select\ &Line <C-O>V
977cnoremenu 1.80 PopUp.Select\ &Line <C-C>V
978
979nnoremenu 1.90 PopUp.Select\ &Block <C-V>
980onoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
981vnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
982inoremenu 1.90 PopUp.Select\ &Block <C-O><C-V>
983cnoremenu 1.90 PopUp.Select\ &Block <C-C><C-V>
984
Bram Moolenaar071d4272004-06-13 20:20:40 +0000985noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
986inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
987cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
988
Bram Moolenaar45360022005-07-21 21:08:21 +0000989if has("spell")
990 " Spell suggestions in the popup menu. Note that this will slow down the
991 " appearance of the menu!
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000992 def s:SpellPopup()
Bram Moolenaar45360022005-07-21 21:08:21 +0000993 if exists("s:changeitem") && s:changeitem != ''
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000994 call s:SpellDel()
Bram Moolenaar45360022005-07-21 21:08:21 +0000995 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +0000996
Bram Moolenaar3e79c972022-02-04 19:48:06 +0000997 # Return quickly if spell checking is not enabled.
Bram Moolenaard8c00872005-07-22 21:52:15 +0000998 if !&spell || &spelllang == ''
999 return
1000 endif
Bram Moolenaar45360022005-07-21 21:08:21 +00001001
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001002 var curcol = col('.')
1003 var w: string
1004 var a: string
1005 [w, a] = spellbadword()
1006 if col('.') > curcol # don't use word after the cursor
1007 w = ''
Bram Moolenaar45360022005-07-21 21:08:21 +00001008 endif
1009 if w != ''
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001010 if a == 'caps'
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001011 s:suglist = [substitute(w, '.*', '\u&', '')]
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001012 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001013 s:suglist = spellsuggest(w, 10)
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001014 endif
Bram Moolenaar62292582010-07-10 16:36:59 +02001015 if len(s:suglist) > 0
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001016 if !exists("g:menutrans_spell_change_ARG_to")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001017 g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001018 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001019 s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .'))
1020 s:fromword = w
1021 var pri = 1
Bram Moolenaar45360022005-07-21 21:08:21 +00001022 for sug in s:suglist
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001023 exe 'anoremenu 1.5.' .. pri .. ' PopUp.' .. s:changeitem .. '.' .. escape(sug, ' .')
1024 \ .. ' :call <SID>SpellReplace(' .. pri .. ')<CR>'
1025 pri += 1
Bram Moolenaar45360022005-07-21 21:08:21 +00001026 endfor
1027
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001028 if !exists("g:menutrans_spell_add_ARG_to_word_list")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001029 g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001030 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001031 s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .'))
1032 exe 'anoremenu 1.6 PopUp.' .. s:additem .. ' :spellgood ' .. w .. '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001033
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001034 if !exists("g:menutrans_spell_ignore_ARG")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001035 g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"'
Bram Moolenaar7c63fbc2018-05-17 13:15:23 +02001036 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001037 s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .'))
1038 exe 'anoremenu 1.7 PopUp.' .. s:ignoreitem .. ' :spellgood! ' .. w .. '<CR>'
Bram Moolenaar45360022005-07-21 21:08:21 +00001039
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001040 anoremenu 1.8 PopUp.-SpellSep- :
Bram Moolenaar45360022005-07-21 21:08:21 +00001041 endif
1042 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001043 call cursor(0, curcol) # put the cursor back where it was
1044 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001045
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001046 def s:SpellReplace(n: number)
1047 var l = getline('.')
1048 # Move the cursor to the start of the word.
Bram Moolenaar62292582010-07-10 16:36:59 +02001049 call spellbadword()
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001050 call setline('.', strpart(l, 0, col('.') - 1) .. s:suglist[n - 1]
1051 \ .. strpart(l, col('.') + len(s:fromword) - 1))
1052 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001053
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001054 def s:SpellDel()
1055 exe "aunmenu PopUp." .. s:changeitem
1056 exe "aunmenu PopUp." .. s:additem
1057 exe "aunmenu PopUp." .. s:ignoreitem
Bram Moolenaar45360022005-07-21 21:08:21 +00001058 aunmenu PopUp.-SpellSep-
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001059 s:changeitem = ''
1060 enddef
Bram Moolenaar45360022005-07-21 21:08:21 +00001061
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001062 augroup SpellPopupMenu
1063 au! MenuPopup * call <SID>SpellPopup()
1064 augroup END
Bram Moolenaar45360022005-07-21 21:08:21 +00001065endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00001066
1067" The GUI toolbar (for MS-Windows and GTK)
1068if has("toolbar")
1069 an 1.10 ToolBar.Open :browse confirm e<CR>
1070 an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
1071 an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
1072
1073 if has("printer")
1074 an 1.40 ToolBar.Print :hardcopy<CR>
1075 vunmenu ToolBar.Print
1076 vnoremenu ToolBar.Print :hardcopy<CR>
1077 elseif has("unix")
1078 an 1.40 ToolBar.Print :w !lpr<CR>
1079 vunmenu ToolBar.Print
1080 vnoremenu ToolBar.Print :w !lpr<CR>
1081 endif
1082
1083 an 1.45 ToolBar.-sep1- <Nop>
1084 an 1.50 ToolBar.Undo u
1085 an 1.60 ToolBar.Redo <C-R>
1086
1087 an 1.65 ToolBar.-sep2- <Nop>
1088 vnoremenu 1.70 ToolBar.Cut "+x
1089 vnoremenu 1.80 ToolBar.Copy "+y
1090 cnoremenu 1.80 ToolBar.Copy <C-Y>
1091 nnoremenu 1.90 ToolBar.Paste "+gP
1092 cnoremenu ToolBar.Paste <C-R>+
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001093 exe 'vnoremenu <script> ToolBar.Paste ' .. paste#paste_cmd['v']
1094 exe 'inoremenu <script> ToolBar.Paste ' .. paste#paste_cmd['i']
Bram Moolenaar071d4272004-06-13 20:20:40 +00001095
1096 if !has("gui_athena")
1097 an 1.95 ToolBar.-sep3- <Nop>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001098 an 1.100 ToolBar.Replace :promptrepl<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001099 vunmenu ToolBar.Replace
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001100 vnoremenu ToolBar.Replace y:promptrepl <C-R>=<SID>FixFText()<CR><CR>
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001101 an 1.110 ToolBar.FindNext n
1102 an 1.120 ToolBar.FindPrev N
Bram Moolenaar071d4272004-06-13 20:20:40 +00001103 endif
1104
Bram Moolenaar071d4272004-06-13 20:20:40 +00001105 an 1.215 ToolBar.-sep5- <Nop>
1106 an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
1107 an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
1108 an 1.240 ToolBar.RunScript :browse so<CR>
1109
1110 an 1.245 ToolBar.-sep6- <Nop>
1111 an 1.250 ToolBar.Make :make<CR>
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001112 an 1.270 ToolBar.RunCtags :exe "!" .. g:ctags_command<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001113 an 1.280 ToolBar.TagJump g<C-]>
1114
1115 an 1.295 ToolBar.-sep7- <Nop>
1116 an 1.300 ToolBar.Help :help<CR>
1117 an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
1118
1119" Only set the tooltips here if not done in a language menu file
1120if exists("*Do_toolbar_tmenu")
1121 call Do_toolbar_tmenu()
1122else
1123 let did_toolbar_tmenu = 1
1124 tmenu ToolBar.Open Open file
1125 tmenu ToolBar.Save Save current file
1126 tmenu ToolBar.SaveAll Save all files
1127 tmenu ToolBar.Print Print
1128 tmenu ToolBar.Undo Undo
1129 tmenu ToolBar.Redo Redo
1130 tmenu ToolBar.Cut Cut to clipboard
1131 tmenu ToolBar.Copy Copy to clipboard
1132 tmenu ToolBar.Paste Paste from Clipboard
1133 if !has("gui_athena")
Bram Moolenaar5c736222010-01-06 20:54:52 +01001134 tmenu ToolBar.Replace Find / Replace...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001135 tmenu ToolBar.FindNext Find Next
1136 tmenu ToolBar.FindPrev Find Previous
Bram Moolenaar071d4272004-06-13 20:20:40 +00001137 endif
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001138 tmenu ToolBar.LoadSesn Choose a session to load
Bram Moolenaar071d4272004-06-13 20:20:40 +00001139 tmenu ToolBar.SaveSesn Save current session
Bram Moolenaarb38dea22006-09-14 11:35:25 +00001140 tmenu ToolBar.RunScript Choose a Vim Script to run
Bram Moolenaare2cc9702005-03-15 22:43:58 +00001141 tmenu ToolBar.Make Make current project (:make)
1142 tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001143 tmenu ToolBar.TagJump Jump to tag under cursor
1144 tmenu ToolBar.Help Vim Help
1145 tmenu ToolBar.FindHelp Search Vim Help
1146endif
1147
1148" Select a session to load; default to current session name if present
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001149def s:LoadVimSesn()
1150 var name: string
Bram Moolenaar071d4272004-06-13 20:20:40 +00001151 if strlen(v:this_session) > 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001152 name = fnameescape(v:this_session)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001153 else
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001154 name = "Session.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001155 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001156 execute "browse so " .. name
1157enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001158
1159" Select a session to save; default to current session name if present
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001160def s:SaveVimSesn()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001161 if strlen(v:this_session) == 0
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001162 v:this_session = "Session.vim"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001163 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001164 execute "browse mksession! " .. fnameescape(v:this_session)
1165enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001166
1167endif
1168
1169endif " !exists("did_install_default_menus")
1170
1171" Define these items always, so that syntax can be switched on when it wasn't.
1172" But skip them when the Syntax menu was disabled by the user.
1173if !exists("did_install_syntax_menu")
1174 an 50.212 &Syntax.&Manual :syn manual<CR>
1175 an 50.214 &Syntax.A&utomatic :syn on<CR>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001176 an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001177 if !exists("*s:SynOnOff")
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001178 def s:SynOnOff()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001179 if has("syntax_items")
1180 syn clear
1181 else
1182 if !exists("g:syntax_on")
1183 syn manual
1184 endif
1185 set syn=ON
1186 endif
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001187 enddef
Bram Moolenaar071d4272004-06-13 20:20:40 +00001188 endif
1189endif
1190
1191
1192" Install the Syntax menu only when filetype.vim has been loaded or when
1193" manual syntax highlighting is enabled.
1194" Avoid installing the Syntax menu twice.
1195if (exists("did_load_filetypes") || exists("syntax_on"))
1196 \ && !exists("did_install_syntax_menu")
1197 let did_install_syntax_menu = 1
1198
1199" Skip setting up the individual syntax selection menus unless
1200" do_syntax_sel_menu is defined (it takes quite a bit of time).
1201if exists("do_syntax_sel_menu")
1202 runtime! synmenu.vim
1203else
Bram Moolenaar040c1fe2017-11-09 19:45:48 +01001204 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 +00001205 an 50.195 &Syntax.-SEP1- <Nop>
1206endif
1207
1208an 50.210 &Syntax.&Off :syn off<CR>
1209an 50.700 &Syntax.-SEP3- <Nop>
Bram Moolenaar214641f2017-03-05 17:04:09 +01001210an 50.710 &Syntax.Co&lor\ Test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
1211an 50.720 &Syntax.&Highlight\ Test :runtime syntax/hitest.vim<CR>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001212an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
1213
Bram Moolenaar9da17d72022-02-09 21:50:44 +00001214" Uncomment the next line to compile the functions early to find any mistakes
1215" defcompile
Bram Moolenaar3e79c972022-02-04 19:48:06 +00001216
Bram Moolenaar071d4272004-06-13 20:20:40 +00001217endif " !exists("did_install_syntax_menu")
1218
Bram Moolenaar071d4272004-06-13 20:20:40 +00001219" Restore the previous value of 'cpoptions'.
1220let &cpo = s:cpo_save
1221unlet s:cpo_save
1222
1223" vim: set sw=2 :