]> code.delx.au - gnu-emacs/commitdiff
(repeat): Handle keyboard macros properly.
authorRichard M. Stallman <rms@gnu.org>
Fri, 16 Oct 1998 19:40:12 +0000 (19:40 +0000)
committerRichard M. Stallman <rms@gnu.org>
Fri, 16 Oct 1998 19:40:12 +0000 (19:40 +0000)
Handle new prefix arg after self-insert command.

Don't include cl even at compile time.
(repeat): Avoid using `loop'.

lisp/repeat.el

index 6c970fc2c1efecf4afb432f7f764175bf8fe2845..3d3f464488d64b4a0653b2a6f349f5090b232e95 100644 (file)
@@ -93,8 +93,6 @@
 
 ;;; Code:
 
-(eval-when-compile (require 'cl))
-
 ;;;;; ************************* USER OPTIONS ************************** ;;;;;
 
 (defcustom repeat-too-dangerous '(kill-this-buffer)
@@ -277,9 +275,20 @@ can be modified by the global variable `repeat-on-final-keystroke'."
                                      "inserted before auto-fill"
                                      "clobbered it, sorry")))))))
             (setq repeat-num-input-keys-at-self-insert num-input-keys)
-            (loop repeat (prefix-numeric-value repeat-arg) do
-                  (repeat-self-insert insertion)))
-        (call-interactively real-last-command)))
+           ;; If the self-insert had a repeat count, INSERTION
+           ;; includes that many copies of the same character.
+           ;; So use just the first character
+           ;; and repeat it the right number of times.
+           (setq insertion (substring insertion 0 1))
+           (let ((count (prefix-numeric-value repeat-arg))
+                 (i 0))
+             (while (< i count)
+               (repeat-self-insert insertion)
+               (setq i (1+ i)))))
+       (if (or (stringp real-last-command)
+               (vectorp real-last-command))
+           (execute-kbd-macro real-last-command)
+         (call-interactively real-last-command))))
     (when repeat-repeat-char
       ;; A simple recursion here gets into trouble with max-lisp-eval-depth
       ;; on long sequences of repetitions of a command like `forward-word'