diff --git a/src/files.c b/src/files.c index aba75a369dbca7eef11d761024d15835b51f357d..2498ca66d5f339cae45456b0f12ff7ac596d225b 100644 --- a/src/files.c +++ b/src/files.c @@ -742,6 +742,8 @@ void read_file(FILE *f, int fd, const char *filename, bool undoable, { ssize_t was_lineno = openfile->current->lineno; /* The line number where we start the insertion. */ + size_t was_leftedge = 0; + /* The leftedge where we start the insertion. */ size_t num_lines = 0; /* The number of lines in the file. */ size_t len = 0; @@ -771,6 +773,9 @@ void read_file(FILE *f, int fd, const char *filename, bool undoable, #ifndef NANO_TINY if (undoable) add_undo(INSERT); + + if (ISSET(SOFTWRAP)) + was_leftedge = (xplustabs() / editwincols) * editwincols; #endif /* Create an empty buffer. */ @@ -919,7 +924,8 @@ void read_file(FILE *f, int fd, const char *filename, bool undoable, statusline(HUSH, P_("Read %lu line", "Read %lu lines", (unsigned long)num_lines), (unsigned long)num_lines); - if (openfile->current->lineno - was_lineno < editwinrows) + /* If we inserted less than a screenful, don't center the cursor. */ + if (less_than_a_screenful(was_lineno, was_leftedge)) focusing = FALSE; #ifndef NANO_TINY