[PATCH v4] crecord: add an event that scrolls the selected line to the top of the screen

Nathan Goldbaum nathan12343 at gmail.com
Mon Sep 19 22:23:33 UTC 2016


# HG changeset patch
# User Nathan Goldbaum <ngoldbau at illinois.edu>
# Date 1474321033 18000
#      Mon Sep 19 16:37:13 2016 -0500
# Node ID 94afc22065e475ab1a61f68012be44f6dbbd0d64
# Parent  285a8c3e53f2183438f0cdbc238e4ab851d0d110
crecord: add an event that scrolls the selected line to the top of the screen

Using ctrl-l for this purpose seems to be a fairly widely used practice,
presumably following emacs. This doesn't scroll the selected line all
the way to the top of the window, instead it leaves a 3 line buffer for
context. Use curses.unctrl() to resolve keypressed to '^L' to avoid
hard-coding hexadecimal key codes.

diff -r 285a8c3e53f2 -r 94afc22065e4 mercurial/crecord.py
--- a/mercurial/crecord.py	Tue May 03 13:36:12 2016 +0900
+++ b/mercurial/crecord.py	Mon Sep 19 16:37:13 2016 -0500
@@ -715,6 +715,10 @@ class curseschunkselector(object):
 
         self.currentselecteditem = currentitem
 
+    def topscroll(self):
+        "scroll so the currently selected line is at the top of the screen"
+        self.scrolllines(self.selecteditemstartline)
+
     def updatescroll(self):
         "scroll the screen to fully show the currently-selected"
         selstart = self.selecteditemstartline
@@ -1338,6 +1342,7 @@ the following are valid keystrokes:
  shift-left-arrow   [H] : go to parent header / fold selected header
                       f : fold / unfold item, hiding/revealing its children
                       F : fold / unfold parent item and all of its ancestors
+                 ctrl-l : scroll the selected line to the top of the screen
                       m : edit / resume editing the commit message
                       e : edit the currently selected hunk
                       a : toggle amend mode, only with commit -i
@@ -1582,6 +1587,8 @@ are you sure you want to review/edit and
             self.helpwindow()
             self.stdscr.clear()
             self.stdscr.refresh()
+        elif curses.unctrl(keypressed) in ["^L"]:
+            self.topscroll()
 
     def main(self, stdscr):
         """


More information about the Mercurial-devel mailing list