unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Adding a binding for 'undo-redo'
@ 2021-09-29  1:56 Dmitry Gutov
  2021-09-29  5:38 ` Lars Ingebrigtsen
  2021-09-29 16:25 ` [External] : " Drew Adams
  0 siblings, 2 replies; 16+ messages in thread
From: Dmitry Gutov @ 2021-09-29  1:56 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 604 bytes --]

Hi all,

This discussion has been living in a subthread, but I think it deserves 
a separate one, for all to see.

The main technical hurdle to adding this binding was the lack of a good 
binding, but Richard suggested C-? and C-M-_, which should cover both 
GUI Emacs and tty. This change doesn't change the existing 'undo' 
binding, so it's not going to break anybody's workflow. But it adds a 
key combination we can recommend to the users who are accustomed to 
separate 'undo' and 'redo' commands.

WDYT? Should we add this to Emacs 28?

A follow-up patch could add 'undo-redo' to cua-mode as well.

[-- Attachment #2: undo-redo-bindings.diff --]
[-- Type: text/x-patch, Size: 1680 bytes --]

diff --git a/etc/NEWS b/etc/NEWS
index 21cc3c50cd..6b1e74eddd 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -957,7 +957,11 @@ for CJK text mixed with Latin text.
 +++
 ** New command 'undo-redo'.
 It undoes previous undo commands, but doesn't record itself as an
-undoable command.
+undoable command. It is bound to 'C-?' and 'C-M-_', the first binding
+works well in graphical mode, and the second one is easy to hit on tty.
+
+For full conventional undo/redo behavior, you can also customize the
+user option 'undo-no-redo' to t.
 
 +++
 ** New commands 'copy-matching-lines' and 'kill-matching-lines'.
diff --git a/lisp/bindings.el b/lisp/bindings.el
index 343f1ba0fa..9a3505058c 100644
--- a/lisp/bindings.el
+++ b/lisp/bindings.el
@@ -994,6 +994,9 @@ undo-repeat-map
   "Keymap to repeat undo key sequences `C-x u u'.  Used in `repeat-mode'.")
 (put 'undo 'repeat-map 'undo-repeat-map)
 
+(define-key global-map (kbd "C-?") 'undo-redo)
+(define-key global-map [?\C-\M-_] 'undo-redo)
+
 (define-key esc-map "!" 'shell-command)
 (define-key esc-map "|" 'shell-command-on-region)
 (define-key esc-map "&" 'async-shell-command)
diff --git a/lisp/simple.el b/lisp/simple.el
index dd480396f6..7eba33116d 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -2942,8 +2942,9 @@ undo-equiv-table
 (defvar undo-in-region nil
   "Non-nil if `pending-undo-list' is not just a tail of `buffer-undo-list'.")
 
-(defvar undo-no-redo nil
-  "If t, `undo' doesn't go through redo entries.")
+(defcustom undo-no-redo nil
+  "If t, `undo' doesn't go through redo entries."
+  :type 'boolean)
 
 (defvar pending-undo-list nil
   "Within a run of consecutive undo commands, list remaining to be undone.

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: Adding a binding for 'undo-redo'
  2021-09-29  1:56 Adding a binding for 'undo-redo' Dmitry Gutov
@ 2021-09-29  5:38 ` Lars Ingebrigtsen
  2021-09-29 11:26   ` Dmitry Gutov
  2021-09-29 13:02   ` Eli Zaretskii
  2021-09-29 16:25 ` [External] : " Drew Adams
  1 sibling, 2 replies; 16+ messages in thread
From: Lars Ingebrigtsen @ 2021-09-29  5:38 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: emacs-devel

Dmitry Gutov <dgutov@yandex.ru> writes:

> The main technical hurdle to adding this binding was the lack of a
> good binding, but Richard suggested C-? and C-M-_, which should cover
> both GUI Emacs and tty. This change doesn't change the existing 'undo'
> binding, so it's not going to break anybody's workflow. But it adds a
> key combination we can recommend to the users who are accustomed to
> separate 'undo' and 'redo' commands.

I think that sounds like a good idea.

> WDYT? Should we add this to Emacs 28?

My preference would be to put it in Emacs 29, but I won't object if Eli
prefers to put it in Emacs 28.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Adding a binding for 'undo-redo'
  2021-09-29  5:38 ` Lars Ingebrigtsen
@ 2021-09-29 11:26   ` Dmitry Gutov
  2021-09-29 12:21     ` Bozhidar Batsov
                       ` (2 more replies)
  2021-09-29 13:02   ` Eli Zaretskii
  1 sibling, 3 replies; 16+ messages in thread
From: Dmitry Gutov @ 2021-09-29 11:26 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: emacs-devel

On 29.09.2021 08:38, Lars Ingebrigtsen wrote:
>> WDYT? Should we add this to Emacs 28?
> My preference would be to put it in Emacs 29, but I won't object if Eli
> prefers to put it in Emacs 28.

Any particular reason to delay it?

The odds of breakage are minimal, and we'll start collecting feedback a 
few more years earlier.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Adding a binding for 'undo-redo'
  2021-09-29 11:26   ` Dmitry Gutov
@ 2021-09-29 12:21     ` Bozhidar Batsov
  2021-09-29 15:50     ` Lars Ingebrigtsen
  2021-09-29 16:26     ` [External] : " Drew Adams
  2 siblings, 0 replies; 16+ messages in thread
From: Bozhidar Batsov @ 2021-09-29 12:21 UTC (permalink / raw)
  To: Emacs Devel

[-- Attachment #1: Type: text/plain, Size: 527 bytes --]

I also think it's a good idea to make this change sooner. There's little point in delaying tiny/safe changes for years.

On Wed, Sep 29, 2021, at 2:26 PM, Dmitry Gutov wrote:
> On 29.09.2021 08:38, Lars Ingebrigtsen wrote:
> >> WDYT? Should we add this to Emacs 28?
> > My preference would be to put it in Emacs 29, but I won't object if Eli
> > prefers to put it in Emacs 28.
> 
> Any particular reason to delay it?
> 
> The odds of breakage are minimal, and we'll start collecting feedback a 
> few more years earlier.
> 
> 

[-- Attachment #2: Type: text/html, Size: 925 bytes --]

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Adding a binding for 'undo-redo'
  2021-09-29  5:38 ` Lars Ingebrigtsen
  2021-09-29 11:26   ` Dmitry Gutov
@ 2021-09-29 13:02   ` Eli Zaretskii
  1 sibling, 0 replies; 16+ messages in thread
From: Eli Zaretskii @ 2021-09-29 13:02 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: emacs-devel, dgutov

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Date: Wed, 29 Sep 2021 07:38:40 +0200
> Cc: emacs-devel@gnu.org
> 
> Dmitry Gutov <dgutov@yandex.ru> writes:
> 
> > The main technical hurdle to adding this binding was the lack of a
> > good binding, but Richard suggested C-? and C-M-_, which should cover
> > both GUI Emacs and tty. This change doesn't change the existing 'undo'
> > binding, so it's not going to break anybody's workflow. But it adds a
> > key combination we can recommend to the users who are accustomed to
> > separate 'undo' and 'redo' commands.
> 
> I think that sounds like a good idea.
> 
> > WDYT? Should we add this to Emacs 28?
> 
> My preference would be to put it in Emacs 29, but I won't object if Eli
> prefers to put it in Emacs 28.

I don't object having this in Emacs 28.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Adding a binding for 'undo-redo'
  2021-09-29 11:26   ` Dmitry Gutov
  2021-09-29 12:21     ` Bozhidar Batsov
@ 2021-09-29 15:50     ` Lars Ingebrigtsen
  2021-09-29 19:37       ` Dmitry Gutov
  2021-09-29 16:26     ` [External] : " Drew Adams
  2 siblings, 1 reply; 16+ messages in thread
From: Lars Ingebrigtsen @ 2021-09-29 15:50 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: emacs-devel

Dmitry Gutov <dgutov@yandex.ru> writes:

> Any particular reason to delay it?

Just that we're very close to cutting the release branch.

> The odds of breakage are minimal, and we'll start collecting feedback
> a few more years earlier.

You can say that about a huge number of proposed new changes and new key
bindings.  I don't see anything special about this one.

But as I said, if Eli's in favour of it, I'm not opposed to it, and it
sounded like he's in favour of it?  (Or at least not opposed to it.  :-))

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [External] : Adding a binding for 'undo-redo'
  2021-09-29  1:56 Adding a binding for 'undo-redo' Dmitry Gutov
  2021-09-29  5:38 ` Lars Ingebrigtsen
@ 2021-09-29 16:25 ` Drew Adams
  2021-09-29 16:34   ` Eli Zaretskii
                     ` (2 more replies)
  1 sibling, 3 replies; 16+ messages in thread
From: Drew Adams @ 2021-09-29 16:25 UTC (permalink / raw)
  To: Dmitry Gutov, emacs-devel@gnu.org

> The main technical hurdle to adding this binding was the lack of a good
> binding, but Richard suggested C-? and C-M-_, which should cover both
> GUI Emacs and tty. This change doesn't change the existing 'undo'
> binding, so it's not going to break anybody's workflow. But it adds a
> key combination we can recommend to the users who are accustomed to
> separate 'undo' and 'redo' commands.
> 
> WDYT? Should we add this to Emacs 28?

Why promote a default binding before users have,
themselves, actually been binding the command
for a while?

Just because we add a command, and it might be
useful, and it might get used, and users might
bind it, doesn't mean that it needs to have a
default binding.

A fortiori, if users haven't (yet) been binding
it for a while, or if we don't know they have.

The "technical hurdle" of finding a good binding
isn't the place to start.  The place to start is
to wait for users to use and bind it, and then 
see how much a default binding would make sense.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [External] : Re: Adding a binding for 'undo-redo'
  2021-09-29 11:26   ` Dmitry Gutov
  2021-09-29 12:21     ` Bozhidar Batsov
  2021-09-29 15:50     ` Lars Ingebrigtsen
@ 2021-09-29 16:26     ` Drew Adams
  2 siblings, 0 replies; 16+ messages in thread
From: Drew Adams @ 2021-09-29 16:26 UTC (permalink / raw)
  To: Dmitry Gutov, Lars Ingebrigtsen; +Cc: emacs-devel@gnu.org

> Any particular reason to delay it?

Any particular reason to even propose it now?

> The odds of breakage are minimal, and we'll start collecting feedback a
> few more years earlier.

Since when do we add _default_ bindings to collect feedback?


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [External] : Adding a binding for 'undo-redo'
  2021-09-29 16:25 ` [External] : " Drew Adams
@ 2021-09-29 16:34   ` Eli Zaretskii
  2021-09-29 16:46   ` Manuel Uberti
  2021-09-29 17:08   ` Alfred M. Szmidt
  2 siblings, 0 replies; 16+ messages in thread
From: Eli Zaretskii @ 2021-09-29 16:34 UTC (permalink / raw)
  To: Drew Adams; +Cc: emacs-devel, dgutov

> From: Drew Adams <drew.adams@oracle.com>
> Date: Wed, 29 Sep 2021 16:25:33 +0000
> 
> Why promote a default binding before users have,
> themselves, actually been binding the command
> for a while?

Because we have pretty good ideas what those keys should be to be easy
to remember.

> Just because we add a command

We didn't add these commands.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [External] : Adding a binding for 'undo-redo'
  2021-09-29 16:25 ` [External] : " Drew Adams
  2021-09-29 16:34   ` Eli Zaretskii
@ 2021-09-29 16:46   ` Manuel Uberti
  2021-09-29 17:08   ` Alfred M. Szmidt
  2 siblings, 0 replies; 16+ messages in thread
From: Manuel Uberti @ 2021-09-29 16:46 UTC (permalink / raw)
  To: emacs-devel

On 29/09/21 18:25, Drew Adams wrote:
> Why promote a default binding before users have,
> themselves, actually been binding the command
> for a while?

FWIW, I've been using C-S-z for undo-redo for a long time, which I use as the 
counterpart of C-z which I bound to undo-only.

-- 
Manuel Uberti
www.manueluberti.eu



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [External] : Adding a binding for 'undo-redo'
  2021-09-29 16:25 ` [External] : " Drew Adams
  2021-09-29 16:34   ` Eli Zaretskii
  2021-09-29 16:46   ` Manuel Uberti
@ 2021-09-29 17:08   ` Alfred M. Szmidt
  2021-09-29 17:25     ` Drew Adams
  2 siblings, 1 reply; 16+ messages in thread
From: Alfred M. Szmidt @ 2021-09-29 17:08 UTC (permalink / raw)
  To: Drew Adams; +Cc: emacs-devel, dgutov

   The "technical hurdle" of finding a good binding
   isn't the place to start.  The place to start is
   to wait for users to use and bind it, and then 
   see how much a default binding would make sense.

Here lies chaos.  

For coherent design, and logical keybindings, one cannot wait until
users have bound a key.  It is a good indication of what might be
used, but not what might make sense in the grand picture.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [External] : Adding a binding for 'undo-redo'
  2021-09-29 17:08   ` Alfred M. Szmidt
@ 2021-09-29 17:25     ` Drew Adams
  2021-09-29 19:17       ` Dmitry Gutov
  2021-09-30  7:13       ` Alfred M. Szmidt
  0 siblings, 2 replies; 16+ messages in thread
From: Drew Adams @ 2021-09-29 17:25 UTC (permalink / raw)
  To: Alfred M. Szmidt; +Cc: emacs-devel@gnu.org, dgutov@yandex.ru

>    The "technical hurdle" of finding a good binding
>    isn't the place to start.  The place to start is
>    to wait for users to use and bind it, and then
>    see how much a default binding would make sense.
> 
> Here lies chaos.
> 
> For coherent design, and logical keybindings, one cannot wait until
> users have bound a key.  It is a good indication of what might be
> used, but not what might make sense in the grand picture.

There may not be a reason to always wait - agreed.
("One cannot wait" ever is clearly wrong, though.)

It doesn't follow that every command should get a
default key binding.  And how new the redo command
is isn't really the question, on its own.

The question really should be how useful the command
is, in practice: How much are users using it, and how
important would it be for it to have a default binding?



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [External] : Adding a binding for 'undo-redo'
  2021-09-29 17:25     ` Drew Adams
@ 2021-09-29 19:17       ` Dmitry Gutov
  2021-09-29 19:29         ` Drew Adams
  2021-09-30  7:13       ` Alfred M. Szmidt
  1 sibling, 1 reply; 16+ messages in thread
From: Dmitry Gutov @ 2021-09-29 19:17 UTC (permalink / raw)
  To: Drew Adams, Alfred M. Szmidt; +Cc: emacs-devel@gnu.org

On 29.09.2021 20:25, Drew Adams wrote:
> It doesn't follow that every command should get a
> default key binding.

That's not what we're doing here.

> The question really should be how useful the command
> is, in practice: How much are users using it, and how
> important would it be for it to have a default binding?

Yes.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [External] : Adding a binding for 'undo-redo'
  2021-09-29 19:17       ` Dmitry Gutov
@ 2021-09-29 19:29         ` Drew Adams
  0 siblings, 0 replies; 16+ messages in thread
From: Drew Adams @ 2021-09-29 19:29 UTC (permalink / raw)
  To: Dmitry Gutov, Alfred M. Szmidt; +Cc: emacs-devel@gnu.org

> > It doesn't follow that every command should get a
> > default key binding.
> 
> That's not what we're doing here.

No one said it is.  Please read what I wrote,
and please don't just take things out of context.


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Adding a binding for 'undo-redo'
  2021-09-29 15:50     ` Lars Ingebrigtsen
@ 2021-09-29 19:37       ` Dmitry Gutov
  0 siblings, 0 replies; 16+ messages in thread
From: Dmitry Gutov @ 2021-09-29 19:37 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: emacs-devel

On 29.09.2021 18:50, Lars Ingebrigtsen wrote:
> Dmitry Gutov <dgutov@yandex.ru> writes:
> 
>> Any particular reason to delay it?
> 
> Just that we're very close to cutting the release branch.
> 
>> The odds of breakage are minimal, and we'll start collecting feedback
>> a few more years earlier.
> 
> You can say that about a huge number of proposed new changes and new key
> bindings.  I don't see anything special about this one.

I would probably handle all similarly safe changes the same way, as long 
as we're sure in each case that the change is wanted, and it's 
implemented in a way that we're unlikely to regret later.

> But as I said, if Eli's in favour of it, I'm not opposed to it, and it
> sounded like he's in favour of it?  (Or at least not opposed to it.  :-))

Cool. :-)



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [External] : Adding a binding for 'undo-redo'
  2021-09-29 17:25     ` Drew Adams
  2021-09-29 19:17       ` Dmitry Gutov
@ 2021-09-30  7:13       ` Alfred M. Szmidt
  1 sibling, 0 replies; 16+ messages in thread
From: Alfred M. Szmidt @ 2021-09-30  7:13 UTC (permalink / raw)
  To: Drew Adams; +Cc: emacs-devel, dgutov

   >    The "technical hurdle" of finding a good binding
   >    isn't the place to start.  The place to start is
   >    to wait for users to use and bind it, and then
   >    see how much a default binding would make sense.
   > 
   > Here lies chaos.
   > 
   > For coherent design, and logical keybindings, one cannot wait until
   > users have bound a key.  It is a good indication of what might be
   > used, but not what might make sense in the grand picture.

   There may not be a reason to always wait - agreed.
   ("One cannot wait" ever is clearly wrong, though.)

   It doesn't follow that every command should get a
   default key binding.  And how new the redo command
   is isn't really the question, on its own.

Nobody is suggesting that, and even if it was a suggestion it might
make sense -- if keyboards had more modifiers, more keys, that would
allow for a mapping of all commands to keybindings.

   The question really should be how useful the command
   is, in practice: How much are users using it, and how
   important would it be for it to have a default binding?

That is always a call someone has to make, and ultimatley what you
find useful, I might not.  There are many keybindings in Emacs that I
do not use.  

The command and keybindings seem useful enough in my eyes, but I won't
use them.



^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2021-09-30  7:13 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-29  1:56 Adding a binding for 'undo-redo' Dmitry Gutov
2021-09-29  5:38 ` Lars Ingebrigtsen
2021-09-29 11:26   ` Dmitry Gutov
2021-09-29 12:21     ` Bozhidar Batsov
2021-09-29 15:50     ` Lars Ingebrigtsen
2021-09-29 19:37       ` Dmitry Gutov
2021-09-29 16:26     ` [External] : " Drew Adams
2021-09-29 13:02   ` Eli Zaretskii
2021-09-29 16:25 ` [External] : " Drew Adams
2021-09-29 16:34   ` Eli Zaretskii
2021-09-29 16:46   ` Manuel Uberti
2021-09-29 17:08   ` Alfred M. Szmidt
2021-09-29 17:25     ` Drew Adams
2021-09-29 19:17       ` Dmitry Gutov
2021-09-29 19:29         ` Drew Adams
2021-09-30  7:13       ` Alfred M. Szmidt

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).