Subject: RE: bug#13178: Query-replace fails soon after narrow-to-region

From: Drew Adams <[email-masked]>
Date: Fri, 27 Feb 2015 07:01:52 -0800 (PST)

> Sorry, it's not a bug, but a specification.
> 
> If a region is active, `query-replace' (together with `replace-string') gets
> narrowed inside there.  I didn't know that, and activated a zero-size region
> in the procedure described above.

Just FYI - It might help you recognize this situation if you use library
`mode-line-posn.el'.  It has the following behavior, which addresses the
gotcha you mention:

1. The size of the region is shown in the mode line when the region is active.  
   Option `modelinepos-empty-region-flag' determines whether to also indicate
   an empty active region.  By default it is t, meaning indicate an empty
   active region.

2. Option `modelinepos-style' lets you choose the region info shown when the
   region is active: (a) number of chars, (b) number of chars and lines, or
   (c) anything else you might want.  Choice (b) is the default.

3. The region highlighting in the mode-line is changed to a different face
   when you invoke a command that behaves specially for an active region,
   such as `query-replace'.

The fact that `modelinepos-empty-region-flag' is non-nil by default means
that whenever the region is active but empty you can easily notice this.

#3 means that you can immediately tell when the region is active and you
are currently using a command whose behavior changes when the region is
active.

More info and screenshots here:
http://www.emacswiki.org/emacs/ModeLinePosition

I proposed such behavior for Emacs, but there was no interest in it.
It helps me.  Maybe it will help you too.