From 34e83871520fc948db7f08cbdfe5dfad462c7be0 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Thu, 7 Dec 2023 07:12:48 +0000 Subject: [PATCH] Correct handling of [RET] in files and menus. (a) turned out curses was returning it as \n not \r (b) also, in a file, it should go down a line _or exit_. --- cursesclient.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/cursesclient.py b/cursesclient.py index 4e00e4f..d51df5b 100644 --- a/cursesclient.py +++ b/cursesclient.py @@ -228,7 +228,7 @@ class Menu: self.cc.activity_stack[-1] = activity def handle_key(self, ch): - if ch in {ord('q'), ord('Q'), 13}: + if ch in {ord('q'), ord('Q'), 10, 13}: return 'quit' class EscMenu(Menu): @@ -282,8 +282,11 @@ class File: self.down_screen() elif ch in {ord('-'), ord('b'), ord('B'), curses.KEY_PPAGE}: self.up_screen() - elif ch in {13, curses.KEY_DOWN}: + elif ch == curses.KEY_DOWN: self.down_line() + elif ch in {10, 13}: + if not self.down_line(): + return 'quit' elif ch in {curses.KEY_UP}: self.up_line() elif ch in {ord('0'), curses.KEY_HOME}: @@ -372,19 +375,21 @@ class ObjectFile(File): self.cc.print_at(self.cc.scr_h - 1, 0, sl_rendered) def move_to(self, pos): + old_linepos = self.linepos self.linepos = pos self.linepos = max(self.linepos, self.cc.scr_h - 1) self.linepos = min(self.linepos, len(self.lines)) + return self.linepos != old_linepos def move_by(self, delta): - self.move_to(self.linepos + delta) - - def down_screen(self): self.move_by(self.cc.scr_h - 1) - def up_screen(self): self.move_by(-(self.cc.scr_h - 1)) - def down_line(self): self.move_by(+1) - def up_line(self): self.move_by(-1) - def goto_top(self): self.move_to(0) - def goto_bottom(self): self.move_to(len(self.lines)) + return self.move_to(self.linepos + delta) + + def down_screen(self): return self.move_by(self.cc.scr_h - 1) + def up_screen(self): return self.move_by(-(self.cc.scr_h - 1)) + 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_bottom(self): return self.move_to(len(self.lines)) class StatusFile(ObjectFile): def __init__(self, cc, feed, title): -- 2.30.2