(help-setup-xref (list #'view-lossage)
(called-interactively-p 'interactive))
(with-help-window (help-buffer)
- (princ " ")
- (princ (mapconcat (lambda (key)
- (cond
- ((and (consp key) (null (car key)))
- (format ";; %s\n" (if (symbolp (cdr key)) (cdr key)
- "anonymous-command")))
- ((or (integerp key) (symbolp key) (listp key))
- (single-key-description key))
- (t
- (prin1-to-string key nil))))
- (recent-keys 'include-cmds)
- " "))
+ (with-current-buffer standard-output
+ (let ((prev-command nil))
+ (mapc
+ (lambda (key)
+ (cond
+ ((and (consp key) (null (car key)))
+ (princ (format ";; %s\n"
+ (setq prev-command
+ (if (symbolp (cdr key))
+ (cdr key)
+ "anonymous-command")))))
+ ((eq key 'end-of-command)
+ (unless (bolp)
+ (princ (format ";; <during %s>\n" (or prev-command
+ "unknown command")))))
+ ((or (integerp key) (symbolp key) (listp key))
+ (princ (single-key-description key))
+ (princ " "))
+ (t
+ (prin1 key)
+ (princ " "))))
+ (recent-keys 'include-cmds))))
(with-current-buffer standard-output
(goto-char (point-min))
(let ((comment-start ";; ")
static void echo_now (void);
static ptrdiff_t echo_length (void);
+static void record_char (Lisp_Object c);
/* Incremented whenever a timer is run. */
unsigned timers_run;
Fcons (Qnil, cmd));
if (++recent_keys_index >= NUM_RECENT_KEYS)
recent_keys_index = 0;
+ /* Mark this as a complete command in recent_keys. */
+ record_char (Qend_of_command);
}
Vthis_command = cmd;
Vreal_this_command = cmd;
safe_run_hooks (Qpost_command_hook);
+ /* Mark this as a complete command in recent_keys. */
+ record_char (Qend_of_command);
+
/* If displaying a message, resize the echo area window to fit
that message's size exactly. Do this only if the echo area
window is the minibuffer window of the selected frame. See
static Lisp_Object kbd_buffer_get_event (KBOARD **kbp, bool *used_mouse_menu,
struct timespec *end_time);
-static void record_char (Lisp_Object c);
static Lisp_Object help_form_saved_window_configs;
static void
do
{
Lisp_Object e = AREF (recent_keys, i);
- if (cmds || !CONSP (e) || !NILP (XCAR (e)))
+ if (cmds
+ || ((!CONSP (e) || !NILP (XCAR (e)))
+ && !EQ (e, Qend_of_command)))
es = Fcons (e, es);
if (++i >= NUM_RECENT_KEYS)
i = 0;
DEFSYM (Qundefined, "undefined");
+ DEFSYM (Qend_of_command, "end-of-command");
+
/* Hooks to run before and after each command. */
DEFSYM (Qpre_command_hook, "pre-command-hook");
DEFSYM (Qpost_command_hook, "post-command-hook");