[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemacs-commit] qemacs extras.c
From: |
Charlie Gordon |
Subject: |
[Qemacs-commit] qemacs extras.c |
Date: |
Sat, 1 Apr 2017 10:38:29 -0400 (EDT) |
CVSROOT: /sources/qemacs
Module name: qemacs
Changes by: Charlie Gordon <chqrlie> 17/04/01 10:38:29
Modified files:
. : extras.c
Log message:
extras: improve compare-windows
- move resync code to separate function
- try and resync on spacing changes and single word changes
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/extras.c?cvsroot=qemacs&r1=1.63&r2=1.64
Patches:
Index: extras.c
===================================================================
RCS file: /sources/qemacs/qemacs/extras.c,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -b -r1.63 -r1.64
--- extras.c 31 Mar 2017 15:33:02 -0000 1.63
+++ extras.c 1 Apr 2017 14:38:28 -0000 1.64
@@ -66,6 +66,43 @@
return 0;
}
+static void compare_resync(EditState *s1, EditState *s2,
+ int save1, int save2,
+ int *offset1_ptr, int *offset2_ptr)
+{
+ int pos1, off1, pos2, off2;
+ int ch1, ch2;
+
+ off1 = save1;
+ off2 = save2;
+ /* try skipping blanks */
+ while (qe_isblank(ch1 = eb_nextc(s1->b, pos1 = off1, &off1)))
+ continue;
+ while (qe_isblank(ch2 = eb_nextc(s2->b, pos2 = off2, &off2)))
+ continue;
+ if (ch1 != ch2) {
+ /* try skipping current words */
+ off1 = pos1;
+ off2 = pos2;
+ while (!qe_isspace(ch1 = eb_nextc(s1->b, pos1 = off1, &off1)))
+ continue;
+ while (!qe_isspace(ch2 = eb_nextc(s2->b, pos2 = off2, &off2)))
+ continue;
+ if (ch1 != ch2) {
+ /* Try to resync from end of line */
+ pos1 = eb_goto_eol(s1->b, save1);
+ pos2 = eb_goto_eol(s2->b, save2);
+ }
+ }
+ while (pos1 > save1 && pos2 > save2
+ && eb_prevc(s1->b, pos1, &off1) == eb_prevc(s2->b, pos2, &off2)) {
+ pos1 = off1;
+ pos2 = off2;
+ }
+ *offset1_ptr = pos1;
+ *offset2_ptr = pos2;
+}
+
void do_compare_windows(EditState *s, int argval)
{
QEmacsState *qs = s->qe_state;
@@ -145,29 +182,7 @@
}
if (resync) {
int save1 = s1->offset, save2 = s2->offset;
-
- /* Try to resync from end of line */
- if (ch1 != '\n' && ch2 != '\n') {
- int pos1, off1, pos2, off2;
- do_eol(s1);
- do_eol(s2);
- pos1 = s1->offset;
- pos2 = s2->offset;
- while (pos1 > save1 && pos2 > save2 &&
- eb_prevc(s1->b, pos1, &off1) == eb_prevc(s2->b,
pos2, &off2)) {
- pos1 = off1;
- pos2 = off2;
- }
- if (pos1 < s1->offset) {
- s1->offset = pos1;
- s2->offset = pos2;
- put_status(s, "Skipped %d and %d bytes", pos1 - save1,
pos2 - save2);
- break;
- }
- }
- /* Skip to next line in parallel */
- s1->offset = eb_next_line(s1->b, s1->offset);
- s2->offset = eb_next_line(s2->b, s2->offset);
+ compare_resync(s1, s2, save1, save2, &s1->offset, &s2->offset);
put_status(s, "Skipped %d and %d bytes",
s1->offset - save1, s2->offset - save2);
break;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemacs-commit] qemacs extras.c,
Charlie Gordon <=