diff options
author | Joseph Arceneaux <jla@gnu.org> | 1992-10-01 00:56:11 +0000 |
---|---|---|
committer | Joseph Arceneaux <jla@gnu.org> | 1992-10-01 00:56:11 +0000 |
commit | 74d6d8c5d61de07aa8c3b7f2284863ab69ad8e14 (patch) | |
tree | 8ddcd9d632a44c58d6442e85a2a0b30ba19676e2 /src | |
parent | bef79ee47f039aa0759619a175f23ac58e4cd3ec (diff) | |
download | emacs-74d6d8c5d61de07aa8c3b7f2284863ab69ad8e14.tar.gz |
* editfns.c (make_buffer_string): Call copy_intervals_to_string().
(Finsert_buffer_substring): Call graft_intervals_into_buffer().
#include "intervals.h".
Diffstat (limited to 'src')
-rw-r--r-- | src/editfns.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/editfns.c b/src/editfns.c index cf7efd5a953..7c2b562a137 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -27,6 +27,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #endif #include "lisp.h" +#include "intervals.h" #include "buffer.h" #include "window.h" @@ -700,7 +701,9 @@ Both arguments are required.") /* Making strings from buffer contents. */ /* Return a Lisp_String containing the text of the current buffer from - START to END. + START to END. If text properties are in use and the current buffer + has properties in the range specifed, the resulting string will also + have them. We don't want to use plain old make_string here, because it calls make_uninit_string, which can cause the buffer arena to be @@ -709,6 +712,7 @@ Both arguments are required.") doesn't effect most of the other users of make_string, so it should be left as is. But we should use this function when conjuring buffer substrings. */ + Lisp_Object make_buffer_string (start, end) int start, end; @@ -721,6 +725,9 @@ make_buffer_string (start, end) result = make_uninit_string (end - start); bcopy (&FETCH_CHAR (start), XSTRING (result)->data, end - start); + /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */ + copy_intervals_to_string (result, current_buffer, start, end - start); + return result; } @@ -756,7 +763,7 @@ They default to the beginning and the end of BUFFER.") (buf, b, e) Lisp_Object buf, b, e; { - register int beg, end, exch; + register int beg, end, temp, len, opoint, start; register struct buffer *bp; buf = Fget_buffer (buf); @@ -778,7 +785,7 @@ They default to the beginning and the end of BUFFER.") } if (beg > end) - exch = beg, beg = end, end = exch; + temp = beg, beg = end, end = temp; /* Move the gap or create enough gap in the current buffer. */ @@ -787,6 +794,10 @@ They default to the beginning and the end of BUFFER.") if (GAP_SIZE < end - beg) make_gap (end - beg - GAP_SIZE); + len = end - beg; + start = beg; + opoint = point; + if (!(BUF_BEGV (bp) <= beg && beg <= end && end <= BUF_ZV (bp))) @@ -802,6 +813,10 @@ They default to the beginning and the end of BUFFER.") if (beg < end) insert (BUF_CHAR_ADDRESS (bp, beg), end - beg); + /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */ + graft_intervals_into_buffer (copy_intervals (bp->intervals, start, len), + opoint, bp); + return Qnil; } |