Subject: bug#3943: 23.0.96; CPerl-mode is too electric

From: Ilya Zakharevich <[email-masked]>
Date: Tue, 18 Aug 2009 09:13:40 -0700

On Sun, Aug 16, 2009 at 07:24:23PM -0400, Chong Yidong wrote:
> The problem exists in upstream CPerl as well.  The bug arises from line
> 3763 (cperl-electric-paren):
> 
>   (if (eq last-command-char ?<)
>       (progn
>         (and abbrev-mode ; later it is too late, may be after `for'
>              (expand-abbrev))
>         (cperl-after-expr-p nil "{;(,:="))
>     1))
> 
> Because one abbrev expansion already takes place when typing "while ",
> this code leads to another, extra expansion.  Removing the
> (and abbrev-mode...) expression fixes the problem.

The bug report does not contain the way to reproduce the problem.
>From your description, I presume that it is typing

  while<

which leads to a double expansion.

Then it is an incompatible change in Emacs after v21 (which I can test
with).  I would much prefer code without explicit version-checking
(especially since there are a few independent branches); for this I
need a way to determine whether I'm inside `expand-abbrev'.

Is there a way to detect this?

Thanks,
Ilya