GNU Emacs Lisp Reference Manual
The editor command loop sets several Lisp variables to keep status records for itself and for commands that are run.
The value is copied from this-command when a command returns to the command loop, except when the command specifies a prefix argument for the following command.
This variable is always local to the current terminal and cannot be buffer-local. See Multiple Displays.
last-command, it is normally a symbol with a function definition. The command loop sets this variable just before running a command, and copies its value into last-command when the command finishes (unless the command specifies a prefix argument for the following command).
Some commands set this variable during their execution, as a flag for whatever command runs next. In particular, the functions for killing text set this-command to kill-region so that any kill commands immediately following will know to append the killed text to the previous kill.
If you do not want a particular command to be recognized as the previous command in the case where it got an error, you must code that command to prevent this. One way is to set this-command to t at the beginning of the command, and set this-command back to its proper value at the end, like this:
(defun foo (args...)
(interactive ...)
(let ((old-this-command this-command))
(setq this-command t)
...do the work...
(setq this-command old-this-command)))
(this-command-keys)
;; Now use C-u C-x C-e to evaluate that.
=> "^U^X^E"
One use of this variable is to figure out a good default location to pop up another menu.
self-insert-command, which uses it to decide which character to insert. last-command-event
;; Now use C-u C-x C-e to evaluate that.
=> 5
The value is 5 because that is the ASCII code for C-e.
The alias last-command-char exists for compatibility with Emacs version 18.