From c30d3d8010ff6015fadfcfa9c10ceb40521b8b44 Mon Sep 17 00:00:00 2001
From: Benno Schulenberg <bensberg@telfort.nl>
Date: Sat, 2 Dec 2017 10:06:12 +0100
Subject: [PATCH] wrapping: delete trailing blanks upon hardwrapping, when
 requested

This fulfills https://savannah.gnu.org/bugs/?52198.
---
 src/text.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/text.c b/src/text.c
index 0c9dd170..b1b1727c 100644
--- a/src/text.c
+++ b/src/text.c
@@ -1613,7 +1613,7 @@ bool do_wrap(filestruct *line)
 	openfile->current_x = line_len;
 
 	/* If the remainder doesn't end in a blank, add a space. */
-	if (!is_blank_mbchar(tail) && !ISSET(JUSTIFY_TRIM)) {
+	if (!is_blank_mbchar(tail)) {
 #ifndef NANO_TINY
 	    add_undo(ADD);
 #endif
@@ -1638,8 +1638,21 @@ bool do_wrap(filestruct *line)
 	}
     }
 
-    /* Go to the wrap location and split the line there. */
+    /* Go to the wrap location. */
     openfile->current_x = wrap_loc;
+
+    /* When requested, snip trailing blanks off the wrapped line. */
+    if (ISSET(JUSTIFY_TRIM)) {
+	size_t cur_x = move_mbleft(line->data, wrap_loc);
+
+	while (is_blank_mbchar(line->data + cur_x)) {
+	    openfile->current_x = cur_x;
+	    do_delete();
+	    cur_x = move_mbleft(line->data, cur_x);
+	}
+    }
+
+    /* Now split the line. */
     do_enter();
 
     if (old_x < wrap_loc) {
-- 
GitLab