Subject: RE: bug#12232: 24.1.50; regression: repeat.el commit 2012-05-05 breaks repeating commands

From: "Drew Adams" <[email-masked]>
Date: Mon, 3 Sep 2012 20:53:43 -0700

> Stefan, could you please take a look at this?
> 
> This comment in the version of repeat.el before your change 
> might be pertinent, as it refers to a symptom (nesting exceeding 
> `max-lisp-eval-depth') similar to what I am seeing now:
> 
>  ;; A simple recursion here gets into trouble with 
>  ;; max-lisp-eval-depth on long sequences of repetitions
>  ;; of a command like `forward-word' (only 32 repetitions
>  ;; are possible given the default value of 200 for
>  ;; max-lisp-eval-depth), but if I now locally disable 
>  ;; the repeat char I can iterate indefinitely here
>  ;; around a single level of recursion.

I did not send quite the correct code to repro the problem.
The problem arises when I add this binding to the let:

 (repeat-message-function 'ignore)

I.e.,

(defun repeat-command (command)
  "Repeat COMMAND."
 (interactive)
 (let ((repeat-previous-repeated-command  command)
       (repeat-message-function           'ignore) ; <=====
       (last-repeatable-command           'repeat))
   (repeat nil)))
 
(defun backward-char-repeat ()
  "Like `backward-char'..."
  (interactive)
  (repeat-command 'backward-char))
 
(define-key ctl-x-map [up] 'backward-char-repeat)

The binding of `repeat-message-function' to `ignore' is to suppress a repeat
message.  If I need to do that differently from now on, please advise how - IOW,
how to work around this `max-lisp-eval-depth' bug.  Thx.