How to combine Emacs primary/clipboard copy and paste behavior on MS Windows

copy/pasteemacs

Emacs 24 changed the way copy/paste behavior works to conform with modern X applications (See this article under "Selection changes"). They have explicitly separated primary selection and middle mouse button paste from clipboard copy/paste.

Unfortunately for me, using native (not cygwin!) Emacs 24.2.1 under MS Windows, this messes up the way I want to work.

Here is what I want:

  1. Highlighting (selecting) text in Emacs automatically copies it to the Windows clipboard. If I paste it (Ctrl-V) in another Windows app it pastes. If I type C-y (yank) in Emacs, it pastes. If I middle-click in Emacs, it pastes.
  2. Killing in Emacs (C-w) copies the data to the clipboard. If I paste it (Ctrl-V) in another Windows app it pastes. If I type C-y (yank) in Emacs, it pastes. If I middle-click in Emacs, it pastes the clipboard contents, not the last selected text.
  3. Anything I copied to the clipboard from another Windows app (e.g. via Ctrl-C), can be pasted in Emacs either by typing C-y (yank) or middle-clicking (right now, middle clicking pastes the last selected text, not the clipboard contents).

To summarize, I think this means removing the distinction between primary selections and the clipboard in Emacs. I want everything to act on the clipboard!

Best Answer

The following entries from NEWS seem pertinent:

  • mouse-drag-copy-region now defaults to nil.

  • mouse-2 is now bound to mouse-yank-primary.

This pastes from the primary selection, ignoring the kill-ring. Previously, mouse-2 was bound to mouse-yank-at-click.

  • To return to the previous behavior, do the following:

    • Change select-active-regions to nil.
    • Change mouse-drag-copy-region to t.
    • Change x-select-enable-primary to t (on X only).
    • Change x-select-enable-clipboard to nil.
    • Bind mouse-yank-at-click to mouse-2.

I think to get the previous behaviour on Windows, you need to leave both x-select-enable-primary and x-select-enable-clipboard at their current values, and maybe select-active-regions is not related to the change in behaviour you are complaining about here.


Here are the exact lines to put in your .emacs file:

(setq select-active-regions nil)
(setq mouse-drag-copy-region t)
(global-set-key [mouse-2] 'mouse-yank-at-click)
Related Topic