Update runtime files
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index beb7ac7..0cbfe21 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -1,4 +1,4 @@
-*builtin.txt*	For Vim version 9.0.  Last change: 2023 Apr 19
+*builtin.txt*	For Vim version 9.0.  Last change: 2023 May 12
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -2260,7 +2260,7 @@
 		string.
 		{command} can be a string or a List.  In case of a List the
 		lines are executed one by one.
-		This is equivalent to: >
+		This is more or less equivalent to: >
 			redir => var
 			{command}
 			redir END
@@ -2276,7 +2276,7 @@
 							*E930*
 		It is not possible to use `:redir` anywhere in {command}.
 
-		To get a list of lines use |split()| on the result: >
+		To get a list of lines use `split()` on the result: >
 			execute('args')->split("\n")
 
 <		To execute a command in another window than the current one
@@ -6767,17 +6767,20 @@
 		that was entered at the prompt.  This can be an empty string
 		if the user only typed Enter.
 		Example: >
-		   call prompt_setcallback(bufnr(), function('s:TextEntered'))
 		   func s:TextEntered(text)
 		     if a:text == 'exit' || a:text == 'quit'
 		       stopinsert
+		       " Reset 'modified' to allow the buffer to be closed.
+		       " We assume there is nothing useful to be saved.
+		       set nomodified
 		       close
 		     else
+		       " Do something useful with "a:text".  In this example
+		       " we just repeat it.
 		       call append(line('$') - 1, 'Entered: "' .. a:text .. '"')
-		       " Reset 'modified' to allow the buffer to be closed.
-		       set nomodified
 		     endif
 		   endfunc
+		   call prompt_setcallback(bufnr(), function('s:TextEntered'))
 
 <		Can also be used as a |method|: >
 			GetBuffer()->prompt_setcallback(callback)
@@ -10259,7 +10262,7 @@
 		The window will temporarily be made the current window,
 		without triggering autocommands or changing directory.  When
 		executing {command} autocommands will be triggered, this may
-		have unexpected side effects.  Use |:noautocmd| if needed.
+		have unexpected side effects.  Use `:noautocmd` if needed.
 		Example: >
 			call win_execute(winid, 'set syntax=python')
 <		Doing the same with `setwinvar()` would not trigger
diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt
index a08befe..da9aeb7 100644
--- a/runtime/doc/editing.txt
+++ b/runtime/doc/editing.txt
@@ -1,4 +1,4 @@
-*editing.txt*   For Vim version 9.0.  Last change: 2022 Nov 02
+*editing.txt*   For Vim version 9.0.  Last change: 2023 Apr 23
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index b863f42..de09c7b 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 9.0.  Last change: 2023 Apr 15
+*eval.txt*	For Vim version 9.0.  Last change: 2023 Apr 24
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt
index 477ea7b..ae8e658 100644
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -1,4 +1,4 @@
-*filetype.txt*  For Vim version 9.0.  Last change: 2023 Feb 15
+*filetype.txt*  For Vim version 9.0.  Last change: 2023 Apr 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -660,8 +660,8 @@
 
 MANPAGER				      *manpager.vim*
 
-The |:Man| command allows you to turn Vim into a manpager (that syntax highlights
-manpages and follows linked manpages on hitting CTRL-]).
+The |:Man| command allows you to turn Vim into a manpager (that syntax
+highlights manpages and follows linked manpages on hitting CTRL-]).
 
 For bash,zsh,ksh or dash, add to the config file (.bashrc,.zshrc, ...)
 
diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt
index 7c22c1c..0fccedd 100644
--- a/runtime/doc/gui.txt
+++ b/runtime/doc/gui.txt
@@ -1,4 +1,4 @@
-*gui.txt*       For Vim version 9.0.  Last change: 2023 Mar 01
+*gui.txt*       For Vim version 9.0.  Last change: 2023 Apr 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1226,10 +1226,9 @@
   like this to set options specifically for each type of GUI: >
 
 	if has("gui_running")
-	    if has("gui_gtk2")
+	    if has("gui_gtk")
 		:set guifont=Luxi\ Mono\ 12
 	    elseif has("x11")
-		" Also for GTK 1
 		:set guifont=*-lucidatypewriter-medium-r-normal-*-*-180-*-*-m-*-*
 	    elseif has("gui_win32")
 		:set guifont=Luxi_Mono:h12:cANSI
diff --git a/runtime/doc/if_perl.txt b/runtime/doc/if_perl.txt
index 281185b..7949e91 100644
--- a/runtime/doc/if_perl.txt
+++ b/runtime/doc/if_perl.txt
@@ -1,4 +1,4 @@
-*if_perl.txt*   For Vim version 9.0.  Last change: 2022 Mar 13
+*if_perl.txt*   For Vim version 9.0.  Last change: 2023 May 14
 
 
 		  VIM REFERENCE MANUAL    by Sven Verdoolaege
@@ -254,23 +254,14 @@
 
 							*script-here*
 When using a script language in-line, you might want to skip this when the
-language isn't supported.  But this mechanism doesn't work: >
+language isn't supported.  >
    if has('perl')
      perl << EOF
-       this will NOT work!
+       print 'perl works'
    EOF
    endif
-Instead, put the Perl/Python/Ruby/etc. command in a function and call that
-function: >
-    if has('perl')
-      function DefPerl()
-	perl << EOF
-	  this works
-    EOF
-      endfunction
-      call DefPerl()
-    endif
-Note that "EOF" must be at the start of the line.
+Note that "EOF" must be at the start of the line without preceding white
+space.
 
 ==============================================================================
 4. Dynamic loading					*perl-dynamic*
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index 8f2fe75..aa05029 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 9.0.  Last change: 2023 Mar 09
+*map.txt*       For Vim version 9.0.  Last change: 2023 May 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1873,8 +1873,14 @@
 	XX a\\\ b	   'a\ b'
 	XX a\\\\b	   'a\\b'
 	XX a\\\\ b	   'a\\', 'b'
+	XX		   [nothing]
 
 
+Note that if the "no arguments" situation is to be handled, you have to make
+sure that the function can be called without arguments.  For a compiled
+function you might want to use variable arguments, see
+|vim9-variable-arguments|.
+
 Examples for user commands: >
 
    " Delete everything after here to the end
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index c487f17..0511337 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 9.0.  Last change: 2023 Apr 12
+*options.txt*	For Vim version 9.0.  Last change: 2023 May 04
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -925,6 +925,9 @@
 	'autowriteall' for that.
 	Some buffers will not be written, specifically when 'buftype' is
 	"nowrite", "nofile", "terminal" or "prompt".
+	USE WITH CARE: If you make temporary changes to a buffer that you
+	don't want to be saved this option may cause it to be saved anyway.
+	Renaming the buffer with ":file {name}" may help avoid this.
 
 			 *'autowriteall'* *'awa'* *'noautowriteall'* *'noawa'*
 'autowriteall' 'awa'	boolean	(default off)
diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt
index a7238a9..30c1646 100644
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -1,4 +1,4 @@
-*pi_netrw.txt*  For Vim version 9.0.  Last change: 2023 Apr 22
+*pi_netrw.txt*  For Vim version 9.0.  Last change: 2023 May 14
 
 	    ------------------------------------------------
 	    NETRW REFERENCE MANUAL    by Charles E. Campbell
@@ -208,7 +208,7 @@
 	  http:   g:netrw_http_cmd     = "links"      elseif links is available
 	  http:   g:netrw_http_cmd     = "curl"       elseif curl  is available
 	  http:   g:netrw_http_cmd     = "wget"       elseif wget  is available
-          http:   g:netrw_http_cmd     = "fetch"      elseif fetch is available
+	  http:   g:netrw_http_cmd     = "fetch"      elseif fetch is available
 	  http:   *g:netrw_http_put_cmd* = "curl -T"
 	   rcp:   *g:netrw_rcp_cmd*      = "rcp"
 	 rsync:   *g:netrw_rsync_cmd*    = "rsync"     (see |g:netrw_rsync_sep|)
@@ -968,7 +968,7 @@
      fun! NetReadFixup(method, line1, line2)
        if method == 3   " ftp (no <.netrc>)
         let fourblanklines= line2 - 3
-        silent fourblanklines.",".line2."g/^\s*/d"
+        silent fourblanklines .. "," .. line2 .. "g/^\s*/d"
        endif
      endfunction
     endif
@@ -1198,7 +1198,7 @@
 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]
 
@@ -1625,8 +1625,10 @@
       This will cause the matching files to be marked.  Then,
       press "D".
 
-Please note that only empty directories may be deleted with the "D" mapping.
-Regular files are deleted with |delete()|, too.
+If your vim has 7.4 with patch#1107, then |g:netrw_localrmdir| no longer
+is used to remove directories; instead, vim's |delete()| is used with
+the "d" option.  Please note that only empty directories may be deleted
+with the "D" mapping.  Regular files are deleted with |delete()|, too.
 
 The |g:netrw_rm_cmd|, |g:netrw_rmf_cmd|, and |g:netrw_rmdir_cmd| variables are
 used to control the attempts to remove remote files and directories.  The
@@ -1645,7 +1647,8 @@
 	|g:netrw_rmf_cmd|: ssh HOSTNAME rm -f
 
 Related topics: |netrw-d|
-Associated setting variable: |g:netrw_rm_cmd| |g:netrw_ssh_cmd|
+Associated setting variable: |g:netrw_localrmdir| |g:netrw_rm_cmd|
+                             |g:netrw_rmdir_cmd|   |g:netrw_ssh_cmd|
 
 
 *netrw-explore*  *netrw-hexplore* *netrw-nexplore* *netrw-pexplore*
@@ -1688,11 +1691,7 @@
 	  to 2; edits will thus preferentially be made in window#2.
 
 	  The [N] specifies a |g:netrw_winsize| just for the new :Lexplore
-	  window. That means that
-	    if [N] < 0 : use |N| columns for the Lexplore window
-	    if [N] = 0 : a normal split is made
-	    if [N] > 0 : use N% of the current window will be used for the
-	                 new window
+	  window.
 
 	  Those who like this method often also like tree style displays;
 	  see |g:netrw_liststyle|.
@@ -1976,7 +1975,7 @@
 	Example: let g:netrw_list_hide= netrw_gitignore#Hide('my_gitignore_file')
 		Function can take additional files with git-ignore patterns.
 
-	Example: g:netrw_list_hide= netrw_gitignore#Hide() . '.*\.swp$'
+	Example: let g:netrw_list_hide= netrw_gitignore#Hide() .. '.*\.swp$'
 		Combining 'netrw_gitignore#Hide' with custom patterns.
 <
 
@@ -2816,7 +2815,7 @@
 				= 2: wide listing (multiple files in columns)
 				= 3: tree style listing
 
-  *g:netrw_list_hide*		comma separated pattern list for hiding files
+  *g:netrw_list_hide*		comma-separated pattern list for hiding files
 				Patterns are regular expressions (see |regexp|)
 				There's some special support for git-ignore
 				files: you may add the output from the helper
@@ -2826,7 +2825,7 @@
 
 				Examples:
 				 let g:netrw_list_hide= '.*\.swp$'
-				 let g:netrw_list_hide= netrw_gitignore#Hide().'.*\.swp$'
+				 let g:netrw_list_hide= netrw_gitignore#Hide() .. '.*\.swp$'
 				default: ""
 
   *g:netrw_localcopycmd*	="cp"           Linux/Unix/MacOS/Cygwin
@@ -2864,6 +2863,14 @@
 				=" /c move"                     Windows
 				Options for |g:netrw_localmovecmd|
 
+  *g:netrw_localrmdir*		="rmdir"        Linux/Unix/MacOS/Cygwin
+				=expand("$COMSPEC")             Windows
+				Remove directory command (rmdir)
+				This variable is only used if your vim is
+				earlier than 7.4 or if your vim doesn't
+				have patch#1107.  Otherwise, |delete()|
+				is used with the "d" option.
+
   *g:netrw_maxfilenamelen*	=32 by default, selected so as to make long
 				    listings fit on 80 column displays.
 				If your screen is wider, and you have file
@@ -3774,7 +3781,7 @@
 	     Netrw uses several system level commands to do things (see
 
 		 |g:netrw_localcopycmd|, |g:netrw_localmovecmd|,
-		 |g:netrw_mkdir_cmd|).
+		 |g:netrw_localrmdir|, |g:netrw_mkdir_cmd|).
 
 	    You may need to adjust the default commands for one or more of
 	    these commands by setting them properly in your .vimrc.  Another
@@ -3900,13 +3907,8 @@
 ==============================================================================
 12. History						*netrw-history* {{{1
 
-	v172:	Sep 02, 2021	* (Bram Moolenaar) Changed "l:go" to "go"
-				* (Bram Moolenaar) no need for "b" in
-				  netrw-safe guioptions
-		Nov 15, 2021	* removed netrw_localrm and netrw_localrmdir
-				  references
-		Aug 18, 2022	* (Miguel Barro) improving compatability with
-				  powershell
+	v172:	Apr 22, 2023	* removed g:netrw_localrmdiropt
+				  removed g:netrw_localrmdir
 	v171:	Oct 09, 2020	* included code in s:NetrwOptionsSafe()
 				  to allow |'bh'| to be set to delete when
 				  rather than hide when g:netrw_fastbrowse
@@ -3991,8 +3993,10 @@
 		Nov 09, 2016	* Broke apart the command from the options,
 				  mostly for Windows.  Introduced new netrw
 				  settings: |g:netrw_localcopycmdopt|
-				  |g:netrw_localcopydircmdopt| |g:netrw_localmkdiropt|
-				  |g:netrw_localmovecmdopt| g:netrw_localrmdiropt
+				  |g:netrw_localcopydircmdopt|
+				  |g:netrw_localmkdiropt|
+				  |g:netrw_localmovecmdopt|
+				  g:netrw_localrmdiropt
 		Nov 21, 2016	* (mattn) provided a patch for preview; swapped
 				  winwidth() with winheight()
 		Nov 22, 2016	* (glacambre) reported that files containing
@@ -4052,7 +4056,7 @@
 				  refreshes.  However, inside a |:map-<expr>|,
 				  tab and window changes are disallowed.  Fixed.
 				  (affects netrw's s:LocalBrowseRefresh())
-				* g:netrw_localrmdir not used any more, but
+				* |g:netrw_localrmdir| not used any more, but
 				  the relevant patch that causes |delete()| to
 				  take over was #1107 (not #1109).
 				* |expand()| is now used on |g:netrw_home|;
diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt
index 8c458fb..307a0a9 100644
--- a/runtime/doc/repeat.txt
+++ b/runtime/doc/repeat.txt
@@ -1,4 +1,4 @@
-*repeat.txt*    For Vim version 9.0.  Last change: 2023 Apr 02
+*repeat.txt*    For Vim version 9.0.  Last change: 2023 May 01
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -65,7 +65,7 @@
 This also makes it faster.
 
 Instead of the '/' which surrounds the {pattern}, you can use any other
-single byte character, but not an alphabetic character, '\', '"' or '|'.
+single byte character, but not an alphabetic character, '\', '"', '|' or '!'.
 This is useful if you want to include a '/' in the search pattern or
 replacement string.
 
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index 10b6901..8a5e5f4 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt*	For Vim version 9.0.  Last change: 2023 Apr 05
+*syntax.txt*	For Vim version 9.0.  Last change: 2023 Apr 24
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -4929,7 +4929,7 @@
 ==============================================================================
 13. Colorschemes				*color-schemes*
 
-In the next section you can find information about indivisual highlight groups
+In the next section you can find information about individual highlight groups
 and how to specify colors for them.  Most likely you want to just select a set
 of colors by using the `:colorscheme` command, for example: >
 
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 296aba9..ad18f8d 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -4186,7 +4186,6 @@
 E1134	vim9.txt	/*E1134*
 E1135	eval.txt	/*E1135*
 E1136	map.txt	/*E1136*
-E1137	map.txt	/*E1137*
 E1138	eval.txt	/*E1138*
 E1139	vim9.txt	/*E1139*
 E114	eval.txt	/*E114*
@@ -7422,6 +7421,7 @@
 g:netrw_localmkdiropt	pi_netrw.txt	/*g:netrw_localmkdiropt*
 g:netrw_localmovecmd	pi_netrw.txt	/*g:netrw_localmovecmd*
 g:netrw_localmovecmdopt	pi_netrw.txt	/*g:netrw_localmovecmdopt*
+g:netrw_localrmdir	pi_netrw.txt	/*g:netrw_localrmdir*
 g:netrw_maxfilenamelen	pi_netrw.txt	/*g:netrw_maxfilenamelen*
 g:netrw_menu	pi_netrw.txt	/*g:netrw_menu*
 g:netrw_mkdir_cmd	pi_netrw.txt	/*g:netrw_mkdir_cmd*
@@ -9885,6 +9885,7 @@
 string()	builtin.txt	/*string()*
 string-functions	usr_41.txt	/*string-functions*
 string-match	builtin.txt	/*string-match*
+string-offset-encoding	eval.txt	/*string-offset-encoding*
 strlen()	builtin.txt	/*strlen()*
 strpart()	builtin.txt	/*strpart()*
 strpbrk()	builtin.txt	/*strpbrk()*
@@ -9894,6 +9895,7 @@
 strspn()	builtin.txt	/*strspn()*
 strstr()	builtin.txt	/*strstr()*
 strtrans()	builtin.txt	/*strtrans()*
+strutf16len()	builtin.txt	/*strutf16len()*
 strwidth()	builtin.txt	/*strwidth()*
 style-changes	develop.txt	/*style-changes*
 style-compiler	develop.txt	/*style-compiler*
@@ -10556,6 +10558,7 @@
 utf-8-char-arg	mbyte.txt	/*utf-8-char-arg*
 utf-8-in-xwindows	mbyte.txt	/*utf-8-in-xwindows*
 utf-8-typing	mbyte.txt	/*utf-8-typing*
+utf16idx()	builtin.txt	/*utf16idx()*
 utf8	mbyte.txt	/*utf8*
 v	visual.txt	/*v*
 v:	eval.txt	/*v:*
diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt
index 2f6387d..26f1a8f 100644
--- a/runtime/doc/testing.txt
+++ b/runtime/doc/testing.txt
@@ -1,4 +1,4 @@
-*testing.txt*	For Vim version 9.0.  Last change: 2022 Dec 30
+*testing.txt*	For Vim version 9.0.  Last change: 2023 May 04
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -448,13 +448,14 @@
 assert_equal({expected}, {actual} [, {msg}])
 		When {expected} and {actual} are not equal an error message is
 		added to |v:errors| and 1 is returned.  Otherwise zero is
-		returned |assert-return|.
+		returned. |assert-return|
+		The error is in the form "Expected {expected} but got
+		{actual}".  When {msg} is present it is prefixed to that.
+
 		There is no automatic conversion, the String "4" is different
 		from the Number 4.  And the number 4 is different from the
 		Float 4.0.  The value of 'ignorecase' is not used here, case
 		always matters.
-		When {msg} is omitted an error in the form "Expected
-		{expected} but got {actual}" is produced.
 		Example: >
 	assert_equal('foo', 'bar')
 <		Will result in a string to be added to |v:errors|:
@@ -533,11 +534,12 @@
 assert_false({actual} [, {msg}])			*assert_false()*
 		When {actual} is not false an error message is added to
 		|v:errors|, like with |assert_equal()|.
+		The error is in the form "Expected False but got {actual}".
+		When {msg} is present it is prepended to that.
 		Also see |assert-return|.
+
 		A value is false when it is zero. When {actual} is not a
 		number the assert fails.
-		When {msg} is omitted an error in the form
-		"Expected False but got {actual}" is produced.
 
 		Can also be used as a |method|: >
 			GetResult()->assert_false()
@@ -546,14 +548,16 @@
 		This asserts number and |Float| values.  When {actual}  is lower
 		than {lower} or higher than {upper} an error message is added
 		to |v:errors|.  Also see |assert-return|.
-		When {msg} is omitted an error in the form
-		"Expected range {lower} - {upper}, but got {actual}" is
-		produced.
+		The error is in the form "Expected range {lower} - {upper},
+		but got {actual}".  When {msg} is present it is prefixed to
+		that.
 
 								*assert_match()*
 assert_match({pattern}, {actual} [, {msg}])
 		When {pattern} does not match {actual} an error message is
 		added to |v:errors|.  Also see |assert-return|.
+		The error is in the form "Pattern {pattern} does not match
+		{actual}".  When {msg} is present it is prefixed to that.
 
 		{pattern} is used as with |=~|: The matching is always done
 		like 'magic' was set and 'cpoptions' is empty, no matter what
@@ -563,8 +567,6 @@
 		Use "^" and "$" to match with the start and end of the text.
 		Use both to match the whole text.
 
-		When {msg} is omitted an error in the form
-		"Pattern {pattern} does not match {actual}" is produced.
 		Example: >
 	assert_match('^f.*o$', 'foobar')
 <		Will result in a string to be added to |v:errors|:
@@ -614,8 +616,7 @@
 		Also see |assert-return|.
 		A value is TRUE when it is a non-zero number.  When {actual}
 		is not a number the assert fails.
-		When {msg} is omitted an error in the form "Expected True but
-		got {actual}" is produced.
+		When {msg} is given it precedes the default message.
 
 		Can also be used as a |method|: >
 			GetResult()->assert_true()
diff --git a/runtime/doc/textprop.txt b/runtime/doc/textprop.txt
index 8c9c0c6..d69355b 100644
--- a/runtime/doc/textprop.txt
+++ b/runtime/doc/textprop.txt
@@ -1,4 +1,4 @@
-*textprop.txt*  For Vim version 9.0.  Last change: 2022 Dec 19
+*textprop.txt*  For Vim version 9.0.  Last change: 2023 Apr 23
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -165,8 +165,8 @@
 		   text_padding_left				*E1296*
 				used when "text" is present and {col} is zero;
 				padding between the end of the text line
-				(leftmost column for "below") and the virtual
-				text, not highlighted
+				(leftmost column for "above" and "below") and
+				the virtual text, not highlighted
 		   text_wrap	when "text" is present and {col} is zero,
 				specifies what happens if the text doesn't
 				fit:
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 178abbd..5c1d38a 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 9.0.  Last change: 2023 Apr 22
+*todo.txt*      For Vim version 9.0.  Last change: 2023 May 13
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -38,17 +38,9 @@
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-Delete ci/load-snd-dummy.sh?
-Update Filelist
-
-When using ":set no<CTRL-A>" add options starting with "no", not all boolean
-options.
-
 Crash when splitting window: #11961.  Set RedrawingDisabled in
 win_split_ins().
 
-In runtime/autoload/dist/script.vim change "set ft=" to "setlocal ft=" ?
-
 CTRL-J mapping is not used if halfway another mapping. #12002
 Is simplified mapping not used but escape code has been simplified?
 
@@ -57,16 +49,40 @@
 calling frame_new_height() and frame_new_width(), especially w_topline and
 w_skipcol.
 
-'smoothscroll' problem: #12199
-Problems related to 'smoothscroll': #12218 and #12211
+Check places that source "path/*.vim" to not match other extensions, e.g.
+.vim9, on MS-Windows (short file name match, gets expanded to long file name).
+E.g. for startup files, plugins, packs, etc.
+
+When a help item can't be found, then open 'helpfile'.  Search for the tag in
+that file and gtive E149 only when not found.  Helps for a tiny Vim installed
+without all the help files.
+
+Virtual text problems:
+-  Deleting character before a wrapping virtual text, causes for the following
+   lines to dissapear (Issue #12244)
+-  If 'list' is on, 'below' virtual text which includes 1 or 2 characters are
+   gone (Issue #12028)
+-  Virtual text aligned "above": Wrong indentation when using tabs  (Issue
+   #12232)
+-  Virtual text to the right of the line that fits exactly on screen causes
+   that line and all lines below it not to be displayed (Issue #12213)
+-  Window screen gets wrong when a virtual text is placed on 'above' or
+   'below' on an empty line (Issue #11959)
 
 include #12140: positional arguments in printf(), fixes #10577
 
 Include #11818: attach custom data to quickfix items.
 
-When a help item can't be found, then open 'helpfile'.  Search for the tag in
-that file and gtive E149 only when not found.  Helps for a tiny Vim installed
-without all the help files.
+Include #12292: buffer argument for undotree()?
+
+When 'virtualedit' is "all" and 'cursorcolumn' is set, the wrong column may be
+highlighted. (van-de-bugger, 2018 Jan 23, #2576)
+
+Improve profiling by caching matching functions:  PR  #12192
+
+Add filecopy() ?  #12346
+
+Implement foreach()  PR  #12166
 
 Errors when running tests with valgrind:
 - test_codestyle.vim:  e.g.:
@@ -100,8 +116,21 @@
 - implement :class and :interface: See |vim9-classes
   - Change access: public by default, private by prefixing "_".
 	Check for error: can't have same name twice (ignoring "_" prefix).
+  - Cannot use class type of itself in the method (Issue #12369)
+  - class members initialized during definition (Issue #12041)
+  - cannot call class member of funcref type  (Issue #12324)
+  - nested function unable to directly modify private member (Issue #12076)
+      And: can't use "this" keyword in lambda function (Issue #12336)
+  - "return this" required for early return from constructor (inconsistent)
+    (Issue #12040)
+  - class/method confusion inside ":def" when using "class extends" (Issue
+    #12089)
+  - null_object - constant type 17 not supported (Issue #12043)
+  - problem compiling object method call as function call argument (Issue
+    #12081)
   - Make ":defcompile ClassName" compile all functions and methods in the
     class.
+  - object's method in stacktrace missing information (Issue #12078)
   - Forward declaration of a class?  E.g. for Clone() function.
 	email lifepillar 2023 Mar 26
   - Getting member of variable with "any" type should be handled at runtime.
@@ -112,12 +141,18 @@
     Perhaps use "private" keyword instead of "_" prefix?
   - "final" object members - can only be set in the constructor.
   - "obj.Method()" does not always work in a compiled function, assumes "obj"
-    is a dictionary.  #12196
+    is a dictionary.  #12196  Issue #12024 might be the same problem.
+    Issue #11822: any.Func() can be a dict or an object call, need to handle
+    this at runtime.  Also see #12198 for an example.
+    Possibly issue #11981 can be fixed at the same time (has two examples).
   - accept line breaks in member initialization.  #11957
   - object empty(), len() - can class define a method to be used for them?
   - add to help: when using a default new() method then reordering object
     members may cause trouble.  Can define new() without arguments to avoid.
   - TODO items: check types for "implements" - members and methods
+  - When "Meta" is a class, is "const MetaAlias = Meta" allowed?  It should
+    either work or given an error. possibly give an error now and implement it
+    later (using a typedef).  #12006
   - how about lock/unlock?
   - When checking "implements" also check types of members and function args.
   - For chaining, allow using the class name as type for function return
@@ -127,8 +162,6 @@
   - More efficient way for interface member index than iterating over list?
   - a variant of type() that returns a different type for each class?
       list<number> and list<string> should also differ.
-  - Issue #11822: any.Func() can be a dict or an object call, need to handle
-    this at runtime.  Also see #12198 for an example.
 - implement :type
 - implement :enum
 - Promise class, could be used to wait on a popup close callback?
@@ -271,6 +304,11 @@
 - When in terminal-Normal mode when the job finishes, the cursor jumps to the
   end but the window is not updated.  This only happens when typing "a".
       :term bash -c "for V in {0..5}; do echo $V; sleep 1; done"
+- GUI: cursor color is not updated when going to Terminal-Job mode.  #12328
+- GUI: cursor color is not updated when switching between tabs with a key.
+  #12329
+- GUI: cursor color is not updated when switching between tabs with a mouse
+  click.  #12330
 - When started with ":terminal ++close" and the shell exits but there is a
   background process, the window remains open, because the channel still
   exists (and output still shows).  Perhaps close the window when an explicit
@@ -345,6 +383,11 @@
 
 Add winid arg to col() and charcol()  #11466 (request #11461)
 
+When :argument has a non-number argument, use it like :buffer to find the
+argument by name.  #12272
+
+Fold unexpectedly closed when inserting fold marker with CTRL-V (Issue #12320)
+
 Can we make 'noendofline' and 'endoffile' visible?  Should show by default,
 since it's an unusual situation.
 - Show 'noendofline' when it would be used for writing ('fileformat' "dos")
@@ -763,6 +806,9 @@
 files that source the actual file.  E.g. menu_da_de -> menu_da
 Include part of #3242?
 
+Patch for different behavior of text objects with quotes: #11976
+Is this actually better?
+
 Patch to have text objects defined by arbitrary single characters. (Daniel
 Thau, 2013 Nov 20, 2014 Jan 29, 2014 Jan 31)
 Added tests (James McCoy, 2016 Aug 3, #958).  Still needs more work.
@@ -1031,9 +1077,6 @@
 directory (Paulo Marcel Coelho Arabic, 2017 Oct 30, #2266)
 Also see #1689.
 
-When 'virtualedit' is "all" and 'cursorcolumn' is set, the wrong column may be
-highlighted. (van-de-bugger, 2018 Jan 23, #2576)
-
 No profile information for function that executes ":quit". (Daniel Hahler,
 2017 Dec 26, #2501)
 
diff --git a/runtime/doc/usr_01.txt b/runtime/doc/usr_01.txt
index 2cb74d4..e8279fd 100644
--- a/runtime/doc/usr_01.txt
+++ b/runtime/doc/usr_01.txt
@@ -1,4 +1,4 @@
-*usr_01.txt*	For Vim version 9.0.  Last change: 2019 Nov 21
+*usr_01.txt*	For Vim version 9.0.  Last change: 2023 May 12
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -161,7 +161,7 @@
 ==============================================================================
 *01.4*	Copyright					*manual-copyright*
 
-The Vim user manual and reference manual are Copyright (c) 1988-2003 by Bram
+The Vim user manual and reference manual are Copyright (c) 1988 by Bram
 Moolenaar.  This material may be distributed only subject to the terms and
 conditions set forth in the Open Publication License, v1.0 or later.  The
 latest version is presently available at:
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index 4e194d3..2d89e46 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -1,4 +1,4 @@
-*usr_41.txt*	For Vim version 9.0.  Last change: 2023 Jan 17
+*usr_41.txt*	For Vim version 9.0.  Last change: 2023 May 06
 
 		     VIM USER MANUAL - by Bram Moolenaar