mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-02 08:22:22 +00:00
Make view-lossage' output of chars read from
read-char' more logical
* lisp/help.el (view-lossage): Use the new data format to output data from `read-char' and the like in a more understandable fashion (bug#21867). * src/keyboard.c (command_loop_1): Record (in recent_keys) the end of commands. (Frecent_keys): Don't include `end-of-command' in non-command outputs. (syms_of_keyboard): Define `end-of-command'.
This commit is contained in:
parent
f1f6f20ca0
commit
1abf768778
34
lisp/help.el
34
lisp/help.el
@ -465,18 +465,28 @@ To record all your input, use `open-dribble-file'."
|
||||
(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 ";; ")
|
||||
|
@ -307,6 +307,7 @@ static Lisp_Object command_loop (void);
|
||||
|
||||
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;
|
||||
@ -1421,6 +1422,8 @@ command_loop_1 (void)
|
||||
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;
|
||||
@ -1471,6 +1474,9 @@ command_loop_1 (void)
|
||||
|
||||
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
|
||||
@ -2089,7 +2095,6 @@ show_help_echo (Lisp_Object help, Lisp_Object window, Lisp_Object object,
|
||||
|
||||
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
|
||||
@ -9996,7 +10001,9 @@ represented as pseudo-events of the form (nil . COMMAND). */)
|
||||
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;
|
||||
@ -11066,6 +11073,8 @@ syms_of_keyboard (void)
|
||||
|
||||
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");
|
||||
|
Loading…
Reference in New Issue
Block a user