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).
--- 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