Subject: RE: bug#7196: 24.0.50; NEWS item "Selection changes"

From: "Drew Adams" <[email-masked]>
Date: Fri, 15 Oct 2010 08:49:06 -0700

> > The NEWS item is woefully incomplete.  It doesn't explain much of
> > anything about the selection changes for Emacs 24 - and they are
> > radical changes.
> >  
> > Among other things, NEWS should detail the differences from the
> > previous behavior, and explain clearly how to return to the
> > previous behavior (exactly, completely).
> 
> The new text is reproduced below.  If it is good enough, this bug
> report can be closed.

Thanks for taking a stab at it. Some suggestions and questions below.

For info, are the following statements correct?

1. Anything you select becomes the primary selection (on systems that
support...).

2. Everything that is put on the kill ring is also put on the clipboard.

3. Everything put on the clipboard by Emacs was also first put on the kill ring.

4. Other apps may put additional stuff on the clipboard. The kill ring is
Emacs-specific, but the clipboard is not.

5. Not everything that is selected is put on the kill ring or the clipboard.

If so, consider saying this explicitly.

There seems to be a gap between #1 and #2.  What's the relation between the
primary and the clipboard?  What do users need to know about it?

#1 needs to also say something about the other systems, which do not support a
separate primary: e.g. do they put the selection on the clipboard? the kill
ring? Where do they put it?

>   ** Selection changes.
> 
>   The default handling of clipboard and primary selections has been
>   changed to conform with other X applications.
> 
>   The new behavior is that by default Emacs does not put text 

you select

> into the clipboard, and does not add it to kill-ring

.

>   Only commands that kill text or copy it to the
>   kill-ring (C-w, M-w, C-k, etc.) put the killed text into the
>   clipboard.  Selected text is put into the primary selection (on
>   systems, such as X, that support the primary selection 
>   separately from the clipboard).

Is it (a) "put into the primary selection" or (b) "becomes the primary
selection"? I.e., does it replace the existing primary or is it added
(prepended/appended) to it?  I'm guessing (b), and that this is different from
the kill ring.  I don't know about the clipboard - is it a list or ring, like
the kill ring?  Anyway, if in some cases we replace what was in some location
and in other cases we add to it, those cases need to be distinguished. "Put
into" implies a container of a collection.

What happens to selected text on systems that do _not_ support a primary
selection separate from the clipboard?  Please add that info - don't just say
what happens for X.  This is important for understanding the rest of what you
write, below.  It's not clear where mouse-selected text is put on non-X and it's
not clear, when you paste with the mouse, where the pasted text comes from (on
non-X).  It's not enough to keep saying that the primary is used for this on X -
what's used on non-X?  If it doesn't have a name, then give it one - something
that you can refer to for the non-X case. At least make it clear, however you do
it.

And when you say "for systems that support the primary selection separate from
the clipboard" one can get the impression (but be unsure) that the other systems
use the clipboard here, since they have no separate primary.  We need to state
what happens for each scenario/system.

>   Similarly, Emacs by default does not retrieve text from the 
>   clipboard when the mouse (e.g., mouse-2) is used for pasting text
>   selected in another application.  

Say here where it _is_ retrieved from for the mouse, before going on to talk
about retrieval from the clipboard.

Why "in another application"?  If not also true for text selected in Emacs, then
state also what the case for that text is.

>   Text from the clipboard is retrieved only by C-y, M-y and other
>   commands that yank text from the kill-ring.

>   Mouse commands that paste text retrieve text from the primary 
>   selection, on systems that support it separately from the clipboard.

And retrieved from where on other systems?  This is confusing, especially since
we've said that mouse-selected text does not get sent to the clipboard/kill ring
by default.

>   In other words, the default behavior is that mouse gestures that

Mouse actions - mouse gestures are typically thought of as something different.

>   select and paste text work with the primary selection, 

On X (you said).  But you haven't said what they work with on non-X.

>   while keyboard commands that kill/copy and paste text work with the
clipboard.

I wouldn't say "copy", since there are different kinds of copy.  The kind you
mean here is copy to the kill ring.

>   This change also means that the "Copy", "Cut", and "Paste" items of
>   the menu-bar "Edit" menu are now exactly equivalent to, respectively
>   M-w, C-w, and C-y.

I didn't realize that BTW.  That means that on Windows they are _not_ equivalent
to the Windows menus of the same names.  Is that the right thing (dunno)?  It's
worth pointing that out, in any case.

>   To get back the previous behavior, whereby mouse gestures

Just mouse _selection_, no?  Not also mouse-2 (paste).

>   set the clipboard

Does it set the clipboard or add to it (I don't know).  The vocabulary needs to
be consistent, whatever the case might be: replacement or addition.  When you
say "put into" it implies adding, not replacemnt.  "Put onto" is ambiguous, but
it also suggests that more than one thing can be put onto (so can be on) the
clipboard at a time.

>   and retrieve text from there, customize the variables
>   `mouse-drag-copy-region' and (on X only) `x-select-enable-primary'.

Be clear - to get back the previous behavior, _set them to_ t (or whatever the
value is).  Don't just say customize them; say what to customize them to.

>   If you don't want Emacs to put the text into the clipboard, only to
>   the primary selection, additionally customize
>   `x-select-enable-clipboard' to nil.

I'm lost now.  You just said that selection does not now, by default, put text
on the clipboard.  And you can restore "the previous behavior", which presumably
was putting the selection on the clipboard, by setting "`mouse-drag-copy-region'
and (on X only) `x-select-enable-primary'" to t.

It's not clear, to start out with, what "the previous behavior" was.  You made
it clear that now selecting with the mouse sets the primary but not also the
clipboard or the kill ring.  What's not clear is what the previous behavior was
(all its aspects) and therefore what each of the options is for - which part(s)
of the previous behavior each restores.

I'm hoping that this helps you.  Im not trying to confuse you, though it might
seem like that.  This is not clear to a reader, IMO.  It's not completely clear
even to me.

>   These changes in the default behavior are reflected in the default
>   values of several variables:

Maybe it would help to start with that.  If the variables and their previous
values express the previous behavior, and if their new values express the new
behavior, then their descriptions should provide a clear way to say what you
were trying to say above (where you left out certain info/cases).

>   *** `select-active-regions' now defaults to t, so active regions set
>   the primary selection.  It was nil in previous versions.

Good. (Nit: there is only one active region.)

>   It also accepts a new value, `only', which means to only set the
>   primary selection for temporarily active regions (usually made by
>   mouse-dragging or shift-selection).

BTW, why `only' and not `temporarily' or `immediate' or `on-the-fly' or some
such? Only what? (I know, this is not primarily a doc problem.)

>   *** `mouse-2' is now bound to `mouse-yank-primary'.
>   Previously, it was bound to `mouse-yank-at-click' (which is now
>   unbound by default.
                      ^
                      )

What's the difference in _behavior_? Why make readers look up each of those
commands in order to understand what's changed?

Why not state all of the options together, before describing any binding
changes?

>   *** `x-select-enable-clipboard' now defaults to t on all platforms.
>   Thus, killing and yanking now use the clipboard (in addition to the
>   kill ring).  Note that this variable was already non-nil by 
>   default on MS-Windows, which does not support the primary selection
>   between applications.

Speaking about the "primary selection between applications" is maybe a good way
to characterize some of the missing info above: we could call the place where a
mouse selection is saved the "primary within Emacs" or some such, as opposed to
the real primary, which is between apps.  Dunno; maybe it would be confusing to
reuse "primary" that way.  

But some way needs to be found to talk clearly about this - about each: the real
primary, which can be between apps, and the other, unnamed holding place, which
is Emacs-specific (for non-X).

>   *** `x-select-enable-primary' now defaults to nil.
>   This variable exists only on X; its default value was t in previous
>   versions.

What does it do?

>   *** `mouse-drag-copy-region' now defaults to nil.
>   Its previous default value was t.

What does it do?

>   *** Support for X cut buffers has been removed.

What's the consequence for user-visible behavior?

HTH - Drew