# HG changeset patch # User Jordi GutiƩrrez Hermoso # Date 2019-12-10 22:02:09 # Node ID c06eba91c38086d2a0c731aa4e62288a368e47c7 # Parent fe0daceb51d015783465b9c8f03e86844465e5dc crecord: repurpose "a" key to toggle all selections (BC) I really don't like "a". I keep accidentally hitting it when I actually want "A", and then I'm suddenly in a state I don't want to be in. There's a big wall of text telling me that I've turned amend mode on or off (which one was I orginally in?), and this seems very useless. If I wanted to amend or not, I would have chosen that from the command-line, not change my mind after I've already started picking hunks apart. Furthermore, for most uses of the hunk selector (revert, uncommit, shelve/unshelve), this amend toggle doesn't make sense. It seems much better to repurpose this key to be a "weaker" version of "A". It toggles all selections. This is pretty harmless if hit accidentally, (can just hit "a" again to toggle everything and undo it), and has immediate visual feedback that something happened: all the x's and blank spaces get switched around. And unlike with amend, the current flipped state is also immediately visible without having to read a wall of text. I'm calling this a BC, however, because somewhere, someone out there has probably really fallen in love with the old use of "a" and will get angry that we took it away. diff --git a/mercurial/crecord.py b/mercurial/crecord.py --- a/mercurial/crecord.py +++ b/mercurial/crecord.py @@ -990,6 +990,16 @@ class curseschunkselector(object): self.toggleapply(item) self.waslasttoggleallapplied = not self.waslasttoggleallapplied + def flipselections(self): + """ + Flip all selections. Every selected line is unselected and vice + versa. + """ + for header in self.headerlist: + for hunk in header.allchildren(): + for line in hunk.allchildren(): + self.toggleapply(line) + def toggleallbetween(self): """toggle applied on or off for all items in range [lastapplied, current]. """ @@ -1638,7 +1648,7 @@ smaller changesets. the following are va 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 + a : toggle all selections c : confirm selected changes r : review/edit and confirm selected changes q : quit without confirming (no changes will be made) @@ -1914,7 +1924,7 @@ are you sure you want to review/edit and elif keypressed in ["q"]: raise error.Abort(_(b'user quit')) elif keypressed in ['a']: - self.toggleamend(self.opts, test) + self.flipselections() elif keypressed in ["c"]: return True elif keypressed in ["r"]: diff --git a/tests/test-commit-interactive-curses.t b/tests/test-commit-interactive-curses.t --- a/tests/test-commit-interactive-curses.t +++ b/tests/test-commit-interactive-curses.t @@ -95,7 +95,7 @@ Committing only one hunk while aborting - unfold it - go down to second hunk (1 for the first hunk, 1 for the first hunkline, 1 for the second hunk, 1 for the second hunklike) - toggle the second hunk -- toggle on and off the amend mode (to check that it toggles off) +- toggle all lines twice (to check that it does nothing) - edit the hunk and quit the editor immediately with non-zero status - commit @@ -193,20 +193,39 @@ Newly added files can be selected with t $ hg st ? testModeCommands -Amend option works +Test toggling all selections works + +- Change one line +- Add an extra line at the end +- Unselect all +- Select the extra line at the end +- Toggle all selections (so the extra line at the is unselected and the modified line is selected) +- Commit + $ echo "hello world" > x - $ hg diff -c . - diff -r a6735021574d -r 2b0e9be4d336 x - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + $ echo "goodbye world" >> x + $ hg diff + diff -r 2b0e9be4d336 x + --- a/x Thu Jan 01 00:00:00 1970 +0000 +++ b/x Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +hello + @@ -1,1 +1,2 @@ + -hello + +hello world + +goodbye world $ cat <testModeCommands + > f + > j + > x + > j + > j + > j + > x > a > c > EOF - $ hg commit -i -m "newly added file" -d "0 0" + $ hg commit -i --amend -m "newly added file" -d "0 0" x saved backup bundle to $TESTTMP/a/.hg/strip-backup/2b0e9be4d336-3cf0bc8c-amend.hg + $ hg rev x --no-backup $ hg diff -c . diff -r a6735021574d -r c1d239d165ae x --- /dev/null Thu Jan 01 00:00:00 1970 +0000