From: Simon Tatham Date: Fri, 15 Dec 2023 12:25:47 +0000 (+0000) Subject: Change my mind about how to extend backwards. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=b8ab2fcfe88289a1406be694a9ae418ca1eeb0da;p=mastodonochrome.git Change my mind about how to extend backwards. I think pressing [0] at the top of the file is better than double-[B]. Firstly, it's fewer keystrokes to do on purpose; secondly, it's not a key you would have been repeating already. Now I can hold down [B] safely to page up through the existing text, _and_ if I want to keep extending backwards I can do it more easily than before. --- diff --git a/cursesclient.py b/cursesclient.py index 83b4b54..eae42f1 100644 --- a/cursesclient.py +++ b/cursesclient.py @@ -486,8 +486,6 @@ class File(Activity): def handle_key(self, ch): backward_keys = {'-', 'b', 'B', curses.KEY_PPAGE, curses.KEY_LEFT} - if not (self.mode == 'normal' and ch in backward_keys): - self.unprime() if self.mode == 'normal': if ch in {' ', curses.KEY_NPAGE, curses.KEY_RIGHT}: @@ -583,8 +581,6 @@ class File(Activity): self.search_re is not None): self.search(self.search_direction, self.search_re) - def unprime(self): - pass # not supported def send_mode(self): pass # not supported def favourite_mode(self): @@ -620,12 +616,21 @@ class ObjectFile(File): self.select_target = None self.old_display_state = None self.index_by_line = [] - self.primed_to_extend = False + + def top_line_pos(self): + return max(0, self.linepos - (self.cc.scr_h - 1)) + + def primed_to_extend(self): + if self.linepos is None: + return False # we haven't set up at all yet + if self.history_closed: + return False # we can't be primed to extend if we can't extend + return self.top_line_pos() == 0 def iter_text_indexed(self): yield self.header, None if not self.history_closed: - yield text.ExtendableIndicator(self.primed_to_extend), None + yield text.ExtendableIndicator(self.primed_to_extend()), None for i in range(self.minpos, self.maxpos): for thing in self.statuses[i].text(): yield thing, i # FIXME: maybe just yield the last? @@ -658,7 +663,8 @@ class ObjectFile(File): # If not that, and also nothing _else_ has changed, we don't # need to do anything at all. - display_state = (self.mode, self.select_target, self.primed_to_extend) + display_state = (self.mode, self.select_target, + self.primed_to_extend()) if not recompute_line and display_state == self.old_display_state: return @@ -701,7 +707,7 @@ class ObjectFile(File): def render(self): self.regenerate_lines(self.cc.scr_w) - topline = max(0, self.linepos - (self.cc.scr_h - 1)) + topline = self.top_line_pos() for y, line in enumerate(self.lines[topline:topline+self.cc.scr_h-1]): self.cc.print_at(y, 0, line) @@ -887,23 +893,16 @@ class ObjectFile(File): return self.move_to(self.linepos + delta) def down_screen(self): return self.move_by(max(1, self.cc.scr_h - 3)) + def up_screen(self): self.move_by(-max(1, self.cc.scr_h - 3)) def down_line(self): return self.move_by(+1) def up_line(self): return self.move_by(-1) - def goto_top(self): return self.move_to(0) + def goto_top(self): + if self.primed_to_extend(): + if self.feed.extend_past() is False: # None does not count + self.history_closed = True + return self.move_to(0) def goto_bottom(self): return self.move_to(len(self.lines)) - def up_screen(self): - success = self.move_by(-max(1, self.cc.scr_h - 3)) - if not success and not self.history_closed: - if not self.primed_to_extend: - self.primed_to_extend = True - else: - if self.feed.extend_past() is False: # None does not count - self.history_closed = True - self.primed_to_extend = False - def unprime(self): - self.primed_to_extend = False - def search(self, direction, re): pos = self.linepos - 1 while True: diff --git a/text.py b/text.py index 1543124..3135abd 100644 --- a/text.py +++ b/text.py @@ -247,10 +247,10 @@ class ExtendableIndicator: def render(self, width): if self.primed: - message = ColouredString("Press [B] once more to extend", - "HHHHHHHKHHHHHHHHHHHHHHHHHHHHH") + message = ColouredString("Press [0] to extend", + "HHHHHHHKHHHHHHHHHHH") else: - message = ColouredString("Press [B] twice to extend", + message = ColouredString("Press [0] twice to extend", "HHHHHHHKHHHHHHHHHHHHHHHHH") space = width - message.width lspace = space // 2 + 1