Subject: Re: bug#34014: 25.2; binding down mouse event with modifier to mouse-drag-region does not work

From: Adolf Mathias <[email-masked]>
Date: Fri, 14 Aug 2020 20:58:41 +0200

Yes, your two expressions works on emacs-27.1 which I just installed
with snap on an Ubuntu 18.04, dragging S-mouse1 sets the region  like
mouse-1.

The thing is, on Emacs24 and before I had the following working code:

==========================
(defun mouse-stay-and-copy (click)
  "leaves cursor at current position, allows to drag a region which is
yanked at cursor position"
  (interactive "e")
  (let ((selected nil)
    (win (selected-window))
        (otherwin nil)
        (otherstart nil)
        (eventstart nil))
    (save-excursion
      (setq eventstart (event-start click))
      (setq otherwin (car eventstart))
      (setq otherstart (window-start otherwin))
      (mouse-drag-track click)
      (if mark-active
      (progn (kill-new (buffer-substring (region-beginning) (region-end)))
         (setq selected 1)
                 )))
    (select-window win)
    (if selected
    (progn
      (if mark-active (delete-region (region-beginning) (region-end)))
      (yank)
      ;;(redraw-display)
          ))
    (set-window-start otherwin otherstart nil)))

 (define-key global-map '[S-down-mouse-1] 'mouse-stay-and-copy)
==========================

On Emacs Post 24, this stopped to work. When I filed the bug report, I
reduced this to a builtin Emacs function.

On Emacs 24, to bind Shift-mouse1, only the following call is required:
(define-key global-map '[S-down-mouse-1] 'mouse-drag-region)

My mouse-stay-and-copy is just a fancy replacement for
mouse-drag-region. Sadly, its API in conjunction with mouse-drag-track
has changed mysteriously with post-24.

On Fri, Aug 14, 2020 at 4:29 PM Stefan Kangas <[email-masked]> wrote:
>
> reopen 34014
> thanks
>
> Hi Adolf,
>
> [Please use "Reply to all" so that the discussion is recorded in the bug
> tracker.]
>
> Adolf Mathias <[email-masked]> writes:
>
> > Sorry for the apparent delay. I myself got a bit frustrated with the
> > issue and rewrote a simple version  of mouse-drag-region for myself
> > which does not deal with double/triple-clicks acting on words and
> > lines however. I was not able to disentangle what Emacs does there.
> > I somehow was convinced that I had answered back then why I wanted to
> > bind mouse-drag-region to a button-down event.
> > I did so because the Emacs help on mouse-drag-region told me so, and
> > because it used to work that way.
>
> Thanks for replying back.  I am therefore reopening this bug.
> With your help, we could try to figure out what is going on here.
>
> Does it work like you expect if you evaluate this in emacs -Q?
>
>   (define-key global-map '[S-down-mouse-1] 'mouse-drag-region)
>   (define-key global-map '[S-drag-mouse-1] 'mouse-set-region)
>
> If that does not help, could you please try to describe the use-case in
> more detail and explain what it is you're trying to achieve?
>
> Thanks in advance.
>
> Best regards,
> Stefan Kangas