[PATCH 2 of 2 v3] crecord: add an event that scrolls the selected line to the top of the screen
Nathan Goldbaum
nathan12343 at gmail.com
Mon Sep 19 17:39:00 EDT 2016
# HG changeset patch
# User Nathan Goldbaum <ngoldbau at illinois.edu>
# Date 1474321033 18000
# Mon Sep 19 16:37:13 2016 -0500
# Node ID bd4b0f5fe6bf6b156e55446fda83983190ac18a9
# Parent dec5dfcbd772a9f51674067ad18dff6d9bad78cf
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 dec5dfcbd772 -r bd4b0f5fe6bf mercurial/crecord.py
--- a/mercurial/crecord.py Wed Sep 14 11:39:47 2016 -0500
+++ 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