help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: A little lisp help


From: Bingham, Jay
Subject: RE: A little lisp help
Date: Fri, 24 Jan 2003 10:51:03 -0600

On Friday, January 24, 2003 1:39 AM Jim Janney wrote:

>Christopher J. White <chris@grierwhite.com> wrote:
>
>> You have to be careful when using region end-points
>> and inserting text.  m and p above are numerical values
>> that reference offsets from the beginning of the file and
>> do not "move" when text is inserted before them.
>> 
>> Use markers if you really want to be able to move around
>> and insert text, but the best method was the previous
>> suggestion to narrow-to-region.  
>
>Markers are the most general solution, but you can sometimes get by
>without them by making changes in reverse buffer order.  For example,
in
>this case
>
>    (goto-char p)
>    (insert "}\n")
>    (save-excursion (goto-char m) (insert "{\n"))
>    (indent-region m (point) nil))
>
>Note that (interactive "r") always passes the arguments smallest first,
>but for a function that might also be called from lisp code you'd want
>to check that m really comes before p.  I prefer to call the values
>"start" and "end" since they may not be the actual point and mark.

Markers are indeed a general solution, however, there are some
circumstances where they do not work as advertized.  In Emacs 20.4 I
found that the replace-match function does not update markers.  (I have
not tried it in Emacs 21).

If the modifications will occur entirely before the location that needs
to be preserved, a simple method for doing this is to calculate the
distance of the location from the end of the buffer before doing the
modifications, then when the modifications are complete the new value of
the location can be calculated by subtracting offset from the new end of
the buffer.  For example:

(setq offset-from-eob (- point-max point-I-want-to-remember))
 ... the modifications happen here ...
(setq point-I-want-to-remember (- point-max offset-from-eob))

-_
J_)
C_)ingham
.    HP - NonStop Austin Software & Services - Software Quality
Assurance
.    Austin, TX
. "Language is the apparel in which your thoughts parade in public.
.  Never clothe them in vulgar and shoddy attire."     -Dr. George W.
Crane-





reply via email to

[Prev in Thread] Current Thread [Next in Thread]