crecord: make enter move cursor down to the next item of the same type
authorAnton Shestakov <av6@dwimlabs.net>
Sat, 13 Oct 2018 11:52:30 +0200
changeset 40253 682f73fa924a
parent 40252 090e5f3900b7
child 40254 dd83aafdb64a
crecord: make enter move cursor down to the next item of the same type Let's replace experimental.spacemovesdown with a separate key: Enter, since it wasn't used for anything in crecord. Not sure if '\n' works on Windows though. nextsametype() strictly only moves to items of the same type as the current item. This, for example, allows to go over individual lines in a diff and skip hunk and file headers (which would toggle multiple lines).
mercurial/configitems.py
mercurial/crecord.py
tests/test-commit-interactive-curses.t
--- a/mercurial/configitems.py	Sat Oct 13 12:58:24 2018 +0000
+++ b/mercurial/configitems.py	Sat Oct 13 11:52:30 2018 +0200
@@ -616,9 +616,6 @@
 coreconfigitem('experimental', 'sshserver.support-v2',
     default=False,
 )
-coreconfigitem('experimental', 'spacemovesdown',
-    default=False,
-)
 coreconfigitem('experimental', 'sparse-read',
     default=False,
 )
--- a/mercurial/crecord.py	Sat Oct 13 12:58:24 2018 +0000
+++ b/mercurial/crecord.py	Sat Oct 13 11:52:30 2018 +0200
@@ -713,6 +713,24 @@
         self.currentselecteditem = nextitem
         self.recenterdisplayedarea()
 
+    def nextsametype(self):
+        currentitem = self.currentselecteditem
+        sametype = lambda item: isinstance(item, type(currentitem))
+        nextitem = currentitem.nextitem()
+
+        while nextitem is not None and not sametype(nextitem):
+            nextitem = nextitem.nextitem()
+
+        if nextitem is None:
+            nextitem = currentitem
+        else:
+            parent = nextitem.parentitem()
+            if parent.folded:
+                self.togglefolded(parent)
+
+        self.currentselecteditem = nextitem
+        self.recenterdisplayedarea()
+
     def rightarrowevent(self):
         """
         select (if possible) the first of this item's child-items.
@@ -1027,8 +1045,8 @@
     def _getstatuslinesegments(self):
         """-> [str]. return segments"""
         selected = self.currentselecteditem.applied
-        spaceselect = _('space: select')
-        spacedeselect = _('space: deselect')
+        spaceselect = _('space/enter: select')
+        spacedeselect = _('space/enter: deselect')
         # Format the selected label into a place as long as the longer of the
         # two possible labels.  This may vary by language.
         spacelen = max(len(spaceselect), len(spacedeselect))
@@ -1433,6 +1451,7 @@
 the following are valid keystrokes:
 
                 [space] : (un-)select item ([~]/[x] = partly/fully applied)
+                [enter] : (un-)select item and go to next item of same type
                       A : (un-)select all items
     up/down-arrow [k/j] : go to previous/next unfolded item
         pgup/pgdn [K/J] : go to previous/next item of same type
@@ -1686,8 +1705,9 @@
             return True
         elif keypressed in [' '] or (test and keypressed in ["TOGGLE"]):
             self.toggleapply()
-            if self.ui.configbool('experimental', 'spacemovesdown'):
-                self.downarrowevent()
+        elif keypressed in ['\n', 'KEY_ENTER']:
+            self.toggleapply()
+            self.nextsametype()
         elif keypressed in ['A']:
             self.toggleall()
         elif keypressed in ['e']:
--- a/tests/test-commit-interactive-curses.t	Sat Oct 13 12:58:24 2018 +0000
+++ b/tests/test-commit-interactive-curses.t	Sat Oct 13 11:52:30 2018 +0200
@@ -327,24 +327,6 @@
   hello world
   lower
 
-Check spacemovesdown
-
-  $ cat <<EOF >> $HGRCPATH
-  > [experimental]
-  > spacemovesdown = true
-  > EOF
-  $ cat <<EOF >testModeCommands
-  > TOGGLE
-  > TOGGLE
-  > X
-  > EOF
-  $ hg status -q
-  M b
-  M x
-  $ hg commit -i -m "nothing to commit?" -d "0 0"
-  no changes to record
-  [1]
-
 Check ui.interface logic for the chunkselector
 
 The default interface is text