diff -Nru vdr-1.7.31/menu.c vdr-1.7.31-edit_marks/menu.c --- vdr-1.7.31/menu.c 2012-10-14 17:58:10.000000000 +0000 +++ vdr-1.7.31-edit_marks/menu.c 2012-10-14 17:58:39.000000000 +0000 @@ -5088,10 +5088,6 @@ case kGreen: SkipSeconds(-60); break; case kYellow|k_Repeat: case kYellow: SkipSeconds( 60); break; - case k1|k_Repeat: - case k1: SkipSeconds(-20); break; - case k3|k_Repeat: - case k3: SkipSeconds( 20); break; case kPrev|k_Repeat: case kPrev: if (lastSkipTimeout.TimedOut()) { lastSkipSeconds = REPLAYCONTROLSKIPSECONDS; @@ -5119,10 +5115,47 @@ Stop(); return osEnd; default: { + bool play, forward; + int speed; + int Current, Total; + cMark *m; DoShowMode = false; switch (int(Key)) { // Editing: - case kMarkToggle: MarkToggle(); break; + case k1|k_Repeat: + case k1: if (GetReplayMode(play, forward, speed) && !play && GetIndex(Current, Total) && (m = marks.Get(Current)) != NULL) { + displayFrames = true; + int p = SkipFrames(-SecondsToFrames(5, FramesPerSecond())); + cMark *m2; + if ((m2 = marks.Prev(m)) != NULL && m2->Position() >= p) + break; + m->SetPosition(p); + Goto(m->Position(), true); + marks.Save(); + } + else + SkipSeconds(-20); + break; + case k3|k_Repeat: + case k3: if (GetReplayMode(play, forward, speed) && !play && GetIndex(Current, Total) && (m = marks.Get(Current)) != NULL) { + displayFrames = true; + int p = SkipFrames(SecondsToFrames(5, FramesPerSecond())); + cMark *m2; + if ((m2 = marks.Next(m)) != NULL && m2->Position() <= p) + break; + m->SetPosition(p); + Goto(m->Position(), true); + marks.Save(); + } + else + SkipSeconds(20); + break; + case kMarkToggle: if (GetReplayMode(play, forward, speed) && play) { + displayFrames = true; + Pause(); + } + MarkToggle(); + break; case kMarkJumpBack|k_Repeat: case kMarkJumpBack: MarkJump(false); break; case kMarkJumpForward|k_Repeat: