help: keep the text at the same position when the screen is resized
However, prefer moving the starting point of the text backwards over moving it forward, so that of the same paragraph more text is shown instead of less. But scroll an empty line out of view -- no text is "lost" then.master
parent
f9fea02fc5
commit
3d62d32cbe
28
src/help.c
28
src/help.c
|
@ -39,6 +39,9 @@ const char *beg_of_intro = NULL;
|
||||||
/* The point in the help text where the introductory paragraphs
|
/* The point in the help text where the introductory paragraphs
|
||||||
* begin. */
|
* begin. */
|
||||||
|
|
||||||
|
static size_t location;
|
||||||
|
/* The offset (in bytes) of the topleft of the shown help text. */
|
||||||
|
|
||||||
char *tempfilename = NULL;
|
char *tempfilename = NULL;
|
||||||
/* Name of the safe temporary file that we will use for wrapping
|
/* Name of the safe temporary file that we will use for wrapping
|
||||||
* and writing the help text. */
|
* and writing the help text. */
|
||||||
|
@ -46,9 +49,8 @@ char *tempfilename = NULL;
|
||||||
/* Writes the hard wrapped help text in the temp file and displays it. */
|
/* Writes the hard wrapped help text in the temp file and displays it. */
|
||||||
void display_the_help_text(bool redisplaying)
|
void display_the_help_text(bool redisplaying)
|
||||||
{
|
{
|
||||||
int line_size;
|
int line_size, sum = 0;
|
||||||
const char *ptr = beg_of_intro;
|
const char *ptr = beg_of_intro;
|
||||||
/* The current line of the help text. */
|
|
||||||
FILE *fp = fopen(tempfilename, "w+b");
|
FILE *fp = fopen(tempfilename, "w+b");
|
||||||
|
|
||||||
if (fp == NULL) {
|
if (fp == NULL) {
|
||||||
|
@ -82,6 +84,16 @@ void display_the_help_text(bool redisplaying)
|
||||||
open_buffer(tempfilename, FALSE);
|
open_buffer(tempfilename, FALSE);
|
||||||
|
|
||||||
display_buffer();
|
display_buffer();
|
||||||
|
|
||||||
|
/* Move to the position in the file where we were before. */
|
||||||
|
while (TRUE) {
|
||||||
|
sum += strlen(openfile->current->data);
|
||||||
|
if (sum > location)
|
||||||
|
break;
|
||||||
|
openfile->current = openfile->current->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
openfile->edittop = openfile->current;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Our main help-viewer function. */
|
/* Our main help-viewer function. */
|
||||||
|
@ -97,6 +109,7 @@ void do_help(void)
|
||||||
functionptrtype func;
|
functionptrtype func;
|
||||||
/* The function of the key the user typed in. */
|
/* The function of the key the user typed in. */
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
filestruct *line;
|
||||||
int line_size;
|
int line_size;
|
||||||
int saved_margin = 0;
|
int saved_margin = 0;
|
||||||
/* For avoiding the line numbers on the help screen. */
|
/* For avoiding the line numbers on the help screen. */
|
||||||
|
@ -121,6 +134,7 @@ void do_help(void)
|
||||||
|
|
||||||
/* Set help_text as the string to display. */
|
/* Set help_text as the string to display. */
|
||||||
help_init();
|
help_init();
|
||||||
|
location = 0;
|
||||||
|
|
||||||
assert(help_text != NULL);
|
assert(help_text != NULL);
|
||||||
|
|
||||||
|
@ -216,8 +230,16 @@ void do_help(void)
|
||||||
break;
|
break;
|
||||||
} else
|
} else
|
||||||
unbound_key(kbinput);
|
unbound_key(kbinput);
|
||||||
}
|
|
||||||
|
|
||||||
|
location = 0;
|
||||||
|
line = openfile->fileage;
|
||||||
|
|
||||||
|
/* Count how far (in bytes) edittop is into the file. */
|
||||||
|
while (line != openfile->edittop) {
|
||||||
|
location += strlen(line->data);
|
||||||
|
line = line->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* We're exiting from the help screen. So, restore the flags and the
|
/* We're exiting from the help screen. So, restore the flags and the
|
||||||
* original menu, refresh the entire screen and deallocate the memory. */
|
* original menu, refresh the entire screen and deallocate the memory. */
|
||||||
|
|
Loading…
Reference in New Issue