Hi all,
Here is a dummy example to demonstrate this (which is almost the same as posted by Artur in the first email of this thread):
=====
(defun foo ()
(interactive)
(message (format "this-command-keys: %S, this-single-command-keys: %s"
(this-command-keys)
(this-single-command-keys))))
(global-set-key (kbd "C-c ;") #'foo)
=====
After evaluating the above, doing C-u C-c ; gives the following results on different versions of emacs:
24.5: this-command-keys: "^U^C;", this-single-command-keys: [3 59]
25.0.93: this-command-keys: "^C;", this-single-command-keys: [3 59]
(of course I have stringified the ^U and ^C portions above to make them visible in the email)
It's commit log says "Restore the feature whereby C-u was part of this-command-keys, but not of this-single-command-keys.". But it looks like no restore happened. "^U" is still not part of this-command-keys.
Currently this-command-keys and this-single-command-keys look essentially the same, except the this-command-keys is a string and this-single-command-keys is a vector of asciis.
Also as Artur stated in the original bug report, the function documentation is not in sync with what actually is happening:
C-h f this-command-keys on emacs 25.0.93 gives:
=====
this-command-keys is a built-in function in ‘C source code’.
(this-command-keys)
Return the key sequence that invoked this command.
However, if the command has called ‘read-key-sequence’, it returns
the last key sequence that has been read.
The value is a string or a vector.
=====
C-h f this-single-command-keys on emacs 25.0.93 gives:
=====
this-single-command-keys is a built-in function in ‘C source code’.
(this-single-command-keys)
Return the key sequence that invoked this command.
More generally, it returns the last key sequence read, either by
the command loop or by ‘read-key-sequence’.
Unlike ‘this-command-keys’, this function’s value
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
does not include prefix arguments.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The value is always a vector.
=====