runtime(helptoc): reload cached g:helptoc.shell_prompt when starting toc

Follow up on PR 10446 [1] so that changes at run-time (or after loading
a vimrc) are reflected at next use. Instead of "uncaching" the variable
by computing SHELL_PROMPT on each use, which could negatively impact
performance, reload any user settings before creating the TOC.

Also make sure, changes to the shell prompt variable do correctly
invalidate b:toc, so that the table of content is correctly re-created
after user makes any changes.

[1]: https://github.com/vim/vim/pull/10446#issuecomment-2485169333

closes: #16097

Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/pack/dist/opt/helptoc/autoload/helptoc.vim b/runtime/pack/dist/opt/helptoc/autoload/helptoc.vim
index 087da79..c0d86a4 100644
--- a/runtime/pack/dist/opt/helptoc/autoload/helptoc.vim
+++ b/runtime/pack/dist/opt/helptoc/autoload/helptoc.vim
@@ -2,9 +2,20 @@
 
 # Config {{{1
 
-const SHELL_PROMPT: string = g:
-    ->get('helptoc', {})
-    ->get('shell_prompt', '^\w\+@\w\+:\f\+\$\s')
+var SHELL_PROMPT: string = ''
+
+def UpdateUserSettings() #{{{2
+    var new_prompt: string = g:
+        ->get('helptoc', {})
+        ->get('shell_prompt', '^\w\+@\w\+:\f\+\$\s')
+    if new_prompt != SHELL_PROMPT
+        SHELL_PROMPT = new_prompt
+        # invalidate cache: user config has changed
+        unlet! b:toc
+    endif
+enddef
+
+UpdateUserSettings()
 
 # Init {{{1
 
@@ -141,6 +152,8 @@
         return
     endif
 
+    UpdateUserSettings()
+
     # invalidate the cache if the buffer's contents has changed
     if exists('b:toc') && &filetype != 'man'
         if b:toc.changedtick != b:changedtick