Fix todo-mode item insertion bug (bug#70937)
authorStephen Berman <stephen.berman@gmx.net>
Tue, 21 May 2024 09:04:17 +0000 (11:04 +0200)
committerStephen Berman <stephen.berman@gmx.net>
Tue, 21 May 2024 09:04:17 +0000 (11:04 +0200)
* lisp/calendar/todo-mode.el (todo-insert-item--next-param):
Initially assign each key in todo-mode-map a function identifying
it as invalid for item insertion, thus preventing mistakenly
pressing a key from executing an unwanted different todo-mode
command; the actual item insertion keys are redefined when looping
over the item insertion parameters.

lisp/calendar/todo-mode.el

index 12287299a7fbbc8e3114002647c0b8e82d94fe93..76fd4f497a490e0243466d0a4d0ba50c649b58d5 100644 (file)
@@ -5794,7 +5794,24 @@ keys already entered and those still available."
               (apply #'todo-insert-item--basic (nconc arg parlist)))))
          ;; Operate on a copy of the parameter list so the original is
          ;; not consumed, thus available for the next key typed.
-         (params0 params))
+         (params0 params)
+         (tm-keys (let (l)
+                    (map-keymap (lambda (key _binding)
+                                  (push key l))
+                                todo-mode-map)
+                    l)))
+    ;; Initially assign each key in todo-mode-map a function identifying
+    ;; it as invalid for item insertion, thus preventing mistakenly
+    ;; pressing a key from executing an unwanted different todo-mode
+    ;; command (bug#70937); the actual item insertion keys are redefined
+    ;; when looping over the item insertion parameters.
+    (dolist (k tm-keys)
+      (when (characterp k)
+        (define-key map (string k)
+          (lambda ()
+            (interactive)
+            (message (concat "`%s' is not a valid remaining item insertion key")
+                     (string k))))))
     (when last
       (if (memq last '(default copy))
          (progn