emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 1abf768 2/2: Make `view-lossage' output of chars re


From: Lars Ingebrigtsen
Subject: [Emacs-diffs] master 1abf768 2/2: Make `view-lossage' output of chars read from `read-char' more logical
Date: Mon, 5 Aug 2019 06:43:30 -0400 (EDT)

branch: master
commit 1abf76877847226daa5ab7e07000ac1d4aba3478
Author: Lars Ingebrigtsen <address@hidden>
Commit: Lars Ingebrigtsen <address@hidden>

    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'.
---
 lisp/help.el   | 34 ++++++++++++++++++++++------------
 src/keyboard.c | 13 +++++++++++--
 2 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/lisp/help.el b/lisp/help.el
index 039d0c4..ba76d26 100644
--- a/lisp/help.el
+++ b/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 ";; ")
diff --git a/src/keyboard.c b/src/keyboard.c
index 30686a2..158daba 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -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");



reply via email to

[Prev in Thread] Current Thread [Next in Thread]