[Top][All Lists]

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

match-data confusion...

From: David Kastrup
Subject: match-data confusion...
Date: 18 Jun 2004 12:10:42 +0200

I am having a problem with getting stuff right in replace.el.

The problem is that

(match-data t) is basically dangerous since it is lacking the
information to restore last_thing_searched.  But that means that
(set-match-data (match-data t)) is not a noop, even if the buffer is
not changed in between since the restored match-data stops being
adjust when buffer changes occur before it.

Two possible amendments: one thing would be to add the buffer itself
as a list element into match-data.  That might be an incompatible
change, however.

The second one would be to allow an optional argument to
set-match-data that specifies a buffer, so that
(set-match-data (match-data t) buffer) will set last_thing_searched
to the specified buffer again.

As it is, I will probably have to write a special purpose function in
replace.el for now that looks like
(defun replace-set-match-data (match-data)
   (if (integerp (car match-data))
     (let ((marker (make-marker)))
         (set-marker marker (car match-data))
         (set-match-data (cons marker (cdr match-data)))
         (set-marker marker nil))
     (set-match-data match-data)))

which is pretty ugly and relies on some internals to stay the way
they are now.

David Kastrup, Kriemhildstr. 15, 44793 Bochum

reply via email to

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