From fd82989e292e56ed08e2b10f3267f7876c638ff2 Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Tue, 7 Feb 2017 22:09:16 -0600
Subject: [PATCH] softwrap: count softwrapped chunks properly in read_file()

Use less_than_a_screenful() again, just as in do_uncut_text().
---
 src/files.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/files.c b/src/files.c
index aba75a36..2498ca66 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
-- 
GitLab