diff --git a/src/help.c b/src/help.c
index 90a23c820c6e99f8fe41de7f031fb99cb6e37010..ba6cd2cb91cac763b442186b2b517ccb5109efa7 100644
--- a/src/help.c
+++ b/src/help.c
@@ -36,43 +36,43 @@ static const char *start_of_body = NULL;
 	/* The point in the help text just after the title. */
 
 static char *end_of_intro = NULL;
-	/* The point in the help text where the introductory paragraphs end
-	 * and the shortcut descriptions begin. */
+	/* The point in the help text where the shortcut descriptions begin. */
 
 static size_t location;
 	/* The offset (in bytes) of the topleft of the shown help text. */
 
 char *tempfilename = NULL;
-	/* Name of the safe temporary file that we will use for wrapping
-	 * and writing the help text. */
+	/* Name of the temporary file used for wrapping the help text. */
 
-/* Writes the hard wrapped help text in the temp file and displays it. */
+/* Hard-wrap the help text, write it to the existing temporary file, and
+ * read that file into a new buffer. */
 void display_the_help_text(bool redisplaying)
 {
-    int line_size, sum = 0;
+    int sum = 0;
     const char *ptr = start_of_body;
-    FILE *fp = fopen(tempfilename, "w+b");
+    FILE *tempfile = fopen(tempfilename, "w+b");
 
-    if (fp == NULL) {
+    /* If re-opening the temporary file failed, give up. */
+    if (tempfile == NULL) {
 	statusline(ALERT, _("Error writing temp file: %s"), strerror(errno));
 	return;
     }
 
-    /* Wrap and copy the rest of the help_text into the temporary file. */
+    /* Write the body of the help_text into the temporary file. */
     while (*ptr != '\0') {
-	line_size = help_line_len(ptr);
-	fwrite(ptr, sizeof(char), line_size, fp);
-	ptr += line_size;
+	int length = help_line_len(ptr);
 
-	/* Hard wrap the lines in the help text. */
+	fwrite(ptr, sizeof(char), length, tempfile);
+	ptr += length;
+
+	/* Hard-wrap the lines in the help text. */
 	if (*ptr != '\n')
-	    fwrite("\n", sizeof(char), 1, fp);
-	else
-	    while (*ptr == '\n')
-		fwrite(ptr++, sizeof(char), 1, fp);
+	    fwrite("\n", sizeof(char), 1, tempfile);
+	else while (*ptr == '\n')
+	    fwrite(ptr++, sizeof(char), 1, tempfile);
     }
 
-    fclose(fp);
+    fclose(tempfile);
 
     if (redisplaying)
 	close_buffer();
@@ -241,15 +241,19 @@ void do_help(void)
 	}
     }
 
-    /* Switch back to the buffer we were invoked from. */
-    switch_to_prev_buffer_void();
-
     /* Restore the settings of all flags. */
     memcpy(flags, stash, sizeof(flags));
 
 #ifdef ENABLE_LINENUMBERS
     margin = was_margin;
 #endif
+    tabsize = was_tabsize;
+#ifndef DISABLE_COLOR
+    syntaxstr = was_syntax;
+#endif
+
+    /* Switch back to the buffer we were invoked from. */
+    switch_to_prev_buffer_void();
 
     if (ISSET(NO_HELP)) {
 	blank_bottombars();
@@ -272,10 +276,6 @@ void do_help(void)
 
     free(answer);
     answer = saved_answer;
-    tabsize = was_tabsize;
-#ifndef DISABLE_COLOR
-    syntaxstr = was_syntax;
-#endif
 
     remove(tempfilename);
     free(tempfilename);