Subject: 24.0.50; prefix arg breaks `last-command' for `mouse-save-then-kill'

From: "Drew Adams" <[email-masked]>
Date: Sun, 21 Nov 2010 12:28:09 -0800

emacs -Q

Add a call to `message' at the end of `universal-argument-other-key' and
another at the beginning of `mouse-save-then-kill'.  Show the value of
`last-command' in these messages.

E.g.
(defun universal-argument-other-key (arg)
  ...
  (restore-overriding-map)
  (message "UAOK, last-command: %s" last-command)) ; @@@@@@

(defun mouse-save-then-kill (click)
  "..."
  (interactive "e")
  (message "MSTK, last-command: %s" last-command) ; @@@@@@
  ...)

1. Click `mouse-1' somewhere.
2. Click `mouse-3' at another location in the same buffer.
3. C-u
4. Click `mouse-3' at the same location as #2.

IOW, you've just used `C-u' for the second mouse-3 click.

The messages you see are these:

MSTK, last-command: mouse-set-point
UAOK, last-command: mouse-save-then-kill
MSTK, last-command: universal-argument-other-key

The bug is that `last-command' is set to `universal-argument-other-key'.
`last-command' should still be `mouse-save-then-kill'.

This happens somewhere between the end of the call to
`universal-argument-other-key' and entrance to `mouse-save-then-kill'
(more precisely, before the `message' call in `mouse-save-then-kill',
which happens after `interactive').

`mouse-save-then-kill' tests whether the `last-command' was
`mouse-save-then-kill', and this test fails if `C-u' is used before the
second mouse-3 click.

In GNU Emacs 24.0.50.1 (i386-mingw-nt5.1.2600)
 of 2010-11-16 on 3249CTO
Windowing system distributor `Microsoft Corp.', version 5.1.2600
configured using `configure --with-gcc (4.4) --no-opt --cflags
-Ic:/imagesupport/include'