From bbe29dbc7b22719471ed11d6b4cff44e3e301ba3 Mon Sep 17 00:00:00 2001 From: Jackie Li Date: Wed, 31 Jul 2024 16:11:38 +0100 Subject: [PATCH] [diff kitten] move next/prev file --- kittens/diff/main.py | 8 ++++++++ kittens/diff/ui.go | 24 +++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/kittens/diff/main.py b/kittens/diff/main.py index 7802d039c..26d15a210 100644 --- a/kittens/diff/main.py +++ b/kittens/diff/main.py @@ -221,6 +221,14 @@ map('Scroll to previous change', 'prev_change p scroll_to prev-change', ) +map('Scroll to next file', + 'next_file shift+j scroll_to next-file', + ) + +map('Scroll to previous file', + 'prev_file shift+k scroll_to prev-file', + ) + map('Show all context', 'all_context a change_context all', ) diff --git a/kittens/diff/ui.go b/kittens/diff/ui.go index ba42efaca..3c19447af 100644 --- a/kittens/diff/ui.go +++ b/kittens/diff/ui.go @@ -184,7 +184,6 @@ func (self *Handler) highlight_all() { self.async_results <- r self.lp.WakeupMainThread() }() - } func (self *Handler) load_all_images() { @@ -523,6 +522,27 @@ func (self *Handler) scroll_to_next_change(backwards bool) bool { return false } +func (self *Handler) scroll_to_next_file(backwards bool) bool { + if backwards { + for i := self.scroll_pos.logical_line - 1; i >= 0; i-- { + line := self.logical_lines.At(i) + if line.line_type == TITLE_LINE { + self.scroll_pos = ScrollPos{i, 0} + return true + } + } + } else { + for i := self.scroll_pos.logical_line + 1; i < self.logical_lines.Len(); i++ { + line := self.logical_lines.At(i) + if line.line_type == TITLE_LINE { + self.scroll_pos = ScrollPos{i, 0} + return true + } + } + } + return false +} + func (self *Handler) scroll_to_next_match(backwards, include_current_match bool) bool { if self.current_search == nil { return false @@ -616,6 +636,8 @@ func (self *Handler) dispatch_action(name, args string) error { case `scroll_to`: done := false switch { + case strings.Contains(args, "file"): + done = self.scroll_to_next_file(strings.Contains(args, `prev`)) case strings.Contains(args, `change`): done = self.scroll_to_next_change(strings.Contains(args, `prev`)) case strings.Contains(args, `match`):