Hi David, David Maus <dm...@ictsoc.de> writes:
> What if BODY inserts or deletes characters inside the narrowed region? > In this case the upper boundary of the region is no longer (point-max) > before executing body. Thus the buffer might be narrowed to the wrong > region after executing body. No, wait: If BODY inserts or deletes > something inside OR above the region the boundaries of the originally > narrowed region change, don't they? > > This would explain the error: Buffer is narrowed to a region that > happens to end at eob. BODY deletes something inside the region, eob > is decreased by the number of characters deleted. The call to > `narrow-to-region' tries to narrow to a region with an upper boundary > greater than eob -- and that's not possible. > > Solution? Not sure. The function must take into account that BODY > modifies buffer in a way that changes buffer in a way that requires > adjustment of the region boundaries OR even in a way that removes the > part of buffer that contained the region. > > So something like this would fix it: Store markers of beginning and > end of region. IIRC they will move with inserts and deletes. After > executing body narrow to position of these markers if they exist. If > marker for point-max is gone, use eob. If both are gone... Don't > narrow at all? Thanks for the analysis -- now I guess everyone better understand the role of `save-restriction' and `save-excursion'. :) -- Bastien