patch 8.2.4007: session does not restore help buffer properly

Problem:    Session does not restore help buffer properly when "options' is
            missing from 'sessionoptions'.
Solution:   Use a ":help" command to create the help window. (closes #9475,
            closes #9458, closes #9472)
diff --git a/src/session.c b/src/session.c
index fdda5ee..21af902 100644
--- a/src/session.c
+++ b/src/session.c
@@ -348,16 +348,32 @@
     // Edit the file.  Skip this when ":next" already did it.
     if (add_edit && (!did_next || wp->w_arg_idx_invalid))
     {
+	if (bt_help(wp->w_buffer))
+	{
+	    char *curtag = "";
+
+	    // A help buffer needs some options to be set.
+	    // First, create a new empty buffer with "buftype=help".
+	    // Then ":help" will re-use both the buffer and the window and set
+	    // the options, even when "options" is not in 'sessionoptions'.
+	    if (0 < wp->w_tagstackidx
+		    && wp->w_tagstackidx <= wp->w_tagstacklen)
+		curtag = (char *)wp->w_tagstack[wp->w_tagstackidx - 1].tagname;
+
+	    if (put_line(fd, "enew | setl bt=help") == FAIL
+		    || fprintf(fd, "help %s", curtag) < 0
+		    || put_eol(fd) == FAIL)
+		return FAIL;
+	}
 # ifdef FEAT_TERMINAL
-	if (bt_terminal(wp->w_buffer))
+	else if (bt_terminal(wp->w_buffer))
 	{
 	    if (term_write_session(fd, wp, terminal_bufs) == FAIL)
 		return FAIL;
 	}
-	else
 # endif
 	// Load the file.
-	if (wp->w_buffer->b_ffname != NULL
+	else if (wp->w_buffer->b_ffname != NULL
 # ifdef FEAT_QUICKFIX
 		&& !bt_nofilename(wp->w_buffer)
 # endif