]> git.neil.brown.name Git - wiggle.git/commitdiff
Find previous and next diffs.
authorNeil Brown <neilb@suse.de>
Sat, 3 Jun 2006 09:43:30 +0000 (09:43 +0000)
committerNeil Brown <neilb@suse.de>
Sat, 3 Jun 2006 09:43:30 +0000 (09:43 +0000)
'P' and 'N'

Signed-off-by: Neil Brown <neilb@suse.de>
TODO
vpatch.c

diff --git a/TODO b/TODO
index 083e5ac3f3459bdcd3344cecf6f9eaa1e20f43b9..8f7290de1b0360bba09d8fca459df84ac64c42db 100644 (file)
--- a/TODO
+++ b/TODO
@@ -174,13 +174,13 @@ TODO
 DONE - implemented Grouped diffs
 DONE - at same time, lines with no diff should show no diff.
  - put line/col number is status bar
- - allow cursor to move left/right an scroll-on-demand.
+ - allow cursor to move left/right and scroll-on-demand.
  - If we have selected 'before', then don't show 'after' lines..
 DONE - blank after end and before begining
  - better movement:
      DONE   top
      DONE   bottom
-        next/prev diff
+     DONE   next/prev diff
         next/prev conflict
         incr-search
      DONE   page up/down
index ae212b34e1f153802c01aa0fb9c9704830b07ae1..f0d83fa6b5f30c5fd9393d4cf893186ca5b46c4c 100644 (file)
--- a/vpatch.c
+++ b/vpatch.c
@@ -1499,14 +1499,36 @@ void merge_window(struct plist *p, FILE *f, int reverse)
                        }
                        break;
                case 'N':
-                       /* Next 'patch' */
-                       while (pos.p.m >= 0 && ci.merger[pos.p.m].type == Unmatched)
-                               next_mline(&pos,fm,fb,fa,ci.merger, mode);
-                       row = -10;
+                       /* Next diff */
+                       tpos = pos; row--;
+                       do {
+                               pos = tpos; row++;
+                               next_mline(&tpos, fm,fb,fa,ci.merger, mode);
+                       } while (pos.side != 0 && ci.merger[tpos.p.m].type != End);
+                       tpos = pos; row--;
+                       do {
+                               pos = tpos; row++;
+                               next_mline(&tpos, fm,fb,fa,ci.merger, mode);
+                       } while (pos.side == 0 && ci.merger[tpos.p.m].type != End);
+
+                       break;
+               case 'P':
+                       /* Previous diff */
+                       tpos = pos; row++;
+                       do {
+                               pos = tpos; row--;
+                               prev_mline(&tpos, fm,fb,fa,ci.merger, mode);
+                       } while (tpos.side == 0 && tpos.p.m >= 0);
+                       tpos = pos; row++;
+                       do {
+                               pos = tpos; row--;
+                               prev_mline(&tpos, fm,fb,fa,ci.merger, mode);
+                       } while (tpos.side != 0 && tpos.p.m >= 0);
+
                        break;
+
                case 'k':
                case 'p':
-               case 'P':
                case 'P'-64:
                case KEY_UP:
                        if (tnum < 0) tnum = 1;