From 3f5b281672ae6d35ca6831bc6d01ae9ed7bc4e72 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Sat, 3 Jun 2006 09:43:30 +0000 Subject: [PATCH] Find previous and next diffs. 'P' and 'N' Signed-off-by: Neil Brown --- TODO | 4 ++-- vpatch.c | 32 +++++++++++++++++++++++++++----- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/TODO b/TODO index 083e5ac..8f7290d 100644 --- 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 diff --git a/vpatch.c b/vpatch.c index ae212b3..f0d83fa 100644 --- 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; -- 2.39.5