]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix rare problems with current-column when text is invisible
authorEli Zaretskii <eliz@gnu.org>
Wed, 26 Oct 2022 14:21:45 +0000 (17:21 +0300)
committerEli Zaretskii <eliz@gnu.org>
Wed, 26 Oct 2022 14:21:45 +0000 (17:21 +0300)
* src/indent.c (scan_for_column, compute_motion): Don't miss
compositions when the position to check for composition happens to
be inside invisible text.  (Bug#58791)

src/indent.c

index aa905f387bbd4427d744065516dbc04e7638ddba..4bf597a339facfaa49ad4b18f767235bb8552c84 100644 (file)
@@ -637,6 +637,11 @@ scan_for_column (ptrdiff_t *endpos, EMACS_INT *goalcol,
            scan_byte = CHAR_TO_BYTE (scan);
          if (scan >= end)
            goto endloop;
+         /* We may have over-stepped cmp_it.stop_pos while skipping
+            the invisible text.  If so, update cmp_it.stop_pos.  */
+         if (scan > cmp_it.stop_pos && cmp_it.id < 0)
+           composition_reseat_it (&cmp_it, scan, scan_byte, end,
+                                  w, -1, NULL, Qnil);
        }
 
       /* Test reaching the goal column.  We do this after skipping
@@ -1358,6 +1363,9 @@ compute_motion (ptrdiff_t from, ptrdiff_t frombyte, EMACS_INT fromvpos,
              pos = newpos;
              pos_byte = CHAR_TO_BYTE (pos);
            }
+         if (newpos > cmp_it.stop_pos && cmp_it.id < 0)
+           composition_reseat_it (&cmp_it, pos, pos_byte, to,
+                                  win, -1, NULL, Qnil);
 
          rarely_quit (++quit_count);
        }