diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt
index a956437..18f9c28 100644
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -1,4 +1,4 @@
-*pi_netrw.txt*  For Vim version 9.1.  Last change: 2024 Oct 27
+*pi_netrw.txt*  For Vim version 9.1.  Last change: 2024 Oct 31
 
 	    ------------------------------------------------
 	    NETRW REFERENCE MANUAL    by Charles E. Campbell
@@ -1469,7 +1469,6 @@
 that the removal is in fact what you want to do.  If netrw doesn't have
 permission to remove a file, it will issue an error message.
 
-                                                *netrw-gx* *Open* *Launch*
 CUSTOMIZING BROWSING WITH A SPECIAL HANDLER	*netrw-x* *netrw-handler* {{{2
 
 Certain files, such as html, gif, jpeg, (word/office) doc, etc, files, are
@@ -1479,7 +1478,7 @@
         * hitting gx with the cursor atop the file path or alternatively x
           in a netrw buffer; the former can be disabled by defining the
           |g:netrw_nogx| variable
-        * when in command line, typing :Open <path>
+        * when in command line, typing :Open <path>, see |:Open| below.
 
 One may also use visual mode (see |visual-start|) to select the text that the
 special handler will use.  Normally gx checks for a close-by URL or file name
@@ -1490,47 +1489,54 @@
 |visual-block|) and then pressing gx.
 
 The selection function can be adapted for each filetype by adding a function
-Netrw_get_URL_<filetype>, where <filetype> is given by &filetype.
+`Netrw_get_URL_<filetype>`, where <filetype> is given by the 'filetype'.
 The function should return the URL or file name to be used by gx, and will
 fall back to the default behavior if it returns an empty string.
 For example, special handlers for links Markdown and HTML are
->
-" make gx work on concealed links regardless of exact cursor position
-function Netrw_get_URL_markdown()
-  " markdown URL such as [link text](http://ya.ru 'yandex search')
-  try
-    let save_view = winsaveview()
-    if searchpair('\[.\{-}\](', '', ')\zs', 'cbW', '', line('.')) > 0
-      return matchstr(getline('.')[col('.')-1:], '\[.\{-}\](\zs' .. g:netrw_regex_url .. '\ze\(\s\+.\{-}\)\?)')
-    endif
-  finally
-    call winrestview(save_view)
-    return ''
-  endtry
-endfunction
 
-function Netrw_get_URL_html()
-  " HTML URL such as <a href='http://www.python.org'>Python is here</a>
-  "                  <a href="http://www.python.org"/>
-  try
-    let save_view = winsaveview()
-    if searchpair('<a\s\+href=', '', '\%(</a>\|/>\)\zs', 'cbW', '', line('.')) > 0
-      return matchstr(getline('.')[col('.') - 1 : ],
-            \ 'href=["'.."'"..']\?\zs\S\{-}\ze["'.."'"..']\?/\?>')
-    endif
-  finally
-    call winrestview(save_view)
-    return ''
-  endtry
-endfunction
+" make gx work on concealed links regardless of exact cursor position: >
+
+  function Netrw_get_URL_markdown()
+    " markdown URL such as [link text](http://ya.ru 'yandex search')
+    try
+      let save_view = winsaveview()
+      if searchpair('\[.\{-}\](', '', ')\zs', 'cbW', '', line('.')) > 0
+        return matchstr(getline('.')[col('.')-1:],
+          \ '\[.\{-}\](\zs' .. g:netrw_regex_url .. '\ze\(\s\+.\{-}\)\?)')
+      endif
+    finally
+      call winrestview(save_view)
+      return ''
+    endtry
+  endfunction
+
+  function Netrw_get_URL_html()
+    " HTML URL such as <a href='http://www.python.org'>Python is here</a>
+    "                  <a href="http://www.python.org"/>
+    try
+      let save_view = winsaveview()
+      if searchpair('<a\s\+href=', '', '\%(</a>\|/>\)\zs', 'cbW', '', line('.')) > 0
+        return matchstr(getline('.')[col('.') - 1 : ],
+          \ 'href=["'.."'"..']\?\zs\S\{-}\ze["'.."'"..']\?/\?>')
+      endif
+    finally
+      call winrestview(save_view)
+      return ''
+    endtry
+  endfunction
 <
-
 Other than a file path, the text under the cursor may be a URL.  Netrw uses
 by default the following regular expression to determine if the text under the
 cursor is a URL:
 >
-	g:netrw_regex_url = '\%(\%(http\|ftp\|irc\)s\?\|file\)://\S\{-}'
+  :let g:netrw_regex_url = '\%(\%(http\|ftp\|irc\)s\?\|file\)://\S\{-}'
 <
+Associated setting variables:
+	|g:netrw_gx|	control how gx picks up the text under the cursor
+	|g:netrw_nogx|	prevent gx map while editing
+	|g:netrw_suppress_gx_mesg| controls gx's suppression of browser messages
+
+OPENING FILES AND LAUNCHING APPS                 *netrw-gx* *:Open* *:Launch* {{{2
 
 Netrw determines which special handler by the following method:
 
@@ -1544,24 +1550,25 @@
     * for Mac OS X			: open is used.
     * for Linux				: xdg-open is used.
 
-To open a file <filepath> by the appropriate handler, type
+To open a path (or URL) <path> by the appropriate handler, type >
 
-	:Open <filepath>
+    :Open <path>
+<
+No escaping, neither for the shell nor for Vim's command-line, is needed.
 
-No escaping, neither for the shell, nor for Vim's command-line is needed.
+To launch a specific application <app> <args>, often <args> being <path> >
 
-To launch a specific application <app> <args>, often <args> being <filepath>,
-
-	:Launch <app> <args>.
+    :Launch <app> <args>.
 
 Since <args> can be arbitrarily complex, in particular contain many file
 paths, the escaping is left to the user.
 
-Associated setting variables:
-	|g:netrw_gx|	control how gx picks up the text under the cursor
-	|g:netrw_nogx|	prevent gx map while editing
-	|g:netrw_suppress_gx_mesg| controls gx's suppression of browser messages
+If you disabled the netrw plugin by setting g:loaded_netrwPlugin (see
+|netrw-noload|), then you can use >
 
+    :call netrw#Launch('<app> <args>')
+    :call netrw#Open('<path>')
+<
 							*netrw-curdir*
 DELETING BOOKMARKS					*netrw-mB* {{{2
 
