changeset 29193:1e9e9d89f0ee

Update runtime files Commit: https://github.com/vim/vim/commit/d592deb336523a5448779ee3d4bba80334cff1f7 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jun 17 15:42:40 2022 +0100 Update runtime files
author Bram Moolenaar <Bram@vim.org>
date Fri, 17 Jun 2022 16:45:04 +0200
parents e4488cf0eff9
children f92f658585e6
files .github/CODEOWNERS runtime/compiler/icon.vim runtime/doc/builtin.txt runtime/doc/channel.txt runtime/doc/cmdline.txt runtime/doc/eval.txt runtime/doc/filetype.txt runtime/doc/map.txt runtime/doc/pi_netrw.txt runtime/doc/popup.txt runtime/doc/todo.txt runtime/doc/undo.txt runtime/doc/usr_52.txt runtime/doc/version5.txt runtime/ftplugin/icon.vim runtime/indent/dtd.vim runtime/indent/julia.vim runtime/indent/perl.vim runtime/plugin/manpager.vim runtime/syntax/coco.vim runtime/syntax/dirpager.vim runtime/syntax/dts.vim runtime/syntax/icon.vim runtime/syntax/initng.vim runtime/syntax/ipfilter.vim runtime/syntax/mupad.vim runtime/syntax/perl.vim runtime/syntax/pod.vim runtime/syntax/sendpr.vim runtime/syntax/tar.vim runtime/syntax/trustees.vim runtime/syntax/vim.vim src/po/ca.po src/po/cleanup.vim src/po/it.po
diffstat 35 files changed, 798 insertions(+), 670 deletions(-) [+]
line wrap: on
line diff
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -53,6 +53,7 @@ runtime/compiler/fbc.vim		@dkearns
 runtime/compiler/gawk.vim		@dkearns
 runtime/compiler/gjs.vim		@dkearns
 runtime/compiler/haml.vim		@tpope
+runtime/compiler/icon.vim		@dkearns
 runtime/compiler/javac.vim		@dkearns
 runtime/compiler/jest.vim		@dkearns
 runtime/compiler/jjs.vim		@dkearns
@@ -114,6 +115,7 @@ runtime/ftplugin/gprof.vim		@dpelle
 runtime/ftplugin/haml.vim		@tpope
 runtime/ftplugin/hgcommit.vim		@k-takata
 runtime/ftplugin/i3config.vim		@hiqua
+runtime/ftplugin/icon.vim		@dkearns
 runtime/ftplugin/indent.vim		@dkearns
 runtime/ftplugin/javascript.vim		@dkearns
 runtime/ftplugin/javascriptreact.vim	@dkearns
@@ -250,6 +252,7 @@ runtime/syntax/haml.vim			@tpope
 runtime/syntax/haskell.vim		@coot
 runtime/syntax/hgcommit.vim		@k-takata
 runtime/syntax/i3config.vim		@hiqua
+runtime/syntax/icon.vim			@dkearns
 runtime/syntax/indent.vim		@dkearns
 runtime/syntax/kconfig.vim		@chrisbra
 runtime/syntax/less.vim			@genoma
new file mode 100644
--- /dev/null
+++ b/runtime/compiler/icon.vim
@@ -0,0 +1,33 @@
+" Vim compiler file
+" Compiler:	Icon Compiler
+" Maintainer:	Doug Kearns <dougkearns@gmail.com>
+" Last Change:	2022 Jun 16
+
+if exists("current_compiler")
+  finish
+endif
+let current_compiler = "icont"
+
+if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+CompilerSet makeprg=icont\ -s
+CompilerSet errorformat=%-G%\\d%\\+\ errors%\\=,
+		       \%ERun-time\ error\ %n,
+		       \%ERun-time\ error\ %n\ in\ %m,
+		       \%ZTraceback:,
+                       \%+Coffending\ value:\ %.%#,
+                       \%CFile\ %f;\ Line\ %l,
+                       \%EFile\ %f;\ Line\ %l\ #\ %m,
+		       \%EFile\ %f;\ %m,
+		       \%E%f:%l:\ #\ %m,
+		       \%E%f:\ %m,
+		       \%+C%.%#,
+		       \%-G%.%#
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -1,4 +1,4 @@
-*builtin.txt*	For Vim version 8.2.  Last change: 2022 Jun 05
+*builtin.txt*	For Vim version 8.2.  Last change: 2022 Jun 16
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -8809,6 +8809,8 @@ strcharpart({src}, {start} [, {len} [, {
 			strcharpart('abc', -1, 2)
 <		results in 'a'.
 
+		Returns an empty string on error.
+
 		Can also be used as a |method|: >
 			GetText()->strcharpart(5)
 
@@ -8821,6 +8823,8 @@ strchars({string} [, {skipcc}])					*str
 		When {skipcc} set to 1, Composing characters are ignored.
 		|strcharlen()| always does this.
 
+		Returns zero on error.
+
 		Also see |strlen()|, |strdisplaywidth()| and |strwidth()|.
 
 		{skipcc} is only available after 7.4.755.  For backward
@@ -8853,6 +8857,7 @@ strdisplaywidth({string} [, {col}])			*s
 		'tabstop' and 'display'.
 		When {string} contains characters with East Asian Width Class
 		Ambiguous, this function's return value depends on 'ambiwidth'.
+		Returns zero on error.
 		Also see |strlen()|, |strwidth()| and |strchars()|.
 
 		Can also be used as a |method|: >
@@ -8886,6 +8891,7 @@ strgetchar({str}, {index})				*strgetcha
 		index.  Composing characters are considered separate
 		characters here.  Use |nr2char()| to convert the Number to a
 		String.
+		Returns -1 if {index} is invalid.
 		Also see |strcharpart()| and |strchars()|.
 
 		Can also be used as a |method|: >
@@ -8940,7 +8946,7 @@ strlen({string})						*strlen()*
 		The result is a Number, which is the length of the String
 		{string} in bytes.
 		If the argument is a Number it is first converted to a String.
-		For other types an error is given.
+		For other types an error is given and zero is returned.
 		If you want to count the number of multibyte characters use
 		|strchars()|.
 		Also see |len()|, |strdisplaywidth()| and |strwidth()|.
@@ -8971,6 +8977,8 @@ strpart({src}, {start} [, {len} [, {char
 		example, to get the character under the cursor: >
 			strpart(getline("."), col(".") - 1, 1, v:true)
 <
+		Returns an empty string on error.
+
 		Can also be used as a |method|: >
 			GetText()->strpart(5)
 
@@ -9033,6 +9041,8 @@ strtrans({string})					*strtrans()*
 <		This displays a newline in register a as "^@" instead of
 		starting a new line.
 
+		Returns an empty string on error.
+
 		Can also be used as a |method|: >
 			GetString()->strtrans()
 
@@ -9042,6 +9052,7 @@ strwidth({string})					*strwidth()*
 		cell, alternatively use |strdisplaywidth()|.
 		When {string} contains characters with East Asian Width Class
 		Ambiguous, this function's return value depends on 'ambiwidth'.
+		Returns zero on error.
 		Also see |strlen()|, |strdisplaywidth()| and |strchars()|.
 
 		Can also be used as a |method|: >
@@ -9067,6 +9078,8 @@ submatch({nr} [, {list}])			*submatch()*
 		When substitute() is used recursively only the submatches in
 		the current (deepest) call can be obtained.
 
+		Returns an empty string or list on error.
+
 		Examples: >
 			:s/\d\+/\=submatch(0) + 1/
 			:echo substitute(text, '\d\+', '\=submatch(0) + 1', '')
@@ -9117,7 +9130,9 @@ substitute({string}, {pat}, {sub}, {flag
 		|submatch()| returns.  Example: >
 		   :echo substitute(s, '%\(\x\x\)', {m -> '0x' .. m[1]}, 'g')
 
-<		Can also be used as a |method|: >
+<		Returns an empty string on error.
+
+		Can also be used as a |method|: >
 			GetString()->substitute(pat, sub, flags)
 
 swapinfo({fname})					*swapinfo()*
@@ -9172,6 +9187,8 @@ synID({lnum}, {col}, {trans})				*synID(
 		Warning: This function can be very slow.  Best speed is
 		obtained by going through the file in forward direction.
 
+		Returns zero on error.
+
 		Example (echoes the name of the syntax item under the cursor): >
 			:echo synIDattr(synID(line("."), col("."), 1), "name")
 <
@@ -9209,6 +9226,8 @@ synIDattr({synID}, {what} [, {mode}])			
 		"undercurl"	"1" if undercurled
 		"strike"	"1" if strikethrough
 
+		Returns an empty string on error.
+
 		Example (echoes the color of the syntax item under the
 		cursor): >
 	:echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg")
@@ -9223,6 +9242,8 @@ synIDtrans({synID})					*synIDtrans()*
 		highlight the character.  Highlight links given with
 		":highlight link" are followed.
 
+		Returns zero on error.
+
 		Can also be used as a |method|: >
 	:echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg")
 
@@ -9267,7 +9288,7 @@ synstack({lnum}, {col})					*synstack()*
 			   echo synIDattr(id, "name")
 			endfor
 <		When the position specified with {lnum} and {col} is invalid
-		nothing is returned.  The position just after the last
+		an empty List is returned.  The position just after the last
 		character in a line and the first column in an empty line are
 		valid positions.
 
@@ -9381,6 +9402,8 @@ tabpagenr([{arg}])					*tabpagenr()*
 				previous tab page 0 is returned.
 		The number can be used with the |:tab| command.
 
+		Returns zero on error.
+
 
 tabpagewinnr({tabarg} [, {arg}])			*tabpagewinnr()*
 		Like |winnr()| but for tab page {tabarg}.
@@ -9453,6 +9476,7 @@ tan({expr})						*tan()*
 		Return the tangent of {expr}, measured in radians, as a |Float|
 		in the range [-inf, inf].
 		{expr} must evaluate to a |Float| or a |Number|.
+		Returns 0.0 if {expr} is not a |Float| or a |Number|.
 		Examples: >
 			:echo tan(10)
 <			0.648361 >
@@ -9469,6 +9493,7 @@ tanh({expr})						*tanh()*
 		Return the hyperbolic tangent of {expr} as a |Float| in the
 		range [-1, 1].
 		{expr} must evaluate to a |Float| or a |Number|.
+		Returns 0.0 if {expr} is not a |Float| or a |Number|.
 		Examples: >
 			:echo tanh(0.5)
 <			0.462117 >
@@ -9598,6 +9623,8 @@ timer_start({time}, {callback} [, {optio
 				Vim becomes unusable because of all the error
 				messages.
 
+		Returns -1 on error.
+
 		Example: >
 			func MyHandler(timer)
 			  echo 'Handler called'
@@ -9633,7 +9660,7 @@ timer_stopall()						*timer_stopall()*
 tolower({expr})						*tolower()*
 		The result is a copy of the String given, with all uppercase
 		characters turned into lowercase (just like applying |gu| to
-		the string).
+		the string).  Returns an empty string on error.
 
 		Can also be used as a |method|: >
 			GetText()->tolower()
@@ -9641,7 +9668,7 @@ tolower({expr})						*tolower()*
 toupper({expr})						*toupper()*
 		The result is a copy of the String given, with all lowercase
 		characters turned into uppercase (just like applying |gU| to
-		the string).
+		the string).  Returns an empty string on error.
 
 		Can also be used as a |method|: >
 			GetText()->toupper()
@@ -9654,6 +9681,8 @@ tr({src}, {fromstr}, {tostr})				*tr()*
 		and so on.  Exactly like the unix "tr" command.
 		This code also deals with multibyte characters properly.
 
+		Returns an empty string on error.
+
 		Examples: >
 			echo tr("hello there", "ht", "HT")
 <		returns "Hello THere" >
@@ -9679,6 +9708,7 @@ trim({text} [, {mask} [, {dir}]])				*tr
 		When omitted both ends are trimmed.
 
 		This function deals with multibyte characters properly.
+		Returns an empty string on error.
 
 		Examples: >
 			echo trim("   some text ")
@@ -9697,6 +9727,7 @@ trunc({expr})							*trunc()*
 		Return the largest integral value with magnitude less than or
 		equal to {expr} as a |Float| (truncate towards zero).
 		{expr} must evaluate to a |Float| or a |Number|.
+		Returns 0.0 if {expr} is not a |Float| or a |Number|.
 		Examples: >
 			echo trunc(1.456)
 <			1.0  >
@@ -9815,12 +9846,15 @@ uniq({list} [, {func} [, {dict}]])			*un
 <		The default compare function uses the string representation of
 		each item.  For the use of {func} and {dict} see |sort()|.
 
+		Returns zero if {list} is not a |List|.
+
 		Can also be used as a |method|: >
 			mylist->uniq()
 
 values({dict})						*values()*
 		Return a |List| with all the values of {dict}.  The |List| is
 		in arbitrary order.  Also see |items()| and |keys()|.
+		Returns zero if {dict} is not a |Dict|.
 
 		Can also be used as a |method|: >
 			mydict->values()
@@ -9988,6 +10022,8 @@ win_gettype([{nr}])					*win_gettype()*
 		popup window then 'buftype' is "terminal" and win_gettype()
 		returns "popup".
 
+		Return an empty string if the window cannot be found.
+
 		Can also be used as a |method|: >
 			GetWinid()->win_gettype()
 <
@@ -10025,6 +10061,8 @@ win_move_separator({nr}, {offset})			*wi
 		specified (e.g., as a consequence of maintaining
 		'winminwidth'). Returns TRUE if the window can be found and
 		FALSE otherwise.
+		This will fail for the rightmost window and a full-width
+		window, since it has no separator on the right.
 
 		Can also be used as a |method|: >
 			GetWinnr()->win_move_separator(offset)
--- a/runtime/doc/channel.txt
+++ b/runtime/doc/channel.txt
@@ -1485,7 +1485,7 @@ request to the LSP server (if needed).  
     let resp = ch_sendexpr(ch, req, #{callback: 'HoverFunc'})
 
 To cancel an outstanding asynchronous LSP request sent to the server using the
-|ch_sendexpr()| function, send a cancelation message to the server using the
+|ch_sendexpr()| function, send a cancellation message to the server using the
 |ch_sendexpr()| function with the ID returned by the |ch_sendexpr()| function
 for the request.  Example: >
 
@@ -1533,7 +1533,7 @@ A LSP request message has the following 
 	"params": <list|dict>
     }
 
-A LSP reponse message has the following format (expressed as a Vim Dict).  The
+A LSP response message has the following format (expressed as a Vim Dict).  The
 "result" and "error" fields are optional: >
 
     {
@@ -1565,7 +1565,7 @@ A LSP request message has the following 
 	"params": <list|dict>
     }
 
-A LSP reponse message has the following format (expressed as a Vim Dict).  The
+A LSP response message has the following format (expressed as a Vim Dict).  The
 "result" and "error" fields are optional: >
 
     {
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -1,4 +1,4 @@
-*cmdline.txt*   For Vim version 8.2.  Last change: 2022 Apr 29
+*cmdline.txt*   For Vim version 8.2.  Last change: 2022 Jun 16
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1218,8 +1218,8 @@ save the command-line history and read i
 If the 'wildchar' option is set to <Tab>, and the command-line window is used
 for an Ex command, then two mappings will be added to use <Tab> for completion
 in the command-line window, like this: >
-	:imap <buffer> <Tab> <C-X><C-V>
-	:nmap <buffer> <Tab> a<C-X><C-V>
+	:inoremap <buffer> <Tab> <C-X><C-V>
+	:nnoremap <buffer> <Tab> a<C-X><C-V>
 Note that hitting <Tab> in Normal mode will do completion on the next
 character.  That way it works at the end of the line.
 If you don't want these mappings, disable them with: >
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -531,7 +531,7 @@ entry.  Note that the String '04' and th
 Number will be converted to the String '4', leading zeros are dropped.  The
 empty string can also be used as a key.
 
-In |Vim9| script literaly keys can be used if the key consists of alphanumeric
+In |Vim9| script literally keys can be used if the key consists of alphanumeric
 characters, underscore and dash, see |vim9-literal-dict|.
 						*literal-Dict* *#{}*
 To avoid having to put quotes around every key the #{} form can be used in
@@ -1144,7 +1144,7 @@ expr6 >> expr6	bitwise right shift				*e
 The "<<" and ">>" operators can be used to perform bitwise left or right shift
 of the left operand by the number of bits specified by the right operand.  The
 operands are used as positive numbers.  When shifting right with ">>" the
-topmost bit (somtimes called the sign bit) is cleared.  If the right operand
+topmost bit (sometimes called the sign bit) is cleared.  If the right operand
 (shift amount) is more than the maximum number of bits in a number
 (|v:numbersize|) the result is zero.
 
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -642,15 +642,15 @@ manpages and follows linked manpages on 
 
 For bash,zsh,ksh or dash, add to the config file (.bashrc,.zshrc, ...)
 
-	export MANPAGER="vim -M +MANPAGER -"
+	export MANPAGER="vim +MANPAGER --not-a-term -"
 
 For (t)csh, add to the config file
 
-	setenv MANPAGER "vim -M +MANPAGER -"
+	setenv MANPAGER "vim +MANPAGER --not-a-term -"
 
 For fish, add to the config file
 
-	set -x MANPAGER "vim -M +MANPAGER -"
+	set -x MANPAGER "vim +MANPAGER --not-a-term -"
 
 
 MARKDOWN                                                *ft-markdown-plugin*
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 8.2.  Last change: 2022 Jun 02
+*map.txt*       For Vim version 8.2.  Last change: 2022 Jun 14
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -395,8 +395,14 @@ Note:
 - In Visual mode  you can use `line('v')` and `col('v')` to get one end of the
   Visual area, the cursor is at the other end.
 - In Select mode, |:map| and |:vmap| command mappings are executed in
-  Visual mode.  Use |:smap| to handle Select mode differently.
-
+  Visual mode.  Use |:smap| to handle Select mode differently.  One particular
+  edge case: >
+  	:vnoremap <C-K> <Esc>
+<  This ends Visual mode when in Visual mode, but in Select mode it does not
+  work, because Select mode is restored after executing the mapped keys.  You
+  need to use: >
+  	:snoremap <C-K> <Esc>
+<
 							*E1255* *E1136*
 <Cmd> and <ScriptCmd> commands must terminate, that is, they must be followed
 by <CR> in the {rhs} of the mapping definition.  |Command-line| mode is never
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -440,11 +440,11 @@ settings are described below, in |netrw-
 
  *g:netrw_use_errorwindow* =2: messages from netrw will use a popup window
 			     Move the mouse and pause to remove the popup window.
-			     (default value if popup windows are availble)
+			     (default value if popup windows are available)
 			 =1 : messages from netrw will use a separate one
 			      line window.  This window provides reliable
 			      delivery of messages.
-			     (default value if popup windows are not availble)
+			     (default value if popup windows are not available)
 			 =0 : messages from netrw will use echoerr ;
 			      messages don't always seem to show up this
 			      way, but one doesn't have to quit the window.
@@ -1198,7 +1198,7 @@ If there are marked files and/or directo
 list.
 
 								*netrw-:NetrwMB*
-Addtionally, one may use :NetrwMB to bookmark files or directories. >
+Additionally, one may use :NetrwMB to bookmark files or directories. >
 
 	:NetrwMB[!] [files/directories]
 
--- a/runtime/doc/popup.txt
+++ b/runtime/doc/popup.txt
@@ -1,4 +1,4 @@
-*popup.txt*  For Vim version 8.2.  Last change: 2022 Jun 06
+*popup.txt*  For Vim version 8.2.  Last change: 2022 Jun 16
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1001,8 +1001,6 @@ 4. Examples						*popup-examples*
 
 These examples use |Vim9| script.
 
-TODO: more interesting examples
-
 					*popup_dialog-example*
 Prompt the user to press y/Y or n/N: >
 
@@ -1015,89 +1013,87 @@ Prompt the user to press y/Y or n/N: >
 				  echomsg "'y' or 'Y' was NOT pressed"
 				endif
 			     },
+		 padding: [2, 4, 2, 4],
 		 })
 <
 					*popup_menu-shortcut-example*
 Extend popup_filter_menu() with shortcut keys: >
 
-	call popup_menu(['Save', 'Cancel', 'Discard'], #{
-		\ filter: 'MyMenuFilter',
-		\ callback: 'MyMenuHandler',
-		\ })
-
-	func MyMenuFilter(id, key)
-	  " Handle shortcuts
-	  if a:key == 'S'
-	     call popup_close(a:id, 1)
-	     return 1
-	  endif
-	  if a:key == 'C'
-	     call popup_close(a:id, 2)
-	     return 1
-	  endif
-	  if a:key == 'D'
-	     call popup_close(a:id, 3)
-	     return 1
-	  endif
-
-	  " No shortcut, pass to generic filter
-	  return popup_filter_menu(a:id, a:key)
-	endfunc
-
-	func MyMenuHandler(id, result)
-	  echo $'Result: {a:result}'
-	endfunc
+	popup_menu(['Save', 'Cancel', 'Discard'], {
+	    callback: (_, result) => {
+		echo 'dialog result is' result
+	    },
+	    filter: (id, key) => {
+		# Handle shortcuts
+		if key == 'S' || key == 's'
+		    popup_close(id, 1)
+		elseif key == 'C' || key == 'c'
+		    popup_close(id, 2)
+		elseif key == 'D' || key == 'd'
+		    popup_close(id, 3)
+		else
+		    # No shortcut, pass to generic filter
+		    return popup_filter_menu(id, key)
+		endif
+		return true
+	    },
+	})
 <
 					*popup_beval_example*
 Example for using a popup window for 'ballooneval': >
 
 	set ballooneval balloonevalterm
 	set balloonexpr=BalloonExpr()
-	let s:winid = 0
-	let s:last_text = ''
+	var winid: number
+	var last_text: string
 
-	func BalloonExpr()
-	  if s:winid && popup_getpos(s:winid) != {}
-	    " previous popup window still shows
-	    if v:beval_text == s:last_text
-	      " Still the same text, keep the existing popup
-	      return ''
+	def BalloonExpr(): string
+	    # here you would use "v:beval_text" to lookup something interesting
+	    var text = v:beval_text
+	    if winid > 0 && popup_getpos(winid) != null_dict
+		# previous popup window still shows
+		if text == last_text
+		    # still the same text, keep the existing popup
+		    return null_string
+		endif
+		popup_close(winid)
 	    endif
-	    call popup_close(s:winid)
-	  endif
-	  let s:winid = popup_beval(v:beval_text, #{mousemoved: 'word'})
-	  let s:last_text = v:beval_text
-	  return ''
-	endfunc
-<
+
+	    winid = popup_beval(text, {})
+	    last_text = text
+	    return null_string
+	enddef
+
 If the text has to be obtained asynchronously return an empty string from the
 expression function and call popup_beval() once the text is available.  In
 this example simulated with a timer callback: >
 
 	set ballooneval balloonevalterm
 	set balloonexpr=BalloonExpr()
-	let s:winid = 0
-	let s:balloonText = ''
+	var winid: number
+	var last_text: string
 
-	func BalloonExpr()
-	  if s:winid && popup_getpos(s:winid) != {}
-	    " previous popup window still shows
-	    if  v:beval_text == s:balloonText
-	      " Still the same text, keep the existing popup
-	      return ''
+	def BalloonExpr(): string
+	    var text = v:beval_text
+	    if winid > 0 && popup_getpos(winid) != null_dict
+		# previous popup window still shows
+		if text == last_text
+		    # still the same text, keep the existing popup
+		    return null_string
+		endif
+		popup_close(winid)
 	    endif
-	    call popup_close(s:winid)
-	    let s:winid = 0
-	  endif
-	  " simulate an asynchronous lookup for the text to display
-	  let s:balloonText = v:beval_text
-	  call timer_start(100, 'ShowPopup')
-	  return ''
-	endfunc
 
-	func ShowPopup(id)
-	  let s:winid = popup_beval(s:balloonText, #{mousemoved: 'word'})
-	endfunc
+	    # Simulate an asynchronous lookup that takes half a second for the
+	    # text to display.
+	    last_text = text
+	    timer_start(500, 'ShowPopup')
+	    return null_string
+	enddef
+
+	def ShowPopup(timerid: number)
+	    winid = popup_beval('Result: ' .. last_text, {})
+	enddef
 <
 
  vim:tw=78:ts=8:noet:ft=help:norl:
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.2.  Last change: 2022 Jun 14
+*todo.txt*      For Vim version 8.2.  Last change: 2022 Jun 17
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -38,19 +38,15 @@ browser use: https://github.com/vim/vim/
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-retab test Test_retab_endless() disabled - why is interrupt not caught?
-
-searchpair() must call function to set timeout, not pass the time limit down
-(and set it many times).  #10562
-
-Add test for --gui-dialog-file, check :confirm q with change buffer.
+Searchpair() timeout using skip expression using synID() interferes with
+syntax highlighting. #10562
+Add flag that timeout is set for 'redrawtime' and only then set b_syn_slow.
 
 Prepare for Vim 9.0 release:
 - Update the user manual:
   - Add more to usr_50.txt as an "advanced section" of usr_41.txt
   - Move some from vim9.txt to the user manual?  Keep the specification.
 - Use Vim9 for more runtime files.
-- Make popup-examples use Vim9 script  Issue #10499
 - Adjust intro message to say "help version9".
 
 Further Vim9 improvements, possibly after launch:
--- a/runtime/doc/undo.txt
+++ b/runtime/doc/undo.txt
@@ -257,7 +257,7 @@ message about that when opening a file.
 Undo files are normally saved in the same directory as the file.  This can be
 changed with the 'undodir' option.
 
-When the file is encrypted, the text in the undo file is also crypted.  The
+When the file is encrypted, the text in the undo file is also encrypted.  The
 same key and method is used. |encryption|
 
 Note that text properties are not stored in the undo file.  You can restore
--- a/runtime/doc/usr_52.txt
+++ b/runtime/doc/usr_52.txt
@@ -183,7 +183,7 @@ it a bit simpler.  The idea is that you 
 That function is then in an autoload script.  We will call that one script a
 library script.
 
-The autoload mechanism is based on a funtion name that has "#" characters: >
+The autoload mechanism is based on a function name that has "#" characters: >
 
 	mylib#myfunction(arg)
 
--- a/runtime/doc/version5.txt
+++ b/runtime/doc/version5.txt
@@ -3262,7 +3262,7 @@ Files can be encrypted when writing and 
 on patch from Mohsin Ahmed)
 
 When reading a file, there is an automatic detection whether it has been
-crypted.  Vim will then prompt for the key.
+encrypted.  Vim will then prompt for the key.
 
 Note that the encryption method is not compatible with Vi.  The encryption is
 not unbreakable.  This allows it to be exported from the US.
@@ -7622,7 +7622,7 @@ argument was fixed.
 Previously released patches for Vim 5.7:
 
 Patch 5.7.001
-Problem:    When the current buffer is crypted, and another modified buffer
+Problem:    When the current buffer is encrypted, and another modified buffer
 	    isn't, ":wall" will encrypt the other buffer.
 Solution:   In buf_write() use "buf" instead of "curbuf" to check for the
 	    crypt key.
new file mode 100644
--- /dev/null
+++ b/runtime/ftplugin/icon.vim
@@ -0,0 +1,36 @@
+" Vim filetype plugin file
+" Language:	Icon
+" Maintainer:	Doug Kearns <dougkearns@gmail.com>
+" Last Change:	2022 Jun 16
+
+if exists("b:did_ftplugin")
+  finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal comments=:#
+setlocal commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let b:undo_ftplugin = "setl fo< com< cms<"
+
+if exists("loaded_matchit")
+    " let b:match_ignorecase = 0
+    let b:match_words  = '^\s*$\s*if\(def\|ndef\)\=\>:^\s*$\s*elif\>:^\s*$\s*else\>:^\s*$\s*endif\>,' .
+	  \		 '\<procedure\>:\<\%(initial\|return\|suspend\|fail\)\>:\<end\>'
+    let b:undo_ftplugin ..= " | unlet! b:match_words"
+endif
+
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+  let b:browsefilter = "Icon Source Files (*.icn)\t*.icn\n" .
+	\	       "All Files (*.*)\t*.*\n"
+  let b:undo_ftplugin ..= " | unlet! b:browsefilter"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8
--- a/runtime/indent/dtd.vim
+++ b/runtime/indent/dtd.vim
@@ -4,6 +4,12 @@
 " Previous Maintainer:	Nikolai Weibull <now@bitwi.se>
 " Last Change:		24 Sep 2021
 
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+  finish
+endif
+let b:did_indent = 1
+
 setlocal indentexpr=GetDTDIndent()
 setlocal indentkeys=!^F,o,O,>
 setlocal nosmartindent
--- a/runtime/indent/julia.vim
+++ b/runtime/indent/julia.vim
@@ -2,9 +2,15 @@
 " Language:	Julia
 " Maintainer:	Carlo Baldassi <carlobaldassi@gmail.com>
 " Homepage:	https://github.com/JuliaEditorSupport/julia-vim
-" Last Change:	2016 jun 16
+" Last Change:	2022 Jun 14
 " Notes:        originally based on Bram Molenaar's indent file for vim
 
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+  finish
+endif
+let b:did_indent = 1
+
 setlocal autoindent
 
 setlocal indentexpr=GetJuliaIndent()
--- a/runtime/indent/perl.vim
+++ b/runtime/indent/perl.vim
@@ -6,104 +6,178 @@
 " License:       Vim License (see :help license)
 " Last Change:   2021 Sep 24
 
-if exists("b:did_ftplugin") | finish | endif
-let b:did_ftplugin = 1
-
-" Make sure the continuation lines below do not cause problems in
-" compatibility mode.
-let s:save_cpo = &cpo
-set cpo-=C
-
-setlocal formatoptions-=t
-setlocal formatoptions+=crqol
-setlocal keywordprg=perldoc\ -f
-
-setlocal comments=:#
-setlocal commentstring=#%s
+" Suggestions and improvements by :
+"   Aaron J. Sherman (use syntax for hints)
+"   Artem Chuprina (play nice with folding)
 
-" Provided by Ned Konz <ned at bike-nomad dot com>
-"---------------------------------------------
-setlocal include=\\<\\(use\\\|require\\)\\>
-" '+' is removed to support plugins in Catalyst or DBIx::Class
-" where the leading plus indicates a fully-qualified module name.
-setlocal includeexpr=substitute(substitute(substitute(substitute(v:fname,'+','',''),'::','/','g'),'->\*','',''),'$','.pm','')
-setlocal define=[^A-Za-z_]
-setlocal iskeyword+=:
+" TODO things that are not or not properly indented (yet) :
+" - Continued statements
+"     print "foo",
+"       "bar";
+"     print "foo"
+"       if bar();
+" - Multiline regular expressions (m//x)
+" (The following probably needs modifying the perl syntax file)
+" - qw() lists
+" - Heredocs with terminators that don't match \I\i*
 
-" The following line changes a global variable but is necessary to make
-" gf and similar commands work. Thanks to Andrew Pimlott for pointing
-" out the problem.
-let s:old_isfname = &isfname
-set isfname+=:
-let s:new_isfname = &isfname
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+    finish
+endif
+let b:did_indent = 1
 
-augroup perl_global_options
-  au!
-  exe "au BufEnter * if &filetype == 'perl' | let &isfname = '" . s:new_isfname . "' | endif"
-  exe "au BufLeave * if &filetype == 'perl' | let &isfname = '" . s:old_isfname . "' | endif"
-augroup END
+" Is syntax highlighting active ?
+let b:indent_use_syntax = has("syntax")
 
-" Undo the stuff we changed.
-let b:undo_ftplugin = "setlocal fo< kp< com< cms< inc< inex< def< isk<" .
-      \               " | let &isfname = '" .  s:old_isfname . "'"
-
-if get(g:, 'perl_fold', 0)
-  setlocal foldmethod=syntax
-  let b:undo_ftplugin .= " | setlocal fdm<"
+setlocal indentexpr=GetPerlIndent()
+setlocal indentkeys+=0=,0),0],0=or,0=and
+if !b:indent_use_syntax
+    setlocal indentkeys+=0=EO
 endif
 
-" Set this once, globally.
-if !exists("perlpath")
-    if executable("perl")
-      try
-	if &shellxquote != '"'
-	    let perlpath = system('perl -e "print join(q/,/,@INC)"')
-	else
-	    let perlpath = system("perl -e 'print join(q/,/,@INC)'")
-	endif
-	let perlpath = substitute(perlpath,',.$',',,','')
-      catch /E145:/
-	let perlpath = ".,,"
-      endtry
+let b:undo_indent = "setl inde< indk<"
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+function! GetPerlIndent()
+
+    " Get the line to be indented
+    let cline = getline(v:lnum)
+
+    " Indent POD markers to column 0
+    if cline =~ '^\s*=\L\@!'
+        return 0
+    endif
+
+    " Get current syntax item at the line's first char
+    let csynid = ''
+    if b:indent_use_syntax
+        let csynid = synIDattr(synID(v:lnum,1,0),"name")
+    endif
+
+    " Don't reindent POD and heredocs
+    if csynid == "perlPOD" || csynid == "perlHereDoc" || csynid =~ "^pod"
+        return indent(v:lnum)
+    endif
+
+    " Indent end-of-heredocs markers to column 0
+    if b:indent_use_syntax
+        " Assumes that an end-of-heredoc marker matches \I\i* to avoid
+        " confusion with other types of strings
+        if csynid == "perlStringStartEnd" && cline =~ '^\I\i*$'
+            return 0
+        endif
     else
-	" If we can't call perl to get its path, just default to using the
-	" current directory and the directory of the current file.
-	let perlpath = ".,,"
+        " Without syntax hints, assume that end-of-heredocs markers begin with EO
+        if cline =~ '^\s*EO'
+            return 0
+        endif
     endif
-endif
+
+    " Now get the indent of the previous perl line.
 
-" Append perlpath to the existing path value, if it is set.  Since we don't
-" use += to do it because of the commas in perlpath, we have to handle the
-" global / local settings, too.
-if &l:path == ""
-    if &g:path == ""
-        let &l:path=perlpath
+    " Find a non-blank line above the current line.
+    let lnum = prevnonblank(v:lnum - 1)
+    " Hit the start of the file, use zero indent.
+    if lnum == 0
+        return 0
+    endif
+    let line = getline(lnum)
+    let ind = indent(lnum)
+    " Skip heredocs, POD, and comments on 1st column
+    if b:indent_use_syntax
+        let skippin = 2
+        while skippin
+            let synid = synIDattr(synID(lnum,1,0),"name")
+            if (synid == "perlStringStartEnd" && line =~ '^\I\i*$')
+                        \ || (skippin != 2 && synid == "perlPOD")
+                        \ || (skippin != 2 && synid == "perlHereDoc")
+                        \ || synid == "perlComment"
+                        \ || synid =~ "^pod"
+                let lnum = prevnonblank(lnum - 1)
+                if lnum == 0
+                    return 0
+                endif
+                let line = getline(lnum)
+                let ind = indent(lnum)
+                let skippin = 1
+            else
+                let skippin = 0
+            endif
+        endwhile
     else
-        let &l:path=&g:path.",".perlpath
+        if line =~ "^EO"
+            let lnum = search("<<[\"']\\=EO", "bW")
+            let line = getline(lnum)
+            let ind = indent(lnum)
+        endif
     endif
-else
-    let &l:path=&l:path.",".perlpath
-endif
-
-let b:undo_ftplugin .= " | setlocal pa<"
-"---------------------------------------------
 
-" Change the browse dialog to show mainly Perl-related files
-if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
-    let b:browsefilter = "Perl Source Files (*.pl)\t*.pl\n" .
-		       \ "Perl Modules (*.pm)\t*.pm\n" .
-		       \ "Perl Documentation Files (*.pod)\t*.pod\n" .
-		       \ "All Files (*.*)\t*.*\n"
-    let b:undo_ftplugin .= " | unlet! b:browsefilter"
-endif
+    " Indent blocks enclosed by {}, (), or []
+    if b:indent_use_syntax
+        " Find a real opening brace
+        " NOTE: Unlike Perl character classes, we do NOT need to escape the
+        " closing brackets with a backslash.  Doing so just puts a backslash
+        " in the character class and causes sorrow.  Instead, put the closing
+        " bracket as the first character in the class.
+        let braceclass = '[][(){}]'
+        let bracepos = match(line, braceclass, matchend(line, '^\s*[])}]'))
+        while bracepos != -1
+            let synid = synIDattr(synID(lnum, bracepos + 1, 0), "name")
+            " If the brace is highlighted in one of those groups, indent it.
+            " 'perlHereDoc' is here only to handle the case '&foo(<<EOF)'.
+            if synid == ""
+                        \ || synid == "perlMatchStartEnd"
+                        \ || synid == "perlHereDoc"
+                        \ || synid == "perlBraces"
+                        \ || synid == "perlStatementIndirObj"
+                        \ || synid =~ "^perlFiledescStatement"
+                        \ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
+                let brace = strpart(line, bracepos, 1)
+                if brace == '(' || brace == '{' || brace == '['
+                    let ind = ind + shiftwidth()
+                else
+                    let ind = ind - shiftwidth()
+                endif
+            endif
+            let bracepos = match(line, braceclass, bracepos + 1)
+        endwhile
+        let bracepos = matchend(cline, '^\s*[])}]')
+        if bracepos != -1
+            let synid = synIDattr(synID(v:lnum, bracepos, 0), "name")
+            if synid == ""
+                        \ || synid == "perlMatchStartEnd"
+                        \ || synid == "perlBraces"
+                        \ || synid == "perlStatementIndirObj"
+                        \ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
+                let ind = ind - shiftwidth()
+            endif
+        endif
+    else
+        if line =~ '[{[(]\s*\(#[^])}]*\)\=$'
+            let ind = ind + shiftwidth()
+        endif
+        if cline =~ '^\s*[])}]'
+            let ind = ind - shiftwidth()
+        endif
+    endif
 
-" Proper matching for matchit plugin
-if exists("loaded_matchit") && !exists("b:match_words")
-    let b:match_skip = 's:comment\|string\|perlQQ\|perlShellCommand\|perlHereDoc\|perlSubstitution\|perlTranslation\|perlMatch\|perlFormatField'
-    let b:match_words = '\<if\>:\<elsif\>:\<else\>'
-    let b:undo_ftplugin .= " | unlet! b:match_words b:match_skip"
-endif
+    " Indent lines that begin with 'or' or 'and'
+    if cline =~ '^\s*\(or\|and\)\>'
+        if line !~ '^\s*\(or\|and\)\>'
+            let ind = ind + shiftwidth()
+        endif
+    elseif line =~ '^\s*\(or\|and\)\>'
+        let ind = ind - shiftwidth()
+    endif
 
-" Restore the saved compatibility options.
-let &cpo = s:save_cpo
-unlet s:save_cpo s:old_isfname s:new_isfname
+    return ind
+
+endfunction
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim:ts=8:sts=4:sw=4:expandtab:ft=vim
--- a/runtime/plugin/manpager.vim
+++ b/runtime/plugin/manpager.vim
@@ -1,8 +1,9 @@
 " Vim plugin for using Vim as manpager.
 " Maintainer: Enno Nagel <ennonagel+vim@gmail.com>
-" Last Change: 2022 Jun 05
+" Last Change: 2022 Jun 17
 
-command! -nargs=0 MANPAGER call s:ManPager() | delcommand MANPAGER
+" Set up the current buffer (likely read from stdin) as a manpage
+command MANPAGER call s:ManPager()
 
 function s:ManPager()
   " global options, keep these to a minimum to avoid side effects
@@ -12,11 +13,19 @@ function s:ManPager()
   if exists('+viminfofile')
     set viminfofile=NONE
   endif
-  set noswapfile 
+  syntax on
+
+  " Make this an unlisted, readonly scratch buffer
+  setlocal buftype=nofile noswapfile bufhidden=hide nobuflisted readonly
 
-  setlocal ft=man
-  runtime ftplugin/man.vim
-  setlocal buftype=nofile bufhidden=hide iskeyword+=: modifiable
+  " Is this useful?  Should allow for using K on word with a colon.
+  setlocal iskeyword+=:
+
+  " Ensure text width matches window width
+  setlocal foldcolumn& nofoldenable nonumber norelativenumber
+
+  " In case Vim was invoked with -M
+  setlocal modifiable
 
   " Emulate 'col -b'
   silent! keepj keepp %s/\v(.)\b\ze\1?//ge
@@ -30,7 +39,11 @@ function s:ManPager()
   if n > 1
     exe "1," . n-1 . "d"
   endif
-  setlocal nomodifiable nomodified readonly nowrite
+
+  " Finished preprocessing the buffer, prevent any further modifications
+  setlocal nomodified nomodifiable
 
-  syntax on
+  " Set filetype to man even if ftplugin is disabled
+  setlocal iskeyword+=: filetype=man
+  runtime ftplugin/man.vim
 endfunction
--- a/runtime/syntax/coco.vim
+++ b/runtime/syntax/coco.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:     Coco/R
 " Maintainer:   Ashish Shukla <wahjava@gmail.com>
-" Last Change:  2007 Aug 10
+" Last Change:  2022 Jun 14
 " Remark:       Coco/R syntax partially implemented.
 " License:      Vim license
 
@@ -30,3 +30,4 @@ hi def link cocoOperator         Operato
 hi def link cocoProductionCode   Statement
 hi def link cocoPragma           Special
 
+let b:current_syntax = 'coco'
--- a/runtime/syntax/dirpager.vim
+++ b/runtime/syntax/dirpager.vim
@@ -6,7 +6,7 @@
 " Description:	  display directory content inside Vim with syntax
 "		  highlighting
 " File:		  runtime/syntax/dirpager.vim
-" Last Change:	  2012 May 19
+" Last Change:	  2022 Jun 14
 " Modeline:	  vim: ts=8:sw=2:sts=2:
 "
 " Credits:	  dirpager.vim is derived from Nikolai Weibulls dircolors.vim
--- a/runtime/syntax/dts.vim
+++ b/runtime/syntax/dts.vim
@@ -1,11 +1,12 @@
 " Vim syntax file
 " Language:	dts/dtsi (device tree files)
 " Maintainer:	Daniel Mack <vim@zonque.org>
-" Last Change:	2021 May 15
+" Last Change:	2022 Jun 14
 
 if exists("b:current_syntax")
   finish
 endif
+let b:current_syntax = 'dts'
 
 syntax region dtsComment        start="/\*"  end="\*/"
 syntax match  dtsReference      "&[[:alpha:][:digit:]_]\+"
--- a/runtime/syntax/icon.vim
+++ b/runtime/syntax/icon.vim
@@ -1,199 +1,211 @@
 " Vim syntax file
-" Language:	Icon
-" Maintainer:	Wendell Turner <wendell@adsi-m4.com>
-" URL:		ftp://ftp.halcyon.com/pub/users/wturner/icon.vim
-" Last Change:	2003 May 11
+" Language:		Icon
+" Maintainer:		Doug Kearns <dougkearns@gmail.com>
+" Previous Maintainer:	Wendell Turner <wendell@adsi-m4.com> (invalid last known address)
+" Last Change:		2022 Jun 16
+" Contributor:		eschen@alumni.princeton.edu 2002.09.18
 
-" quit when a syntax file was already loaded
+" Prelude {{{1
 if exists("b:current_syntax")
   finish
 endif
 
-syn keyword  iconFunction   abs acos any args asin atan bal
-syn keyword  iconFunction   callout center char chdir close collect copy
-syn keyword  iconFunction   cos cset delay delete detab display dtor
-syn keyword  iconFunction   entab errorclear exit exp find flush function
-syn keyword  iconFunction   get getch getche getenv iand icom image
-syn keyword  iconFunction   insert integer ior ishift ixor kbhit key
-syn keyword  iconFunction   left list loadfunc log many map match
-syn keyword  iconFunction   member move name numeric open ord pop
-syn keyword  iconFunction   pos proc pull push put read reads
-syn keyword  iconFunction   real remove rename repl reverse right rtod
-syn keyword  iconFunction   runerr save seek seq set sin sort
-syn keyword  iconFunction   sortf sqrt stop string system tab table
-syn keyword  iconFunction   tan trim type upto variable where write writes
+syn iskeyword @,48-57,_,192-255,&
+
+" Not Top {{{1
+syn cluster iconNotTop contains=iconDocField,iconIncluded,iconStringSpecial,iconTodo,@Spell
+
+" Whitespace errors {{{1
+if exists("icon_space_errors")
+  if !exists("icon_no_trail_space_error")
+    syn match iconSpaceError "\s\+$"       display excludenl
+  endif
+  if !exists("icon_no_tab_space_error")
+    syn match iconSpaceError " \+\t"me=e-1 display
+  endif
+endif
 
-" Keywords
-syn match iconKeyword "&allocated"
-syn match iconKeyword "&ascii"
-syn match iconKeyword "&clock"
-syn match iconKeyword "&collections"
-syn match iconKeyword "&cset"
-syn match iconKeyword "&current"
-syn match iconKeyword "&date"
-syn match iconKeyword "&dateline"
-syn match iconKeyword "&digits"
-syn match iconKeyword "&dump"
-syn match iconKeyword "&e"
-syn match iconKeyword "&error"
-syn match iconKeyword "&errornumber"
-syn match iconKeyword "&errortext"
-syn match iconKeyword "&errorvalue"
-syn match iconKeyword "&errout"
-syn match iconKeyword "&fail"
-syn match iconKeyword "&features"
-syn match iconKeyword "&file"
-syn match iconKeyword "&host"
-syn match iconKeyword "&input"
-syn match iconKeyword "&lcase"
-syn match iconKeyword "&letters"
-syn match iconKeyword "&level"
-syn match iconKeyword "&line"
-syn match iconKeyword "&main"
-syn match iconKeyword "&null"
-syn match iconKeyword "&output"
-syn match iconKeyword "&phi"
-syn match iconKeyword "&pi"
-syn match iconKeyword "&pos"
-syn match iconKeyword "&progname"
-syn match iconKeyword "&random"
-syn match iconKeyword "&regions"
-syn match iconKeyword "&source"
-syn match iconKeyword "&storage"
-syn match iconKeyword "&subject"
-syn match iconKeyword "&time"
-syn match iconKeyword "&trace"
-syn match iconKeyword "&ucase"
-syn match iconKeyword "&version"
+" Reserved words {{{1
+syn keyword iconReserved break by case create default do else every fail if
+syn keyword iconReserved initial next not of repeat return suspend then to
+syn keyword iconReserved until while
+
+syn keyword iconStorageClass global static local record invocable
 
-" Reserved words
-syn keyword iconReserved break by case create default do
-syn keyword iconReserved else end every fail if
-syn keyword iconReserved initial link next not of
-syn keyword iconReserved procedure repeat return suspend
-syn keyword iconReserved then to until while
-
-" Storage class reserved words
-syn keyword	iconStorageClass	global static local record
-
-syn keyword	iconTodo	contained TODO FIXME XXX BUG
+syn keyword iconLink link
 
-" String and Character constants
-" Highlight special characters (those which have a backslash) differently
-syn match iconSpecial contained "\\x\x\{2}\|\\\o\{3\}\|\\[bdeflnrtv\"\'\\]\|\\^c[a-zA-Z0-9]\|\\$"
-syn region	iconString	start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=iconSpecial
-syn region	iconCset	start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=iconSpecial
-syn match	iconCharacter	"'[^\\]'"
-
-" not sure about these
-"syn match	iconSpecialCharacter "'\\[bdeflnrtv]'"
-"syn match	iconSpecialCharacter "'\\\o\{3\}'"
-"syn match	iconSpecialCharacter "'\\x\x\{2}'"
-"syn match	iconSpecialCharacter "'\\^c\[a-zA-Z0-9]'"
-
-"when wanted, highlight trailing white space
-if exists("icon_space_errors")
-  syn match	iconSpaceError	"\s*$"
-  syn match	iconSpaceError	" \+\t"me=e-1
+" Procedure definitions {{{1
+if exists("icon_no_procedure_fold")
+  syn region iconProcedure matchgroup=iconReserved start="\<procedure\>" end="\<end\>" contains=ALLBUT,@iconNotTop
+else
+  syn region iconProcedure matchgroup=iconReserved start="\<procedure\>" end="\<end\>" contains=ALLBUT,@iconNotTop fold
 endif
 
-"catch errors caused by wrong parenthesis
-syn cluster	iconParenGroup contains=iconParenError,iconIncluded,iconSpecial,iconTodo,iconUserCont,iconUserLabel,iconBitField
+" Keywords {{{1
+syn keyword iconKeyword &allocated &ascii &clock &collections &cset &current
+syn keyword iconKeyword &date &dateline &digits &dump &e &error &errornumber
+syn keyword iconKeyword &errortext &errorvalue &errout &fail &features &file
+syn keyword iconKeyword &host &input &lcase &letters &level &line &main &null
+syn keyword iconKeyword &output &phi &pi &pos &progname &random &regions
+syn keyword iconKeyword &source &storage &subject &time &trace &ucase &version
+
+" Graphics keywords
+syn keyword iconKeyword &col &control &interval &ldrag &lpress &lrelease
+syn keyword iconKeyword &mdrag &meta &mpress &mrelease &rdrag &resize &row
+syn keyword iconKeyword &rpress &rrelease &shift &window &x &y
+
+" Functions {{{1
+syn keyword iconFunction abs acos any args asin atan bal callout center char
+syn keyword iconFunction chdir close collect copy cos cset delay delete detab
+syn keyword iconFunction display dtor entab errorclear exit exp find flush
+syn keyword iconFunction function get getch getche getenv iand icom image
+syn keyword iconFunction insert integer ior ishift ixor kbhit key left list
+syn keyword iconFunction loadfunc log many map match member move name numeric
+syn keyword iconFunction open ord pop pos proc pull push put read reads real
+syn keyword iconFunction remove rename repl reverse right rtod runerr save
+syn keyword iconFunction seek self seq serial set sin sort sortf sqrt stop
+syn keyword iconFunction string system tab table tan trim type upto variable
+syn keyword iconFunction where write writes
 
-syn region	iconParen	transparent start='(' end=')' contains=ALLBUT,@iconParenGroup
-syn match	iconParenError	")"
-syn match	iconInParen	contained "[{}]"
+" Graphics functions
+syn keyword iconFunction Active Alert Bg CenterString Clip Clone Color
+syn keyword iconFunction ColorDialog ColorValue CopyArea Couple DrawArc
+syn keyword iconFunction DrawCircle DrawCurve DrawImage DrawLine DrawPoint
+syn keyword iconFunction DrawPolygon DrawRectangle DrawSegment DrawString
+syn keyword iconFunction Enqueue EraseArea Event Fg FillArc FillCircle
+syn keyword iconFunction FillPolygon FillRectangle Font FreeColor GotoRC
+syn keyword iconFunction GotoXY LeftString Lower NewColor Notice OpenDialog
+syn keyword iconFunction PaletteChars PaletteColor PaletteGrays PaletteKey
+syn keyword iconFunction Pattern Pending Pixel Raise ReadImage RightString
+syn keyword iconFunction SaveDialog SelectDialog Shade TextDialog TextWidth
+syn keyword iconFunction ToggleDialog Uncouple WAttrib WClose WDefault WDelay
+syn keyword iconFunction WDone WFlush WOpen WQuit WRead WReads WriteImage
+syn keyword iconFunction WSync WWrite WWrites
+
+" String and character constants {{{1
+syn match  iconStringSpecial "\\x\x\{2}\|\\\o\{3\}\|\\[bdeflnrtv\"\'\\]\|\\^[a-zA-Z0-9]" contained 
+syn match  iconStringSpecial "\\$"							 contained
+syn match  iconStringSpecial "_\ze\s*$"						         contained
 
+syn region iconString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=iconStringSpecial
+syn region iconCset   start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=iconStringSpecial
 
+" Bracket errors {{{1
+
+if !exists("icon_no_bracket_errors")
+  " catch errors caused by wrong brackets (ACE 2002.09.18)
+  syn cluster iconBracketGroup contains=iconBracketError,iconIncluded
+  syn region  iconBracket      start='\[' end='\]' contains=ALLBUT,@iconBracketGroup,@iconNotTop transparent 
+  syn match   iconBracketError "]"
+  
+  "catch errors caused by wrong braces (ACE 2002.09.18)
+  syn cluster iconBraceGroup contains=iconBraceError,iconIncluded
+  syn region  iconBrace	     start='{' end='}' contains=ALLBUT,@iconBraceGroup,@iconNotTop transparent 
+  syn match   iconBraceError "}"
+  
+  "catch errors caused by wrong parenthesis
+  syn cluster iconParenGroup contains=iconParenError,iconIncluded
+  syn region  iconParen	     start='(' end=')' contains=ALLBUT,@iconParenGroup,@iconNotTop transparent 
+  syn match   iconParenError ")"
+end
+
+" Numbers {{{1
 syn case ignore
 
-"integer number, or floating point number without a dot
-syn match	iconNumber		"\<\d\+\>"
+" integer
+syn match iconInteger "\<\d\+\>"
+syn match iconInteger "\<\d\{1,2}[rR][a-zA-Z0-9]\+\>"
 
-"floating point number, with dot, optional exponent
-syn match	iconFloat		"\<\d\+\.\d*\(e[-+]\=\d\+\)\=\>"
-
-"floating point number, starting with a dot, optional exponent
-syn match	iconFloat		"\.\d\+\(e[-+]\=\d\+\)\=\>"
+" real with trailing dot
+syn match iconReal    "\<\d\+\."
 
-"floating point number, without dot, with exponent
-syn match	iconFloat		"\<\d\+e[-+]\=\d\+\>"
+" real, with dot, optional exponent
+syn match iconReal    "\<\d\+\.\d*\%(e[-+]\=\d\+\)\=\>"
 
-"radix number
-syn match	iconRadix		"\<\d\{1,2}[rR][a-zA-Z0-9]\+\>"
+" real, with leading dot, optional exponent
+syn match iconReal    "\.\d\+\%(e[-+]\=\d\+\)\=\>"
 
+" real, without dot, with exponent
+syn match iconReal    "\<\d\+e[-+]\=\d\+\>"
 
-" syn match iconIdentifier	"\<[a-z_][a-z0-9_]*\>"
+syn cluster iconNumber contains=iconInteger,iconReal
 
 syn case match
 
-" Comment
-syn match	iconComment	"#.*" contains=iconTodo,iconSpaceError
-
-syn region	iconPreCondit start="^\s*$\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=iconComment,iconString,iconCharacter,iconNumber,iconCommentError,iconSpaceError
+" Comments {{{1
+syn keyword iconTodo	 TODO FIXME XXX BUG contained
+syn match   iconComment	 "#.*" contains=iconTodo,iconSpaceError,@Spell
+syn match   iconDocField "^#\s\+\zs\%(File\|Subject\|Authors\=\|Date\|Version\|Links\|Requires\|See also\):" contained
 
-syn region	iconIncluded	contained start=+"+ skip=+\\\\\|\\"+ end=+"+
-syn match	iconIncluded	contained "<[^>]*>"
-syn match	iconInclude	"^\s*$\s*include\>\s*["<]" contains=iconIncluded
-"syn match iconLineSkip	"\\$"
+if exists("icon_no_comment_fold")
+  syn region iconDocumentation	  start="\%^#\{2,}\%(\n#\+\%(\s\+.*\)\=\)\+"   end="^#\+\n\s*$"		  contains=iconDocField keepend
+else
+  syn region iconMultilineComment start="^\s*#.*\n\%(^\s*#\)\@=" end="^\s*#.*\n\%(^\s*#\)\@!" contains=iconComment  keepend fold transparent 
+  syn region iconDocumentation	  start="\%^#\{2,}\%(\n#\)\+"	 end="^#\+\n\%([^#]\|$\)"     contains=iconDocField keepend fold
+endif
+
+" Preprocessor {{{1
+syn match iconPreInclude  '^\s*\zs$\s*include\>\ze\s*"' nextgroup=iconIncluded skipwhite
+syn match iconIncluded '"[^"]\+"' contained
 
-syn cluster	iconPreProcGroup contains=iconPreCondit,iconIncluded,iconInclude,iconDefine,iconInParen,iconUserLabel
+syn region iconPreDefine      start="^\s*\zs$\s*\%(define\|undef\)\>"			     end="$" oneline contains=ALLBUT,@iconPreGroup
+syn region iconPreProc	      start="^\s*\zs$\s*\%(error\|line\)\>"			     end="$" oneline contains=ALLBUT,@iconPreGroup
+syn region iconPreConditional start="^\s*\zs$\s*\%(if\|ifdef\|ifndef\|elif\|else\|endif\)\>" end="$" oneline contains=iconComment,iconString,iconCset,iconNumber,iconSpaceError
 
-syn region	iconDefine	start="^\s*$\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,@iconPreProcGroup
-
-"wt:syn region	iconPreProc "start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" "end="$" contains=ALLBUT,@iconPreProcGroup
+syn cluster iconPreGroup contains=iconPreCondit,iconPreInclude,iconIncluded,iconPreDefine
 
-" Highlight User Labels
+syn match   iconPreSymbol "_V\d\+"
+syn keyword iconPreSymbol _ACORN _AMIGA _ARM_FUNCTIONS _ASCII _CALLING
+syn keyword iconPreSymbol _CO_EXPRESSIONS _COMPILED _DIRECT_EXECUTION
+syn keyword iconPreSymbol _DOS_FUNCTIONS _EBCDIC _EVENT_MONITOR
+syn keyword iconPreSymbol _EXECUTABLE_IMAGES _EXTERNAL_FUNCTIONS
+syn keyword iconPreSymbol _EXTERNAL_VALUES _INTERPRETED _KEYBOARD_FUNCTIONS
+syn keyword iconPreSymbol _LARGE_INTEGERS _MACINTOSH _MEMORY_MONITOR _MSDOS
+syn keyword iconPreSymbol _MSDOS_386 _MULTIREGION _MULTITASKING _OS2 _PIPES
+syn keyword iconPreSymbol _PORT _PRESENTATION_MGR _RECORD_IO _STRING_INVOKE
+syn keyword iconPreSymbol _SYSTEM_FUNCTION _UNIX _VISUALIZATION _VMS
+syn keyword iconPreSymbol _WINDOW_FUNCTIONS _X_WINDOW_SYSTEM 
 
-" syn cluster	iconMultiGroup contains=iconIncluded,iconSpecial,iconTodo,iconUserCont,iconUserLabel,iconBitField
-
+" Syncing {{{1
 if !exists("icon_minlines")
-  let icon_minlines = 15
+  let icon_minlines = 250
 endif
 exec "syn sync ccomment iconComment minlines=" . icon_minlines
 
-" Define the default highlighting.
-
-" Only when an item doesn't have highlighting
-
-" The default methods for highlighting.  Can be overridden later
-
-" hi def link iconSpecialCharacter	iconSpecial
+" Default Highlighting  {{{1
 
-hi def link iconOctalError		iconError
-hi def link iconParenError		iconError
-hi def link iconInParen		iconError
-hi def link iconCommentError	iconError
-hi def link iconSpaceError		iconError
-hi def link iconCommentError	iconError
-hi def link iconIncluded		iconString
-hi def link iconCommentString	iconString
-hi def link iconComment2String	iconString
-hi def link iconCommentSkip	iconComment
+hi def link iconParenError	iconError
+hi def link iconBracketError	iconError
+hi def link iconBraceError	iconError
+hi def link iconSpaceError	iconError
+hi def link iconError		Error
+
+hi def link iconInteger		Number
+hi def link iconReal		Float
+hi def link iconString		String
+hi def link iconCset		String
+hi def link iconStringSpecial	SpecialChar
 
-hi def link iconUserLabel		Label
-hi def link iconCharacter		Character
-hi def link iconNumber			Number
-hi def link iconRadix			Number
-hi def link iconFloat			Float
-hi def link iconInclude		Include
 hi def link iconPreProc		PreProc
-hi def link iconDefine			Macro
-hi def link iconError			Error
-hi def link iconStatement		Statement
-hi def link iconPreCondit		PreCondit
-hi def link iconString			String
-hi def link iconCset			String
+hi def link iconIncluded	iconString
+hi def link iconPreInclude	Include
+hi def link iconPreSymbol	iconPreProc
+hi def link iconPreDefine	Define
+hi def link iconPreConditional	PreCondit
+
+hi def link iconStatement	Statement
+hi def link iconStorageClass	StorageClass
+hi def link iconFunction	Function
+hi def link iconReserved	Label
+hi def link iconLink		Include
+hi def link iconKeyword		Keyword
+
 hi def link iconComment		Comment
-hi def link iconSpecial		SpecialChar
-hi def link iconTodo			Todo
-hi def link iconStorageClass	StorageClass
-hi def link iconFunction		Statement
-hi def link iconReserved		Label
-hi def link iconKeyword		Operator
+hi def link iconTodo		Todo
+hi def link iconDocField	SpecialComment
+hi def link iconDocumentation	Comment
 
-"hi def link iconIdentifier	Identifier
-
-
+" Postscript  {{{1
 let b:current_syntax = "icon"
 
+" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
--- a/runtime/syntax/initng.vim
+++ b/runtime/syntax/initng.vim
@@ -20,7 +20,6 @@ endif
 syn case match
 
 let is_bash = 1
-unlet! b:current_syntax
 syn include @shTop syntax/sh.vim
 
 syn region	initngService			matchgroup=initngServiceHeader start="^\s*\(service\|virtual\|daemon\|class\|cron\)\s\+\(\(\w\|[-/*]\)\+\(\s\+:\s\+\(\w\|[-/*]\)\+\)\?\)\s\+{" end="}" contains=@initngServiceCluster
--- a/runtime/syntax/ipfilter.vim
+++ b/runtime/syntax/ipfilter.vim
@@ -1,7 +1,7 @@
 " ipfilter syntax file
 " Language: ipfilter configuration file
 " Maintainer: Hendrik Scholz <hendrik@scholz.net>
-" Last Change: 2005 Jan 27
+" Last Change: 2022 Jun 14
 "
 " http://www.wormulon.net/files/misc/ipfilter.vim
 "
@@ -52,3 +52,4 @@ hi def link IPFNetmask	String
 hi def link IPFAny		Statement
 hi def link IPFProto	Identifier
 
+let b:current_syntax = 'ipfilter'
--- a/runtime/syntax/mupad.vim
+++ b/runtime/syntax/mupad.vim
@@ -279,5 +279,6 @@ hi def link mupadType		Type
 hi def link mupadDefine		Define
 hi def link mupadIdentifier	Identifier
 
+let b:current_syntax = 'mupad'
 
 " TODO  More comprehensive listing.
--- a/runtime/syntax/perl.vim
+++ b/runtime/syntax/perl.vim
@@ -4,7 +4,7 @@
 " Homepage:      https://github.com/vim-perl/vim-perl
 " Bugs/requests: https://github.com/vim-perl/vim-perl/issues
 " License:       Vim License (see :help license)
-" Last Change:   2021 Oct 7
+" Last Change:   2022 Jun 13
 " Contributors:  Andy Lester <andy@petdance.com>
 "                Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
 "                Lukas Mai <l.mai.web.de>
@@ -442,11 +442,18 @@ syn match  perlFormatField	"@$" containe
 " This problem also exists with empty string delimited heredocs but there's no
 " known workaround for that case.
 if get(g:, 'perl_fold', 0)
-  syntax region perlDATA matchgroup=perlDATAStart start="^__DATA__$" end="VIM_PERL_EOF\%$" contains=perlPOD,@perlDATA fold
-  syntax region perlEND  matchgroup=perlENDStart  start="^__END__$"  end="VIM_PERL_EOF\%$" contains=perlPOD,@perlDATA fold
+  syntax region perlDATA matchgroup=perlDATAStart start="^__DATA__$" end="VIM_PERL_EOF\%$" contains=@perlDATA fold
+  syntax region perlEND  matchgroup=perlENDStart  start="^__END__$"  end="VIM_PERL_EOF\%$" contains=@perlDATA fold
 else
-  syntax region perlDATA matchgroup=perlDATAStart start="^__DATA__$" end="\%$" contains=perlPOD,@perlDATA
-  syntax region perlEND  matchgroup=perlENDStart  start="^__END__$"  end="\%$" contains=perlPOD,@perlDATA
+  syntax region perlDATA matchgroup=perlDATAStart start="^__DATA__$" end="\%$" contains=@perlDATA
+  syntax region perlEND  matchgroup=perlENDStart  start="^__END__$"  end="\%$" contains=@perlDATA
+endif
+
+" TODO: generalise this to allow other filetypes
+if get(g:, 'perl_highlight_data', 0)
+  syn cluster perlDATA add=perlPOD
+else
+  syn cluster perlDATA remove=perlPOD
 endif
 
 "
--- a/runtime/syntax/pod.vim
+++ b/runtime/syntax/pod.vim
@@ -5,7 +5,7 @@
 " Homepage:      https://github.com/vim-perl/vim-perl
 " Bugs/requests: https://github.com/vim-perl/vim-perl/issues
 " License:       Vim License (see :help license)
-" Last Change:   2021 Oct 8
+" Last Change:   2022 Jun 13
 
 " To add embedded POD documentation highlighting to your syntax file, add
 " the commands:
--- a/runtime/syntax/sendpr.vim
+++ b/runtime/syntax/sendpr.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language: FreeBSD send-pr file
 " Maintainer: Hendrik Scholz <hendrik@scholz.net>
-" Last Change: 2012 Feb 03
+" Last Change: 2022 Jun 14
 "
 " http://raisdorf.net/files/misc/send-pr.vim
 
@@ -31,5 +31,7 @@ hi def link sendprType      Type
 hi def link sendprString    String
 hi def link sendprLabel     Label
 
+let b:current_syntax = 'sendpr'
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
--- a/runtime/syntax/tar.vim
+++ b/runtime/syntax/tar.vim
@@ -14,4 +14,6 @@ hi def link tarComment	Comment
 hi def link tarFilename	Constant
 hi def link tarDirectory Type
 
+let b:current_syntax = 'tar'
+
 " vim: ts=8
--- a/runtime/syntax/trustees.vim
+++ b/runtime/syntax/trustees.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:     trustees
 " Maintainer:   Nima Talebi <nima@it.net.au>
-" Last Change:  2005-10-12
+" Last Change:  2022 Jun 14
 
 " quit when a syntax file was already loaded
 if exists("b:current_syntax")
@@ -40,3 +40,5 @@ syntax match tfsRuleWho ~\(\*\|[+]\{0,1\
 highlight link tfsRuleWho Identifier
 syntax match tfsRuleWhat ~[RWEBXODCU!]\+~ contained contains=tfsSpecialChar
 highlight link tfsRuleWhat Structure
+
+let b:current_syntax = 'trustees'
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Vim 8.2 script
 " Maintainer:	Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
-" Last Change:	June 12, 2022
-" Version:	8.2-44
+" Last Change:	Jun 16, 20222
+" Version:	8.2-46
 " URL:	http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
 " Automatically generated keyword lists: {{{1
 
@@ -73,7 +73,7 @@ syn keyword vimAutoEvent contained	BufCr
 syn keyword vimGroup contained	Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo
 
 " Default highlighting groups {{{2
-syn keyword vimHLGroup contained	ColorColumn CurSearch Cursor CursorColumn CursorIM CursorLine CursorLineFold CursorLineNr CursorLineSign DiffAdd DiffChange DiffDelete DiffText Directory EndOfBuffer ErrorMsg FoldColumn Folded IncSearch LineNr LineNrAbove LineNrBelow MatchParen Menu ModeMsg MoreMsg NonText Normal Pmenu PmenuSbar PmenuSel PmenuThumb Question QuickFixLine Scrollbar Search SignColumn SpecialKey SpellBad SpellCap SpellLocal SpellRare StatusLine StatusLineNC StatusLineTerm TabLine TabLineFill TabLineSel Terminal Title Tooltip VertSplit Visual VisualNOS WarningMsg WildMenu
+syn keyword vimHLGroup contained	ColorColumn CurSearch Cursor CursorColumn CursorIM CursorLine CursorLineFold CursorLineNr CursorLineSign DiffAdd DiffChange DiffDelete DiffText Directory EndOfBuffer ErrorMsg FoldColumn Folded IncSearch LineNr LineNrAbove LineNrBelow MatchParen Menu ModeMsg MoreMsg NonText Normal Pmenu PmenuSbar PmenuSel PmenuThumb Question QuickFixLine Scrollbar Search SignColumn SpecialKey SpellBad SpellCap SpellLocal SpellRare StatusLine StatusLineNC StatusLineTerm StatusLineTermNC TabLine TabLineFill TabLineSel Terminal Title Tooltip VertSplit Visual VisualNOS WarningMsg WildMenu
 syn match vimHLGroup contained	"Conceal"
 syn case match
 
@@ -465,8 +465,8 @@ syn case match
 " User Function Highlighting: {{{2
 " (following Gautam Iyer's suggestion)
 " ==========================
-syn match vimFunc		"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("		contains=vimCommand,vimFuncEcho,vimFuncName,vimUserFunc,vimExecute
-syn match vimUserFunc contained	"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"	contains=vimCommand,vimNotation
+syn match vimFunc		"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("		contains=vimFuncEcho,vimFuncName,vimUserFunc,vimExecute
+syn match vimUserFunc contained	"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"	contains=vimNotation
 syn keyword vimFuncEcho contained	ec ech echo
 
 " User Command Highlighting: {{{2
--- a/src/po/ca.po
+++ b/src/po/ca.po
@@ -7,7 +7,7 @@ msgstr ""
 "Project-Id-Version: vim 8.2\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-03-13 14:14+0100\n"
-"PO-Revision-Date: 2022-03-15 19:03+0100\n"
+"PO-Revision-Date: 2022-05-15 19:03+0100\n"
 "Last-Translator: Ernest Adrogué <nr9@posteo.net>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
 "Language: ca\n"
@@ -4116,9 +4116,8 @@ msgid "E55: Unmatched %s)"
 msgstr "E55: %s) desequilibrat"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E59: Invalid character after %s@"
-msgstr "E59: caràcter no vàlid després de %s@"
+msgstr "E59: Caràcter no vàlid després de %s@"
 
 # complex braces
 #, c-format
@@ -4134,7 +4133,6 @@ msgstr "E61: %s* imbricats"
 msgid "E62: Nested %s%c"
 msgstr "E62: %s%c imbricats"
 
-# TODO: Capitalise first word of message?
 msgid "E63: Invalid use of \\_"
 msgstr "E63: Ús invàlid de \\_"
 
@@ -4169,7 +4167,6 @@ msgstr "E71: Caràcter invàlid després de %s%%"
 msgid "E72: Close error on swap file"
 msgstr "E72: Error en tancar el fitxer d'intercanvi"
 
-# TODO: Capitalise first word of message?
 msgid "E73: Tag stack empty"
 msgstr "E73: La pila d'etiquetes està buida"
 
@@ -4415,7 +4412,6 @@ msgstr "E142: No s'ha escrit el fitxer: El paràmetre 'write' ho impedeix"
 msgid "E143: Autocommands unexpectedly deleted new buffer %s"
 msgstr "E143: Una ordre automàtica ha eliminat el nou buffer %s"
 
-# TODO: Capitalise first word of message?
 msgid "E144: Non-numeric argument to :z"
 msgstr "E144: Argument no numèric a :z"
 
@@ -4545,9 +4541,8 @@ msgid "E178: Invalid default value for c
 msgstr "E178: El valor per omissió del paràmetre de quantitat no és vàlid"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E179: Argument required for %s"
-msgstr "E179: l'atribut %s requereix un argument"
+msgstr "E179: L'atribut %s requereix un argument"
 
 #, c-format
 msgid "E180: Invalid complete value: %s"
@@ -4638,9 +4633,8 @@ msgstr "E204: Una ordre automàtica ha canviat el nombre de línies"
 msgid "E205: Patchmode: can't save original file"
 msgstr "E205: patchmode: no s'ha pogut desar el fitxer original"
 
-# TODO: Capitalise first word of message?
 msgid "E206: Patchmode: can't touch empty original file"
-msgstr "E206: patchmode: no s'ha pogut tocar el fitxer original buit"
+msgstr "E206: Patchmode: No s'ha pogut tocar el fitxer original buit"
 
 msgid "E207: Can't delete backup file"
 msgstr "E207: No s'ha pogut eliminar la còpia de seguretat"
@@ -4686,9 +4680,8 @@ msgstr "E216: No existeix tal grup o esd
 msgid "E217: Can't execute autocommands for ALL events"
 msgstr "E217: No es pot assignar una ordre a TOTS els esdeveniments"
 
-# TODO: Capitalise first word of message?
 msgid "E218: Autocommand nesting too deep"
-msgstr "E218: nivell d'imbricació d'ordres automàtiques massa elevat"
+msgstr "E218: Nivell d'imbricació d'ordres automàtiques massa elevat"
 
 msgid "E219: Missing {."
 msgstr "E219: Falta un {."
@@ -4703,29 +4696,24 @@ msgstr "E221: Una marca no pot començar amb una lletra en minúscula"
 msgid "E222: Add to internal buffer that was already read from"
 msgstr "E222: Addició a un buffer intern del qual ja s'havia llegit"
 
-# TODO: Capitalise first word of message?
 msgid "E223: Recursive mapping"
-msgstr "E223: assignació recursiva"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E223: Assignació recursiva"
+
+#, c-format
 msgid "E224: Global abbreviation already exists for %s"
-msgstr "E224: ja existeix una abreviació global per a %s"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E224: Ja existeix una abreviació global per a %s"
+
+#, c-format
 msgid "E225: Global mapping already exists for %s"
-msgstr "E225: ja existeix una assignació global per a %s"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E225: Ja existeix una assignació global per a %s"
+
+#, c-format
 msgid "E226: Abbreviation already exists for %s"
-msgstr "E226: ja existeix una abreviació per a %s"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E226: Ja existeix una abreviació per a %s"
+
+#, c-format
 msgid "E227: Mapping already exists for %s"
-msgstr "E227: ja existeix una assignació per a %s"
+msgstr "E227: Ja existeix una assignació per a %s"
 
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap: Mode il·legal"
@@ -4743,7 +4731,6 @@ msgstr "E231: El valor de 'guifontwide' no és vàlid"
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232: No es pot crear un BalloonEval amb missatge i callback alhora"
 
-# TODO: Capitalise first word of message?
 msgid "E233: Cannot open display"
 msgstr "E233: No s'ha pogut obrir la pantalla"
 
@@ -4796,16 +4783,14 @@ msgid "E246: FileChangedShell autocomman
 msgstr "E246: L'ordre automàtica FileChangedShell ha eliminat el buffer"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E247: No registered server named \"%s\""
-msgstr "E247: cap servidor registrat amb aquest nom \"%s\""
+msgstr "E247: Cap servidor registrat amb aquest nom \"%s\""
 
 msgid "E248: Failed to send command to the destination program"
 msgstr "E248: No s'ha pogut enviar l'ordre al programa destinatari"
 
-# TODO: Capitalise first word of message?
 msgid "E249: Window layout changed unexpectedly"
-msgstr "E249: la disposició de les finestres ha canviat inesperadament"
+msgstr "E249: La disposició de les finestres ha canviat inesperadament"
 
 #, c-format
 msgid "E250: Fonts for the following charsets are missing in fontset %s:"
@@ -4829,7 +4814,6 @@ msgstr "E254: No s'ha pogut assignar memòria per al color %s"
 msgid "E255: Couldn't read in sign data"
 msgstr "E255: Error en llegir les dades de senyals"
 
-# TODO: Capitalise first word of message?
 msgid "E257: cstag: Tag not found"
 msgstr "E257: cstag: No s'ha trobat l'etiqueta"
 
@@ -4837,20 +4821,17 @@ msgid "E258: Unable to send to client"
 msgstr "E258: No s'ha pogut enviar al client"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E259: No matches found for cscope query %s of %s"
-msgstr "E259: no hi ha coincidències per la cerca cscope %s de %s"
+msgstr "E259: No hi ha coincidències per la cerca cscope %s de %s"
 
 msgid "E260: Missing name after ->"
 msgstr "E260: Falta un nom després de ->"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E261: Cscope connection %s not found"
-msgstr "E261: no s'ha trobat la connexió cscope %s"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E261: No s'ha trobat la connexió cscope %s"
+
+#, c-format
 msgid "E262: Error reading cscope connection %d"
 msgstr "E262: Error en llegir la connexió cscope %d"
 
@@ -4869,34 +4850,27 @@ msgid ""
 "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
 msgstr "E266: Ordre no disponible, no s'ha carregat la biblioteca Ruby."
 
-# TODO: Capitalise first word of message?
 msgid "E267: Unexpected return"
-msgstr "E267: retorn inesperat"
-
-# TODO: Capitalise first word of message?
+msgstr "E267: 'return' inesperat"
+
 msgid "E268: Unexpected next"
 msgstr "E268: 'next' inesperat"
 
-# TODO: Capitalise first word of message?
 msgid "E269: Unexpected break"
 msgstr "E269: 'break' inesperat"
 
-# TODO: Capitalise first word of message?
 msgid "E270: Unexpected redo"
 msgstr "E270: 'redo' inesperat"
 
-# TODO: Capitalise first word of message?
 msgid "E271: Retry outside of rescue clause"
 msgstr "E271: 'retry' fora d'una clàusula de rescat"
 
-# TODO: Capitalise first word of message?
 msgid "E272: Unhandled exception"
-msgstr "E272: excepció no conduïda"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E272: Excepció no conduïda"
+
+#, c-format
 msgid "E273: Unknown longjmp status %d"
-msgstr "E273: estat de longjmp %d desconegut"
+msgstr "E273: Estat de longjmp %d desconegut"
 
 msgid "E274: No white space allowed before parenthesis"
 msgstr "E274: No es permeten espais abans d'un parentesis"
@@ -4939,13 +4913,11 @@ msgstr "E286: Error en obrir el mètode d'entrada"
 msgid "E287: Warning: Could not set destroy callback to IM"
 msgstr "E287: Atenció: Error en establir el callback de destrucció de l'IM"
 
-# TODO: Capitalise first word of message?
 msgid "E288: Input method doesn't support any style"
-msgstr "E288: el mètode d'entrada no suporta cap estil"
-
-# TODO: Capitalise first word of message?
+msgstr "E288: El mètode d'entrada no suporta cap estil"
+
 msgid "E289: Input method doesn't support my preedit type"
-msgstr "E289: el mètode d'entrada no suporta el tipus de pre-edició"
+msgstr "E289: El mètode d'entrada no suporta el tipus de pre-edició"
 
 msgid "E290: List or number required"
 msgstr "E290: Es necessita una llista o un número"
@@ -4954,7 +4926,6 @@ msgstr "E290: Es necessita una llista o un número"
 msgid "E292: Invalid count for del_bytes(): %ld"
 msgstr "E292: Quantitat invàlida per a del_bytes(): %ld"
 
-# TODO: Capitalise first word of message?
 msgid "E293: Block was not locked"
 msgstr "E293: El bloc no estava bloquejat"
 
@@ -5036,28 +5007,22 @@ msgid "E314: Preserve failed"
 msgstr "E314: La preservació ha fallat"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E315: ml_get: Invalid lnum: %ld"
 msgstr "E315: ml_get: lnum no vàlid: %ld"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E316: ml_get: Cannot find line %ld in buffer %d %s"
-msgstr "E316: ml_get: no s'ha trobat la línia %ld en el buffer %d %s"
-
-# TODO: Capitalise first word of message?
+msgstr "E316: ml_get: No s'ha trobat la línia %ld en el buffer %d %s"
+
 msgid "E317: Pointer block id wrong"
-msgstr "E317: punter a id de bloc incorrecte"
-
-# TODO: Capitalise first word of message?
+msgstr "E317: Punter a id de bloc incorrecte"
+
 msgid "E317: Pointer block id wrong 2"
-msgstr "E317: punter a id de bloc incorrecte 2"
-
-# TODO: Capitalise first word of message?
+msgstr "E317: Punter a id de bloc incorrecte 2"
+
 msgid "E317: Pointer block id wrong 3"
-msgstr "E317: punter a id de bloc incorrecte 3"
-
-# TODO: Capitalise first word of message?
+msgstr "E317: Punter a id de bloc incorrecte 3"
+
 msgid "E317: Pointer block id wrong 4"
 msgstr "E317: Punter a id de bloc incorrecte 4"
 
@@ -5076,14 +5041,12 @@ msgid "E321: Could not reload \"%s\""
 msgstr "E321: No s'ha pogut rellegir \"%s\""
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E322: Line number out of range: %ld past the end"
-msgstr "E322: número de línia fora d'interval: %ld passat el final"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E322: Número de línia fora d'interval: %ld passat el final"
+
+#, c-format
 msgid "E323: Line count wrong in block %ld"
-msgstr "E323: nombre de línies incorrecte al bloc %ld"
+msgstr "E323: Nombre de línies incorrecte al bloc %ld"
 
 msgid "E324: Can't open PostScript output file"
 msgstr "E324: No s'ha pogut obrir el fitxer PostScript de sortida"
@@ -5217,9 +5180,8 @@ msgstr "E360: No és possible executar l'intèrpret conjuntament amb l'opció -f"
 msgid "E362: Using a boolean value as a Float"
 msgstr "E362: Ús d'un valor booleà com a Float"
 
-# TODO: Capitalise first word of message?
 msgid "E363: Pattern uses more memory than 'maxmempattern'"
-msgstr "E363: el patró requereix més memòria que 'maxmempattern'"
+msgstr "E363: El patró requereix més memòria que 'maxmempattern'"
 
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
@@ -5236,12 +5198,10 @@ msgid "E367: No such group: \"%s\""
 msgstr "E367: No existeix tal grup: \"%s\""
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E368: Got SIG%s in libcall()"
-msgstr "E368: s'ha obtingut SIG%s a libcall()"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E368: S'ha obtingut SIG%s a libcall()"
+
+#, c-format
 msgid "E369: Invalid item in %s%%[]"
 msgstr "E369: Ítem no vàlid a %s%%[]"
 
@@ -5295,14 +5255,12 @@ msgid "E383: Invalid search string: %s"
 msgstr "E383: Cadena de cerca no vàlida: %s"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E384: Search hit TOP without match for: %s"
-msgstr "E384: la cerca ha arribat a DALT sense resultats per: %s"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E384: La cerca ha arribat a DALT sense resultats per: %s"
+
+#, c-format
 msgid "E385: Search hit BOTTOM without match for: %s"
-msgstr "E385: la cerca ha arribat a BAIX sense resultats per: %s"
+msgstr "E385: La cerca ha arribat a BAIX sense resultats per: %s"
 
 msgid "E386: Expected '?' or '/'  after ';'"
 msgstr "E386: S'esperava '?' o '/' després de ';'"
@@ -5335,9 +5293,8 @@ msgstr "E393: grouphere/groupthere no és vàlid en aquest context"
 msgid "E394: Didn't find region item for %s"
 msgstr "E394: No s'ha trobat cap element de regió per a %s"
 
-# TODO: Capitalise first word of message?
 msgid "E395: Contains argument not accepted here"
-msgstr "E395: conté argument no vàlid en aquest context"
+msgstr "E395: Conté argument no vàlid en aquest context"
 
 msgid "E397: Filename required"
 msgstr "E397: Es necessita un nom de fitxer"
@@ -5362,9 +5319,8 @@ msgstr "E401: No s'ha trobat el delimita
 msgid "E402: Garbage after pattern: %s"
 msgstr "E402: Caràcters sobrants després del patró: %s"
 
-# TODO: Capitalise first word of message?
 msgid "E403: syntax sync: Line continuations pattern specified twice"
-msgstr "E403: syntax sync: patró de continuació de línia repetit"
+msgstr "E403: syntax sync: Patró de continuació de línia repetit"
 
 #, c-format
 msgid "E404: Illegal arguments: %s"
@@ -5395,9 +5351,8 @@ msgid "E410: Invalid :syntax subcommand:
 msgstr "E410: Subordre de :syntax no vàlida: %s"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E411: Highlight group not found: %s"
-msgstr "E411: no s'ha trobat el grup de ressaltat: %s"
+msgstr "E411: No s'ha trobat el grup de ressaltat: %s"
 
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
@@ -5407,24 +5362,20 @@ msgstr "E412: Falten arguments: \":highl
 msgid "E413: Too many arguments: \":highlight link %s\""
 msgstr "E413: Sobren arguments: \":highlight link %s\""
 
-# TODO: Capitalise first word of message?
 msgid "E414: Group has settings, highlight link ignored"
-msgstr "E414: el grup ja té paràmetres, s'ignora l'enllaç"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E414: El grup ja té paràmetres, s'ignora l'enllaç"
+
+#, c-format
 msgid "E415: Unexpected equal sign: %s"
-msgstr "E415: signe d'igualtat inesperat: %s"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E415: Signe d'igualtat inesperat: %s"
+
+#, c-format
 msgid "E416: Missing equal sign: %s"
-msgstr "E416: falta un signe d'igual: %s"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E416: Falta un signe d'igual: %s"
+
+#, c-format
 msgid "E417: Missing argument: %s"
-msgstr "E417: falta un argument: %s"
+msgstr "E417: Falta un argument: %s"
 
 #, c-format
 msgid "E418: Illegal value: %s"
@@ -5441,9 +5392,8 @@ msgid "E421: Color name or number not re
 msgstr "E421: Nom o número de color no reconegut: %s"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E422: Terminal code too long: %s"
-msgstr "E422: codi de terminal massa llarg: %s"
+msgstr "E422: Codi de terminal massa llarg: %s"
 
 #, c-format
 msgid "E423: Illegal argument: %s"
@@ -5456,7 +5406,6 @@ msgid "E425: Cannot go before first matc
 msgstr "E425: No es pot anar més enllà de la primera etiqueta coincident"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E426: Tag not found: %s"
 msgstr "E426: No s'ha trobat l'etiqueta: %s"
 
@@ -5495,21 +5444,17 @@ msgstr "E435: No s'ha trobat l'etiqueta 
 msgid "E436: No \"%s\" entry in termcap"
 msgstr "E436: No hi ha cap entrada \"%s\" al termcap"
 
-# TODO: Capitalise first word of message?
 msgid "E437: Terminal capability \"cm\" required"
-msgstr "E437: es necessita la capacitat \"cm\" per part del terminal"
-
-# TODO: Capitalise first word of message?
+msgstr "E437: Es necessita la capacitat \"cm\" per part del terminal"
+
 msgid "E438: u_undo: Line numbers wrong"
-msgstr "E438: u_undo: els números de línia no són correctes"
-
-# TODO: Capitalise first word of message?
+msgstr "E438: u_undo: Els números de línia no són correctes"
+
 msgid "E439: Undo list corrupt"
-msgstr "E439: la llista de desfer està corrompuda"
-
-# TODO: Capitalise first word of message?
+msgstr "E439: La llista de desfer està corrompuda"
+
 msgid "E440: Undo line missing"
-msgstr "E440: falta una línia de desfer"
+msgstr "E440: Falta una línia de desfer"
 
 msgid "E441: There is no preview window"
 msgstr "E441: No hi ha cap finestra de vista prèvia"
@@ -5540,9 +5485,8 @@ msgstr "E448: No s'ha pogut carregar la funció %s"
 msgid "E449: Invalid expression received"
 msgstr "E449: S'ha rebut una expressió no vàlida"
 
-# TODO: Capitalise first word of message?
 msgid "E450: Buffer number, text or a list required"
-msgstr "E450: es necessita un número de buffer, text o llista"
+msgstr "E450: Es necessita un número de buffer, text o llista"
 
 #, c-format
 msgid "E451: Expected }: %s"
@@ -5554,7 +5498,6 @@ msgstr "E452: La llista de variables conté un ; doble"
 msgid "E453: UL color unknown"
 msgstr "E453: Color de subratllat desconegut"
 
-# TODO: Capitalise first word of message?
 msgid "E454: Function list was modified"
 msgstr "E454: La llista de funcions ha canviat"
 
@@ -5579,9 +5522,8 @@ msgstr "E458: No es pot assignar memòria, els colors poden ser incorrectes"
 msgid "E459: Cannot go back to previous directory"
 msgstr "E459: No es pot tornar al directori anterior"
 
-# TODO: Capitalise first word of message?
 msgid "E460: Entries missing in mapset() dict argument"
-msgstr "E460: falten entrades a l'argument de diccionari a mapset()"
+msgstr "E460: Falten entrades a l'argument de diccionari a mapset()"
 
 #, c-format
 msgid "E461: Illegal variable name: %s"
@@ -5614,9 +5556,8 @@ msgid "E468: Completion argument only al
 msgstr "E468: La compleció estàndard no admet arguments"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E469: Invalid cscopequickfix flag %c for %c"
-msgstr "E469: paràmetre cscopequickfix %c no vàlid per a %c"
+msgstr "E469: Paràmetre cscopequickfix %c no vàlid per a %c"
 
 msgid "E470: Command aborted"
 msgstr "E470: S'ha avortat l'ordre"
@@ -5700,17 +5641,15 @@ msgstr "E488: Sobren caràcters al final"
 msgid "E488: Trailing characters: %s"
 msgstr "E488: Sobren caràcters al final: %s"
 
-# TODO: Capitalise first word of message?
 msgid "E489: No call stack to substitute for \"<stack>\""
-msgstr "E489: no hi ha cap pila de crides per substituir \"<stack>\""
+msgstr "E489: No hi ha cap pila de crides per substituir \"<stack>\""
 
 msgid "E490: No fold found"
 msgstr "E490: No s'ha trobat cap plec"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E491: JSON decode error at '%s'"
-msgstr "E491: Error en decodificar json a %s"
+msgstr "E491: Error en decodificar JSON a %s"
 
 msgid "E492: Not an editor command"
 msgstr "E492: No és una ordre de l'editor"
@@ -5721,21 +5660,17 @@ msgstr "E493: Interval decreixent"
 msgid "E494: Use w or w>>"
 msgstr "E494: Useu w o bé w>>"
 
-# TODO: Capitalise first word of message?
 msgid "E495: No autocommand file name to substitute for \"<afile>\""
-msgstr "E495: no hi ha cap nom de fitxer d'ordres automàtiques per substituir"
-
-# TODO: Capitalise first word of message?
+msgstr "E495: No hi ha cap nom de fitxer d'ordres automàtiques per substituir"
+
 msgid "E496: No autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: no hi ha cap buffer d'ordres automàtiques per substituir"
-
-# TODO: Capitalise first word of message?
+msgstr "E496: No hi ha cap buffer d'ordres automàtiques per substituir"
+
 msgid "E497: No autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: no hi ha cap coincidència d'ordre automàtica per substituir"
-
-# TODO: Capitalise first word of message?
+msgstr "E497: No hi ha cap coincidència d'ordre automàtica per substituir"
+
 msgid "E498: No :source file name to substitute for \"<sfile>\""
-msgstr "E498: no hi ha cap nom de fitxer :source per substituir"
+msgstr "E498: No hi ha cap nom de fitxer :source per substituir"
 
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
@@ -5780,24 +5715,21 @@ msgstr "E509: No s'ha pogut crear la còpia de seguretat (! per a forçar)"
 msgid "E510: Can't make backup file (add ! to write anyway)"
 msgstr "E510: No s'ha pogut fer la còpia de seguretat (! per a forçar)"
 
-# TODO: Capitalise first word of message?
 msgid "E511: NetBeans already connected"
 msgstr "E511: NetBeans ja està connectat"
 
 msgid "E512: Close failed"
 msgstr "E512: Error en tancar"
 
-# TODO: Capitalise first word of message?
 msgid "E513: Write error, conversion failed (make 'fenc' empty to override)"
-msgstr "E513: ha fallat la conversió (anul·leu l'opció 'fenc' per a forçar)"
-
-#, c-format
-msgid ""
-"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+msgstr "E513: Ha fallat la conversió (anul·leu l'opció 'fenc' per a forçar)"
+
+#, c-format
+msgid ""
+"E513: Write error, conversion failed in line %ld (make 'fenc' empty to "
 "override)"
-msgstr "E513: error de conversió, línia %ld (anul·leu l'opció 'fenc' per a forçar)"
-
-# TODO: Capitalise first word of message?
+msgstr "E513: Error de conversió, línia %ld (anul·leu l'opció 'fenc' per a forçar)"
+
 msgid "E514: Write error (file system full?)"
 msgstr "E514: Error d'escriptura (sistema de fitxers ple?)"
 
@@ -5860,11 +5792,9 @@ msgstr "E530: No es pot canviar el paràmetre 'term' en mode GUI"
 msgid "E531: Use \":gui\" to start the GUI"
 msgstr "E531: Feu \":gui\" per a iniciar la interfície d'usuari gràfica"
 
-# TODO: Capitalise first word of message?
 msgid "E532: Highlighting color name too long in defineAnnoType"
-msgstr "E532: nom de color de ressaltat massa llarg a defineAnnoType"
-
-# TODO: Capitalise first word of message?
+msgstr "E532: Nom de color de ressaltat massa llarg a defineAnnoType"
+
 msgid "E533: Can't select wide font"
 msgstr "E533: No s'ha pogut seleccionar la fosa per a caràcters amples"
 
@@ -5875,7 +5805,6 @@ msgstr "E534: La fosa per a caràcters amples no és vàlida"
 msgid "E535: Illegal character after <%c>"
 msgstr "E535: Caràcter il·legal després de <%c>"
 
-# TODO: Capitalise first word of message?
 msgid "E536: Comma required"
 msgstr "E536: Es requereix una coma"
 
@@ -5894,9 +5823,8 @@ msgstr "E539: Caràcter il·legal <%s>"
 msgid "E540: Unclosed expression sequence"
 msgstr "E540: Seqüència d'expressions no tancada"
 
-# TODO: Capitalise first word of message?
 msgid "E542: Unbalanced groups"
-msgstr "E542: grups desequilibrats"
+msgstr "E542: Grups desequilibrats"
 
 msgid "E543: Not a valid codepage"
 msgstr "E543: No és un codi de pàgina vàlid"
@@ -5913,7 +5841,6 @@ msgstr "E546: Mode il·legal"
 msgid "E547: Illegal mouseshape"
 msgstr "E547: La forma del punter del ratolí és il·legal"
 
-# TODO: Capitalise first word of message?
 msgid "E548: Digit expected"
 msgstr "E548: S'esperava un dígit"
 
@@ -5926,9 +5853,8 @@ msgstr "E550: Falta un caràcter ':'"
 msgid "E551: Illegal component"
 msgstr "E551: Component il·legal"
 
-# TODO: Capitalise first word of message?
 msgid "E552: Digit expected"
-msgstr "E552: s'esperava un dígit"
+msgstr "E552: S'esperava un dígit"
 
 msgid "E553: No more items"
 msgstr "E553: No hi ha més ítems"
@@ -5937,13 +5863,11 @@ msgstr "E553: No hi ha més ítems"
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: Error de sintaxi a %s{...}"
 
-# TODO: Capitalise first word of message?
 msgid "E555: At bottom of tag stack"
-msgstr "E555: a baix de la pila d'etiquetes"
-
-# TODO: Capitalise first word of message?
+msgstr "E555: A baix de la pila d'etiquetes"
+
 msgid "E556: At top of tag stack"
-msgstr "E556: a dalt de la pila d'etiquetes"
+msgstr "E556: A dalt de la pila d'etiquetes"
 
 msgid "E557: Cannot open termcap file"
 msgstr "E557: No s'ha pogut obrir el fitxer termcap"
@@ -5958,7 +5882,6 @@ msgstr "E559: No s'ha trobat informació sobre el terminal a termcap"
 msgid "E560: Usage: cs[cope] %s"
 msgstr "E560: Sintaxi: cs[cope] %s"
 
-# TODO: Capitalise first word of message?
 msgid "E561: Unknown cscope search type"
 msgstr "E561: Tipus de cerca cscope desconeguda"
 
@@ -5979,26 +5902,22 @@ msgstr "E565: No es permet canviar el te
 msgid "E566: Could not create cscope pipes"
 msgstr "E566: No s'han pogut crear canonades cscope"
 
-# TODO: Capitalise first word of message?
 msgid "E567: No cscope connections"
 msgstr "E567: No hi ha connexions cscope"
 
-# TODO: Capitalise first word of message?
 msgid "E568: Duplicate cscope database not added"
-msgstr "E568: no s'ha afegit una base de dades cscope duplicada"
-
-# TODO: Capitalise first word of message?
+msgstr "E568: No s'ha afegit una base de dades cscope duplicada"
+
 msgid "E570: Fatal error in cs_manage_matches"
-msgstr "E570: error fatal a cs_manage_matches"
+msgstr "E570: Error fatal a cs_manage_matches"
 
 msgid ""
 "E571: Sorry, this command is disabled: the Tcl library could not be loaded."
 msgstr "E571: Ordre no disponible: no s'ha carregat la biblioteca Tcl."
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E572: Exit code %d"
-msgstr "E572: codi de sortida %d"
+msgstr "E572: Codi de sortida %d"
 
 #, c-format
 msgid "E573: Invalid server id used: %s"
@@ -6020,13 +5939,11 @@ msgstr "Nom de registre il·legal"
 msgid "E578: Not allowed to change text here"
 msgstr "E578: No es permet canviar el text"
 
-# TODO: Capitalise first word of message?
 msgid "E579: :if nesting too deep"
-msgstr "E579: nivell d'imbricació :if massa elevat"
-
-# TODO: Capitalise first word of message?
+msgstr "E579: Nivell d'imbricació :if massa elevat"
+
 msgid "E579: Block nesting too deep"
-msgstr "E579: nivell d'imbricació massa elevat"
+msgstr "E579: Nivell d'imbricació massa elevat"
 
 msgid "E580: :endif without :if"
 msgstr "E580: :endif sense :if"
@@ -6037,9 +5954,8 @@ msgstr "E581: :else sense :if"
 msgid "E582: :elseif without :if"
 msgstr "E582: :elseif sense :if"
 
-# TODO: Capitalise first word of message?
 msgid "E583: Multiple :else"
-msgstr "E583: múltiples :else"
+msgstr "E583: Múltiples :else"
 
 msgid "E584: :elseif after :else"
 msgstr "E584: :elseif després de :else"
@@ -6086,7 +6002,6 @@ msgid "E596: Invalid font(s)"
 msgstr "E596: Fosa no vàlida"
 
 # necessita +xfontset
-# TODO: Capitalise first word of message?
 msgid "E597: Can't select fontset"
 msgstr "E597: No s'ha pogut seleccionar el conjunt de foses"
 
@@ -6118,9 +6033,8 @@ msgstr "E605: No s'ha interceptat l'excepció: %s"
 msgid "E606: :finally without :try"
 msgstr "E606: :finally sense :try"
 
-# TODO: Capitalise first word of message?
 msgid "E607: Multiple :finally"
-msgstr "E607: múltiples :finally"
+msgstr "E607: Múltiples :finally"
 
 msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
 msgstr "E608: No és possible generar excepcions amb el prefix 'Vim'"
@@ -6156,12 +6070,10 @@ msgid "E617: Cannot be changed in the GT
 msgstr "E617: La interfície GTK no permet aquest canvi"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E618: File \"%s\" is not a PostScript resource file"
 msgstr "E618: El fitxer \"%s\" no és un fitxer de recursos PostScript"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E619: File \"%s\" is not a supported PostScript resource file"
 msgstr "E619: El fitxer de recursos PostScript \"%s\" no està suportat"
 
@@ -6184,28 +6096,23 @@ msgid "E624: Can't open file \"%s\""
 msgstr "E624: No s'ha pogut obrir el fitxer \"%s\""
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E625: Cannot open cscope database: %s"
-msgstr "E625: no s'ha pogut obrir la base de dades cscope: %s"
-
-# TODO: Capitalise first word of message?
+msgstr "E625: No s'ha pogut obrir la base de dades cscope: %s"
+
 msgid "E626: Cannot get cscope database information"
-msgstr "E626: no s'ha pogut obtenir informació de la base de dades cscope"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E626: No s'ha pogut obtenir informació de la base de dades cscope"
+
+#, c-format
 msgid "E630: %s(): Write while not connected"
-msgstr "E630: %s(): s'ha escrit sense estar connectat"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E630: %s(): S'ha escrit sense estar connectat"
+
+#, c-format
 msgid "E631: %s(): Write failed"
-msgstr "E631: %s(): error d'escriptura"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E631: %s(): Error d'escriptura"
+
+#, c-format
 msgid "E654: Missing delimiter after search pattern: %s"
-msgstr "E654: falta un delimitador després del patró de cerca: %s"
+msgstr "E654: Falta un delimitador després del patró de cerca: %s"
 
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: Massa enllaços simbòlics (circulars?)"
@@ -6235,7 +6142,6 @@ msgstr "E662: Us trobeu a l'inici de la 
 msgid "E663: At end of changelist"
 msgstr "E663: Us trobeu al final de la llista de canvis"
 
-# TODO: Capitalise first word of message?
 msgid "E664: Changelist is empty"
 msgstr "E664: La llista de canvis està buida"
 
@@ -6243,9 +6149,8 @@ msgid "E665: Cannot start GUI, no valid 
 msgstr "E665: Error en iniciar el GUI, no s'ha trobat cap tipus de lletra"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E666: Compiler not supported: %s"
-msgstr "E666: el compilador no està suportat: %s"
+msgstr "E666: El compilador no està suportat: %s"
 
 msgid "E667: Fsync failed"
 msgstr "E667: Fsync ha fallat"
@@ -6288,9 +6193,8 @@ msgstr "E677: Error en escriure el fitxe
 msgid "E678: Invalid character after %s%%[dxouU]"
 msgstr "E678: Caràcter invàlid després de %s%%[dxouU]"
 
-# TODO: Capitalise first word of message?
 msgid "E679: Recursive loop loading syncolor.vim"
-msgstr "E679: bucle infinit en carregar syncolor.vim"
+msgstr "E679: Bucle infinit en carregar syncolor.vim"
 
 #, c-format
 msgid "E680: <buffer=%d>: invalid buffer number"
@@ -6306,9 +6210,8 @@ msgid "E683: File name missing or invali
 msgstr "E683: Falta un nom de fitxer o el patró no és vàlid"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E684: List index out of range: %ld"
-msgstr "E684: indexació de llista fora d'interval: %ld"
+msgstr "E684: Indexació de llista fora d'interval: %ld"
 
 #, c-format
 msgid "E685: Internal error: %s"
@@ -6352,9 +6255,8 @@ msgstr "E696: Falta una coma a la llista
 msgid "E697: Missing end of List ']': %s"
 msgstr "E697: Falta ']' al final de la llista: %s"
 
-# TODO: Capitalise first word of message?
 msgid "E698: Variable nested too deep for making a copy"
-msgstr "E698: el nivell d'imbricació de la variable és massa elevat"
+msgstr "E698: El nivell d'imbricació de la variable és massa elevat"
 
 msgid "E699: Too many arguments"
 msgstr "E699: Sobren arguments"
@@ -6442,9 +6344,8 @@ msgid "E723: Missing end of Dictionary '
 msgstr "E723: Falta un '}': %s"
 
 # veure eval.c:2935
-# TODO: Capitalise first word of message?
 msgid "E724: Variable nested too deep for displaying"
-msgstr "E724: el nivell d'imbricació de la variable és massa elevat"
+msgstr "E724: El nivell d'imbricació de la variable és massa elevat"
 
 #, c-format
 msgid "E725: Calling dict function without Dictionary: %s"
@@ -6515,9 +6416,8 @@ msgstr "E742: No es pot canviar el valor
 msgid "E742: Cannot change value of %s"
 msgstr "E742: No s'ha pogut canviar el valor de %s"
 
-# TODO: Capitalise first word of message?
 msgid "E743: Variable nested too deep for (un)lock"
-msgstr "E743: el nivell d'imbricació de la variable és massa elevat"
+msgstr "E743: El nivell d'imbricació de la variable és massa elevat"
 
 msgid "E744: NetBeans does not allow changes in read-only files"
 msgstr "E744: NetBeans no permet canvis a fitxers de només lectura"
@@ -6535,9 +6435,8 @@ msgstr "E747: Buffer modificat, no es canvia de directori (! per a forçar)"
 msgid "E748: No previously used register"
 msgstr "E748: No hi ha cap registre usat amb anterioritat"
 
-# TODO: Capitalise first word of message?
 msgid "E749: Empty buffer"
-msgstr "E749: buffer buit"
+msgstr "E749: Buffer buit"
 
 msgid "E750: First use \":profile start {fname}\""
 msgstr "E750: Primer feu \":profile start {nomfitxer}\""
@@ -6649,11 +6548,9 @@ msgid "E781: .sug file doesn't match .sp
 msgstr "E781: El fitxer .sug no coincideix amb el fitxer .spl: %s"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E782: Error while reading .sug file: %s"
-msgstr "E782: error en llegir el fitxer .sug: %s"
-
-# TODO: Capitalise first word of message?
+msgstr "E782: Error en llegir el fitxer .sug: %s"
+
 msgid "E783: Duplicate char in MAP entry"
 msgstr "E783: Caràcter duplicat a l'entrada MAP"
 
@@ -6740,7 +6637,6 @@ msgid "E805: Using a Float as a Number"
 msgstr "E805: Ús de Float com a Number"
 
 # semblant a eval.c:7120 i següents
-# TODO: Capitalise first word of message?
 msgid "E806: Using Float as a String"
 msgstr "E806: Ús de Float com a String"
 
@@ -6821,9 +6717,8 @@ msgid "E828: Cannot open undo file for w
 msgstr "E828: No es pot obrir el fitxer de desfer per a escriptura: %s"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E829: Write error in undo file: %s"
-msgstr "E829: error d'escriptura en desar el fitxer de desfer: %s"
+msgstr "E829: Error d'escriptura en desar el fitxer de desfer: %s"
 
 #, c-format
 msgid "E830: Undo number %ld not found"
@@ -6853,9 +6748,8 @@ msgstr "E836: Aquest Vim no pot executar :python després de :py3"
 msgid "E837: This Vim cannot execute :py3 after using :python"
 msgstr "E837: Aquest Vim no pot executar :py3 després de :python"
 
-# TODO: Capitalise first word of message?
 msgid "E838: NetBeans is not supported with this GUI"
-msgstr "E838: aquesta interfície gràfica no suporta NetBeans"
+msgstr "E838: Aquesta interfície gràfica no suporta NetBeans"
 
 msgid "E840: Completion function deleted text"
 msgstr "E840: La funció de compleció ha esborrat text"
@@ -6863,17 +6757,15 @@ msgstr "E840: La funció de compleció ha esborrat text"
 msgid "E841: Reserved name, cannot be used for user defined command"
 msgstr "E841: Nom reservat, no es pot usar en una ordre definida per l'usuari"
 
-# TODO: Capitalise first word of message?
 msgid "E842: No line number to use for \"<slnum>\""
-msgstr "E842: no hi ha cap número de línia per a \"<slnum>\""
+msgstr "E842: No hi ha cap número de línia per a \"<slnum>\""
 
 # called after the crypt key or 'cryptmethod' was changed for "buf"
 msgid "E843: Error while updating swap file crypt"
 msgstr "E843: Error en actualitzar el xifrat del fitxer d'intercanvi"
 
-# TODO: Capitalise first word of message?
 msgid "E844: Invalid cchar value"
-msgstr "E844: valor de cchar invàlid"
+msgstr "E844: Valor de cchar invàlid"
 
 msgid "E845: Insufficient memory, word list will be incomplete"
 msgstr "E845: Memòria insuficient, la llista de paraules serà incompleta"
@@ -6905,9 +6797,8 @@ msgstr "E852: El procés fill no ha pogut crear la interfície gràfica"
 msgid "E853: Duplicate argument name: %s"
 msgstr "E853: Argument duplicat: %s"
 
-# TODO: Capitalise first word of message?
 msgid "E854: Path too long for completion"
-msgstr "E854: la ubicació és massa llarga per a fer compleció"
+msgstr "E854: La ubicació és massa llarga per a fer compleció"
 
 msgid "E855: Autocommands caused command to abort"
 msgstr "E855: Una ordre automàtica ha provocat que l'ordre avortés"
@@ -7015,10 +6906,10 @@ msgid "E882: Uniq compare function faile
 msgstr "E882: La funció de comparació a unique() ha fallat"
 
 msgid ""
-"E883: search pattern and expression register may not contain two or more "
+"E883: Search pattern and expression register may not contain two or more "
 "lines"
 msgstr ""
-"E883: els registres d'expressió i de patró de cerca no poden contenir més "
+"E883: Els registres d'expressió i de patró de cerca no poden contenir més "
 "d'una línia"
 
 #, c-format
@@ -7046,9 +6937,8 @@ msgid "E889: Number required"
 msgstr "E889: Es requereix un número"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E890: Trailing char after ']': %s]%s"
-msgstr "E890: caràcter sobrer després de ']': %s]%s"
+msgstr "E890: Caràcter sobrer després de ']': %s]%s"
 
 msgid "E891: Using a Funcref as a Float"
 msgstr "E891: Ús de Funcref com a Float"
@@ -7094,33 +6984,27 @@ msgstr "E901: gethostbyname() a channel_
 msgid "E902: Cannot connect to port"
 msgstr "E902: No s'ha pogut connectar al port"
 
-# TODO: Capitalise first word of message?
 msgid "E903: Received command with non-string argument"
-msgstr "E903: s'ha rebut una ordre amb un argument que no és text"
+msgstr "E903: S'ha rebut una ordre amb un argument que no és text"
 
 # expr i call són ordres (:h channel-commands)
-# TODO: Capitalise first word of message?
 msgid "E904: Last argument for expr/call must be a number"
-msgstr "E904: l'últim argument a expr/call ha de ser un número"
-
-# TODO: Capitalise first word of message?
+msgstr "E904: L'últim argument a expr/call ha de ser un número"
+
 msgid "E904: Third argument for call must be a list"
-msgstr "E904: el tercer argument a call ha de ser una llista"
-
-#, c-format
-# TODO: Capitalise first word of message?
+msgstr "E904: El tercer argument a call ha de ser una llista"
+
+#, c-format
 msgid "E905: Received unknown command: %s"
-msgstr "E905: s'ha rebut una ordre desconeguda: %s"
-
-# TODO: Capitalise first word of message?
+msgstr "E905: S'ha rebut una ordre desconeguda: %s"
+
 msgid "E906: Not an open channel"
-msgstr "E906: el canal no està obert"
+msgstr "E906: El canal no està obert"
 
 msgid "E907: Using a special value as a Float"
 msgstr "E907: Ús de Special com a Float"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E908: Using an invalid value as a String: %s"
 msgstr "E908: Ús d'un valor invàlid com a String: %s"
 
@@ -7133,9 +7017,8 @@ msgstr "E910: Ús de Job com a Number"
 msgid "E911: Using a Job as a Float"
 msgstr "E911: Ús de Job com a Float"
 
-# TODO: Capitalise first word of message?
 msgid "E912: Cannot use ch_evalexpr()/ch_sendexpr() with a raw or nl channel"
-msgstr "E912: no es pot usar ch_evalexpr()/ch_sendexpr() amb canals raw o nl"
+msgstr "E912: No es pot usar ch_evalexpr()/ch_sendexpr() amb canals raw o nl"
 
 msgid "E913: Using a Channel as a Number"
 msgstr "E913: Ús de Channel com a Number"
@@ -7146,18 +7029,16 @@ msgstr "E914: Ús de Channel com a Float"
 msgid "E915: in_io buffer requires in_buf or in_name to be set"
 msgstr "E915: els buffers in_io han de tenir l'atribut in_buf o in_name"
 
-# TODO: Capitalise first word of message?
 msgid "E916: Not a valid job"
-msgstr "E916: no és una feina vàlida"
+msgstr "E916: No és una feina vàlida"
 
 #, c-format
 msgid "E917: Cannot use a callback with %s()"
 msgstr "E917: No es poden utilitzar callbacks amb %s()"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E918: Buffer must be loaded: %s"
-msgstr "E918: el buffer no està carregat: %s"
+msgstr "E918: El buffer no està carregat: %s"
 
 #, c-format
 msgid "E919: Directory not found in '%s': \"%s\""
@@ -7169,9 +7050,8 @@ msgstr "E920: els fitxers _io han de ten
 msgid "E921: Invalid callback argument"
 msgstr "E921: L'argument del callback no és vàlid"
 
-# TODO: Capitalise first word of message?
 msgid "E922: Expected a dict"
-msgstr "E922: s'esperava un diccionari"
+msgstr "E922: S'esperava un diccionari"
 
 msgid "E923: Second argument of function() must be a list or a dict"
 msgstr "E923: El segon argument a function() ha de ser una llista o diccionari"
@@ -7214,9 +7094,8 @@ msgid "E934: Cannot jump to a buffer tha
 msgstr "E934: No és possible saltar a un buffer anònim"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E935: Invalid submatch number: %d"
-msgstr "E935: referència invàlida a una coincidència: %d"
+msgstr "E935: Referència invàlida a una coincidència: %d"
 
 msgid "E936: Cannot delete the current group"
 msgstr "E936: No es pot eliminar el grup actual"
@@ -7236,9 +7115,8 @@ msgstr "E939: Es necessita un número estrictament positiu"
 msgid "E940: Cannot lock or unlock variable %s"
 msgstr "E940: No s'ha pogut bloquejar o desbloquejar la variable %s"
 
-# TODO: Capitalise first word of message?
 msgid "E941: Already started a server"
-msgstr "E941: ja s'ha iniciat un servidor"
+msgstr "E941: Ja s'ha iniciat un servidor"
 
 msgid "E942: +clientserver feature not available"
 msgstr "E942: la característica +clientserver no està disponible"
@@ -7304,34 +7182,30 @@ msgstr "E959: El format diff no és vàlid"
 msgid "E960: Problem creating the internal diff"
 msgstr "E960: Problema en computar internament les diferències"
 
-# TODO: Capitalise first word of message?
 msgid "E961: No line number to use for \"<sflnum>\""
-msgstr "E961: no es pot utilitzar cap número de línia per a \"<sflnum>\""
+msgstr "E961: No es pot utilitzar cap número de línia per a \"<sflnum>\""
 
 #, c-format
 msgid "E962: Invalid action: '%s'"
 msgstr "E962: Acció invàlida: '%s'"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E963: Setting %s to value with wrong type"
-msgstr "E963: s'ha assignat un valor del tipus incorrecte a %s"
+msgstr "E963: S'ha assignat un valor del tipus incorrecte a %s"
 
 #, c-format
 msgid "E964: Invalid column number: %ld"
 msgstr "E964: El número de columna no és vàlid: %ld"
 
-# TODO: Capitalise first word of message?
 msgid "E965: Missing property type name"
-msgstr "E965: falta un nom de tipus de propietat"
+msgstr "E965: Falta un nom de tipus de propietat"
 
 #, c-format
 msgid "E966: Invalid line number: %ld"
 msgstr "E966: El número de línia no és vàlid: %ld"
 
-# TODO: Capitalise first word of message?
 msgid "E967: Text property info corrupted"
-msgstr "E967: l'informació de la propietat de text s'ha corromput"
+msgstr "E967: L'informació de la propietat de text s'ha corromput"
 
 msgid "E968: Need at least one of 'id' or 'type'"
 msgstr "E968: Es requereix 'id' o 'type'"
@@ -7374,7 +7248,6 @@ msgstr "E978: Operació no vàlida per a un Blob"
 msgid "E979: Blob index out of range: %ld"
 msgstr "E979: índexació d'un Blob fora d'interval: %ld"
 
-# TODO: Capitalise first word of message?
 msgid "E980: Lowlevel input not supported"
 msgstr "E980: L'entrada de baix nivell no està suportada"
 
@@ -7394,13 +7267,11 @@ msgstr "E984: ús de :scriptversion fora d'un script"
 msgid "E985: .= is not supported with script version >= 2"
 msgstr "E985: .= no està suportat en versions d'script >= 2"
 
-# TODO: Capitalise first word of message?
 msgid "E986: Cannot modify the tag stack within tagfunc"
-msgstr "E986: no es pot modificar la pila d'etiquetes des de tagfunc"
-
-# TODO: Capitalise first word of message?
+msgstr "E986: No es pot modificar la pila d'etiquetes des de tagfunc"
+
 msgid "E987: Invalid return value from tagfunc"
-msgstr "E987: el valor retornat per tagfunc no és vàlid"
+msgstr "E987: El valor retornat per tagfunc no és vàlid"
 
 msgid "E988: GUI cannot be used. Cannot execute gvim.exe."
 msgstr "E988: No es pot usar GUI: No es pot executar gvim.exe."
@@ -7412,17 +7283,15 @@ msgstr "E989: Argument obligatori preced
 msgid "E990: Missing end marker '%s'"
 msgstr "E990: Falta una marca final '%s'"
 
-# TODO: Capitalise first word of message?
 msgid "E991: Cannot use =<< here"
-msgstr "E991: no es pot utilitzar =<< aquí"
+msgstr "E991: No es pot utilitzar =<< aquí"
 
 msgid "E992: Not allowed in a modeline when 'modelineexpr' is off"
 msgstr "E992: No permès en una línia de mode amb 'modelineexpr' off"
 
 #, c-format
-# TODO: Capitalise first word of message?
 msgid "E993: Window %d is not a popup window"
-msgstr "E993: la finestra %d no és una finestra emergent"
+msgstr "E993: La finestra %d no és una finestra emergent"
 
 msgid "E994: Not allowed in a popup window"
 msgstr "E994: No permès en una finestra emergent"
@@ -7615,7 +7484,7 @@ msgid "E1040: Cannot use :scriptversion 
 msgstr "E1040: No es permet utilitzar :scriptversion després de :vim9script"
 
 #, c-format
-msgid "E1041: Redefining script item %s"
+msgid "E1041: Redefining script item \"%s\""
 msgstr "E1041: S'ha redefinit l'element %s de l'script"
 
 msgid "E1042: Export can only be used in vim9script"
@@ -8025,7 +7894,7 @@ msgstr "E1160: No es permeten valors per
 
 #, c-format
 msgid "E1161: Cannot json encode a %s"
-msgstr "E1161: No es pot codificar %s com a json"
+msgstr "E1161: No es pot codificar %s com a JSON"
 
 #, c-format
 msgid "E1162: Register name must be one character: %s"
@@ -8414,9 +8283,8 @@ msgstr "E1261: No es pot importar .vim  
 msgid "E1262: Cannot import the same script twice: %s"
 msgstr "E1262: No es pot importar el mateix script dos cops: %s"
 
-# TODO: Capitalise first word of message?
 msgid "E1263: Cannot use name with # in Vim9 script, use export instead"
-msgstr "E1263: un nom no pot contenir # en un script Vim9, utilitzeu export"
+msgstr "E1263: Un nom no pot contenir # en un script Vim9, utilitzeu export"
 
 #, c-format
 msgid "E1264: Autoload import cannot use absolute or relative path: %s"
--- a/src/po/cleanup.vim
+++ b/src/po/cleanup.vim
@@ -22,6 +22,9 @@ silent g/^msgstr"/s//msgstr "/
 silent g/^msgid"/s//msgid "/
 silent g/^msgstr ""\(\n"\)\@!/?^msgid?,.s/^/#\~ /
 
+" Comments only useful for the translator
+silent g/^#\. /d
+
 " clean up empty lines
 silent g/^\n\n\n/.d
 silent! %s/\n\+\%$//
--- a/src/po/it.po
+++ b/src/po/it.po
@@ -14,7 +14,8 @@
 msgid ""
 msgstr ""
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2022-06-05 10:20+0100\n"
+"POT-Creation-Date: 2022-06-16 21:37+0200\n"
+"PO-Revision-Date: 2022-06-16 23:00+0100\n"
 "Last-Translator: Antonio Colombo <azc100@gmail.com>\n"
 "Language-Team: Italian\n"
 "Language: it\n"
@@ -383,6 +384,7 @@ msgstr ""
 "\n"
 "\tImpostata l'ultima volta da "
 
+#.
 msgid "&Ok"
 msgstr "&OK"
 
@@ -1517,6 +1519,9 @@ msgstr "-T <terminale>\tImposta tipo ter
 msgid "--not-a-term\t\tSkip warning for input/output not being a terminal"
 msgstr "--not-a-term\t\tNon avvisare se input/output non da terminale"
 
+msgid "--gui-dialog-file {fname}  For testing: write dialog text"
+msgstr "--gui-dialog-file {nomefile}  Per test: scrive testo del dialogo"
+
 msgid "--ttyfail\t\tExit if input or output is not a terminal"
 msgstr "--ttyfail\t\tEsce se l'input o l'output non sono da un terminale"
 
@@ -2836,6 +2841,7 @@ msgstr "Compressi %s: %ld di %ld nodi; n
 msgid "Reading back spell file..."
 msgstr "Rilettura file ortografico..."
 
+#.
 msgid "Performing soundfolding..."
 msgstr "Eseguo soundfolding..."
 
@@ -7535,9 +7541,25 @@ msgstr "E1283: L'ammontare dello spostam
 msgid "E1284: Argument 1, list item %d: Dictionary required"
 msgstr "E1284: Argomento 1, elemento di Lista %d: Dizionario richiesto"
 
+msgid "E1285: Could not clear timeout: %s"
+msgstr "E1285: Non riesco ad azzerare timeout: %s"
+
+msgid "E1286: Could not set timeout: %s"
+msgstr "E1286: Non riesco a impostare timeout: %s"
+
+msgid "E1287: Could not set handler for timeout: %s"
+msgstr "E1287: Non riesco a impostare il gestore del timeout: %s"
+
+msgid "E1288: Could not reset handler for timeout: %s"
+msgstr "E1288: Non riesco ad annullare il gestore del timeout: %s"
+
+msgid "E1289: Could not check for pending SIGALRM: %s"
+msgstr "E1289: Non riesco a controllare se in attesa di SIGALRM: %s"
+
 msgid "--No lines in buffer--"
 msgstr "--File vuoto--"
 
+#.
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "raggiunta la CIMA nella ricerca, continuo dal FONDO"