Subject: bug#4894: 23.1; emacs ignores number characters in incremental search in keyboard macros

From: Leo <[email-masked]>
Date: Thu, 26 Aug 2010 22:36:54 +0100

On 2009-11-11 18:32 +0000, Stefan Monnier wrote:
> Actually, the need for cancel-kbd-macro-events is explained in
> the comment.  The problem is that after cancelling the <kp-0> we should
> add the ?0 replacement.  That should normally be done by isearch-unread,
> but for printing char, we don't call that function any more.
>
> I.e. the problem was introduced by the change below.  Handa, can you
> explain why we need this?  Maybe it was needed at the time but not
> any more?
>
>

I run into an error 

  After 0 kbd macro iterations: isearch-search: Keyboard macro
  terminated by a command ringing the bell

almost every time isearch-forward-regexp is used in a macro, for
example:

  C-x ( ESC C-s [ - + ] ? [ 0 - 9 ] + C-x )

I wonder if someone can take a look at the problem. Thanks.

Leo

>
>         Stefan
>
>
> committer: handa
> branch nick: HEAD
> timestamp: Thu 2000-06-01 12:22:31 +0000
> message:
>   (isearch-update): Set disable-point-adjustment to t
>   to prevent the point moving to the end of a composition when a
>   part of a composition is searched.
>   (isearch-other-meta-char): If the key invoking this command can be
>   mapped by function-key-map to a printing char, call
>   isearch-process-search-char directly.
> ------------------------------------------------------------
>
>
> === modified file 'lisp/isearch.el'
> --- lisp/isearch.el	2000-05-31 09:49:22 +0000
> +++ lisp/isearch.el	2000-06-01 12:22:31 +0000
> @@ -619,7 +619,10 @@
>    (setq ;; quit-flag nil  not for isearch-mode
>     isearch-adjusted nil
>     isearch-yank-flag nil)
> -  (isearch-lazy-highlight-new-loop))
> +  (isearch-lazy-highlight-new-loop)
> +  ;; We must prevent the point moving to the end of composition when a
> +  ;; part of the composition has just been searched.
> +  (setq disable-point-adjustment t))
>  
>  (defun isearch-done (&optional nopush edit)
>    (remove-hook 'mouse-leave-buffer-hook 'isearch-done)
> @@ -1150,8 +1153,22 @@
>  	       (progn 
>  		 (isearch-done)
>  		 (apply 'isearch-unread keylist))
> -	     (apply 'isearch-unread
> -		    (listify-key-sequence (lookup-key function-key-map key)))))
> +	     (setq keylist
> +		   (listify-key-sequence (lookup-key function-key-map key)))
> +	     (while keylist
> +	       (setq key (car keylist))
> +	       ;; If KEY is a printing char, we handle it here
> +	       ;; directly to avoid the input method and keyboard
> +	       ;; coding system translating it.
> +	       (if (and (integerp key)
> +			(>= key ?\ ) (< key 256))
> +		   (progn
> +		     (isearch-process-search-char key)
> +		     (setq keylist (cdr keylist)))
> +		 ;; As the remaining keys in KEYLIST can't be handled
> +		 ;; here, we must reread them.
> +		 (apply 'isearch-unread keylist)
> +		 (setq keylist nil)))))
>  	  (
>  	   ;; Handle an undefined shifted control character
>  	   ;; by downshifting it if that makes it defined.

-- 
Any Emacs contains an ad hoc, informally-specified, bug-ridden, slow
implementation of half of Common Lisp.