nano-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] wrapping: do automatic hard-wrapping also when --autoindent is i


From: Benno Schulenberg
Subject: [PATCH] wrapping: do automatic hard-wrapping also when --autoindent is in effect
Date: Mon, 16 Dec 2019 14:05:30 +0100

This copies the behavior of the rewrap_paragraph() routine that is
used during justification, so that automatic hard-wrapping ends up
with the same result as justifying.

This fixes https://savannah.gnu.org/bugs/?57425.

Bug is old -- it existed since at least version 2.0.6.
---
 src/text.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/text.c b/src/text.c
index 1350ba06..abc20307 100644
--- a/src/text.c
+++ b/src/text.c
@@ -1405,6 +1405,8 @@ bool do_wrap(void)
                /* The line to be wrapped, if needed and possible. */
        size_t line_len = strlen(line->data);
                /* The length of this line. */
+       size_t pre_len = quote_length(line->data);
+               /* The length of the leading quoting, plus later also 
indentation. */
        size_t cursor_x = openfile->current_x;
                /* The current cursor position, for comparison with the wrap 
point. */
        ssize_t wrap_loc;
@@ -1414,25 +1416,24 @@ bool do_wrap(void)
        size_t rest_length;
                /* The length of the remainder. */
 
+       pre_len += indent_length(line->data + pre_len);
+
        /* First find the last blank character where we can break the line. */
-       wrap_loc = break_line(line->data, wrap_at, FALSE);
+       wrap_loc = break_line(line->data + pre_len,
+                                                       wrap_at - 
wideness(line->data, pre_len), FALSE);
 
        /* If no wrapping point was found before end-of-line, we don't wrap. */
-       if (wrap_loc == -1 || line->data[wrap_loc] == '\0')
+       if (wrap_loc == -1 || wrap_loc + pre_len == line_len)
                return FALSE;
 
        /* Step forward to the character just after the blank. */
-       wrap_loc = step_right(line->data, wrap_loc);
+       wrap_loc = step_right(line->data + pre_len, wrap_loc) + pre_len;
 
        /* When now at end-of-line, no need to wrap. */
        if (line->data[wrap_loc] == '\0')
                return FALSE;
 
 #ifndef NANO_TINY
-       /* When autoindenting, we don't wrap right after the indentation. */
-       if (ISSET(AUTOINDENT) && wrap_loc == indent_length(line->data))
-               return FALSE;
-
        add_undo(SPLIT_BEGIN, NULL);
 #endif
 #ifdef ENABLE_JUSTIFY
-- 
2.24.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]