Mercurial > hg > xemacs-beta
comparison src/search.c @ 793:e38acbeb1cae
[xemacs-hg @ 2002-03-29 04:46:17 by ben]
lots o' fixes
etc/ChangeLog: New file.
Separated out all entries for etc/ into their own ChangeLog.
Includes entries for the following files:
etc/BABYL, etc/BETA, etc/CHARSETS, etc/DISTRIB, etc/Emacs.ad,
etc/FTP, etc/GNUS-NEWS, etc/GOATS, etc/HELLO, etc/INSTALL,
etc/MACHINES, etc/MAILINGLISTS, etc/MSDOS, etc/MYTHOLOGY, etc/NEWS,
etc/OXYMORONS, etc/PACKAGES, etc/README, etc/TUTORIAL,
etc/TUTORIAL.de, etc/TUTORIAL.ja, etc/TUTORIAL.ko, etc/TUTORIAL.se,
etc/aliases.ksh, etc/altrasoft-logo.xpm, etc/check_cygwin_setup.sh,
etc/custom/example-themes/europe-theme.el,
etc/custom/example-themes/ex-custom-file,
etc/custom/example-themes/example-theme.el, etc/e/eterm.ti,
etc/edt-user.doc, etc/enriched.doc, etc/etags.1, etc/gnuserv.1,
etc/gnuserv.README, etc/package-index.LATEST.gpg,
etc/package-index.LATEST.pgp, etc/photos/jan.png, etc/recycle.xpm,
etc/refcard.tex, etc/sample.Xdefaults, etc/sample.emacs,
etc/sgml/CATALOG, etc/sgml/HTML32.dtd, etc/skk/SKK.tut.E,
etc/smilies/Face_ase.xbm, etc/smilies/Face_ase2.xbm,
etc/smilies/Face_ase3.xbm, etc/smilies/Face_smile.xbm,
etc/smilies/Face_weep.xbm, etc/sounds, etc/toolbar,
etc/toolbar/workshop-cap-up.xpm, etc/xemacs-ja.1, etc/xemacs.1,
etc/yow.lines, etc\BETA, etc\NEWS, etc\README, etc\TUTORIAL,
etc\TUTORIAL.de, etc\check_cygwin_setup.sh, etc\sample.init.el,
etc\unicode\README, etc\unicode\mule-ucs\*, etc\unicode\other\*
unicode/unicode-consortium/8859-16.TXT: New file.
mule/english.el: Define this charset now, since a bug was fixed that formerly
prevented it.
mule/ethio-util.el: Fix compile errors involving Unicode `characters', which should be
integers.
Makefile.in.in: Always include gui.c, to fix compile error when TTY-only.
EmacsFrame.c, abbrev.c, alloc.c, buffer.c, buffer.h, bytecode.c, bytecode.h, callint.c, callproc.c, casetab.c, casetab.h, charset.h, chartab.c, chartab.h, cmds.c, console-msw.c, console-msw.h, console-tty.c, console-x.c, console-x.h, console.c, console.h, data.c, database.c, device-gtk.c, device-msw.c, device-x.c, device.c, device.h, dialog-msw.c, doc.c, doprnt.c, dumper.c, dynarr.c, editfns.c, eldap.c, eldap.h, elhash.c, elhash.h, emacs.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, event-tty.c, event-unixoid.c, events.c, events.h, extents.c, extents.h, faces.c, faces.h, file-coding.c, file-coding.h, fileio.c, filelock.c, fns.c, frame-gtk.c, frame-msw.c, frame-tty.c, frame-x.c, frame.c, frame.h, free-hook.c, general-slots.h, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-widget.c, glyphs-x.c, glyphs.c, glyphs.h, gpmevent.c, gtk-xemacs.c, gui-msw.c, gui-x.c, gui-x.h, gui.c, gui.h, gutter.c, gutter.h, indent.c, input-method-xlib.c, insdel.c, keymap.c, keymap.h, lisp-disunion.h, lisp-union.h, lisp.h, lread.c, lrecord.h, lstream.c, lstream.h, marker.c, menubar-gtk.c, menubar-msw.c, menubar-x.c, menubar.c, minibuf.c, mule-canna.c, mule-ccl.c, mule-charset.c, mule-wnnfns.c, native-gtk-toolbar.c, objects-msw.c, objects-tty.c, objects-x.c, objects.c, objects.h, opaque.c, opaque.h, postgresql.c, postgresql.h, print.c, process-unix.c, process.c, process.h, rangetab.c, rangetab.h, redisplay-gtk.c, redisplay-msw.c, redisplay-output.c, redisplay-tty.c, redisplay-x.c, redisplay.c, scrollbar-gtk.c, scrollbar-msw.c, scrollbar-x.c, scrollbar.c, scrollbar.h, search.c, select-gtk.c, select-x.c, sound.c, specifier.c, specifier.h, strftime.c, symbols.c, symeval.h, syntax.h, text.c, text.h, toolbar-common.c, toolbar-msw.c, toolbar.c, toolbar.h, tooltalk.c, tooltalk.h, ui-gtk.c, ui-gtk.h, undo.c, vm-limit.c, window.c, window.h: Eliminate XSETFOO. Replace all usages with wrap_foo().
Make symbol->name a Lisp_Object, not Lisp_String *. Eliminate
nearly all uses of Lisp_String * in favor of Lisp_Object, and
correct macros so most of them favor Lisp_Object.
Create new error-behavior ERROR_ME_DEBUG_WARN -- output warnings,
but at level `debug' (usually ignored). Use it when instantiating
specifiers, so problems can be debugged. Move
log-warning-minimum-level into C so that we can optimize
ERROR_ME_DEBUG_WARN.
Fix warning levels consistent with new definitions.
Add default_ and parent fields to char table; not yet implemented.
New fun Dynarr_verify(); use for further error checking on Dynarrs.
Rearrange code at top of lisp.h in conjunction with dynarr changes.
Fix eifree(). Use Eistrings in various places
(format_event_object(), where_is_to_char(), and callers thereof)
to avoid fixed-size strings buffers. New fun write_eistring().
Reindent and fix GPM code to follow standards.
Set default MS Windows font to Lucida Console (same size as
Courier New but less interline spacing, so more lines fit).
Increase default frame size on Windows to 50 lines. (If that's too
big for the workspace, the frame will be shrunk as necessary.)
Fix problem with text files with no newlines (). (Change
`convert-eol' coding system to use `nil' for autodetect,
consistent with make-coding-system.)
Correct compile warnings in vm-limit.c.
Fix handling of reverse-direction charsets to avoid errors when
opening (e.g.) mule-ucs/lisp/reldata/uiso8859-6.el.
Recode some object printing methods to use write_fmt_string()
instead of a fixed buffer and sprintf.
Turn on display of png comments as warnings (level `info'), now
that they're unobtrusive.
Revamped the sound documentation.
Fixed bug in redisplay w.r.t. hscroll/truncation/continuation
glyphs causing jumping up and down of the lines, since they're
bigger than the line size. (It was seen most obviously when
there's a horizontal scroll bar, e.g. do C-h a glyph or something
like that.) The problem was that the glyph-contrib-p setting on
glyphs was ignored even if it was set properly, which it wasn't
until now.
author | ben |
---|---|
date | Fri, 29 Mar 2002 04:49:13 +0000 |
parents | 943eaba38521 |
children | a634e3b7acc8 |
comparison
equal
deleted
inserted
replaced
792:4e83fdb13eb9 | 793:e38acbeb1cae |
---|---|
1 /* String search routines for XEmacs. | 1 /* String search routines for XEmacs. |
2 Copyright (C) 1985, 1986, 1987, 1992-1995 Free Software Foundation, Inc. | 2 Copyright (C) 1985, 1986, 1987, 1992-1995 Free Software Foundation, Inc. |
3 Copyright (C) 1995 Sun Microsystems, Inc. | 3 Copyright (C) 1995 Sun Microsystems, Inc. |
4 Copyright (C) 2001 Ben Wing. | 4 Copyright (C) 2001, 2002 Ben Wing. |
5 | 5 |
6 This file is part of XEmacs. | 6 This file is part of XEmacs. |
7 | 7 |
8 XEmacs is free software; you can redistribute it and/or modify it | 8 XEmacs is free software; you can redistribute it and/or modify it |
9 under the terms of the GNU General Public License as published by the | 9 under the terms of the GNU General Public License as published by the |
312 for (i = 0; i < num_regs; i++) | 312 for (i = 0; i < num_regs; i++) |
313 { | 313 { |
314 if (search_regs.start[i] > 0) | 314 if (search_regs.start[i] > 0) |
315 { | 315 { |
316 search_regs.start[i] = | 316 search_regs.start[i] = |
317 XSTRING_INDEX_BYTE_TO_CHAR (string, search_regs.start[i]); | 317 string_index_byte_to_char (string, search_regs.start[i]); |
318 } | 318 } |
319 if (search_regs.end[i] > 0) | 319 if (search_regs.end[i] > 0) |
320 { | 320 { |
321 search_regs.end[i] = | 321 search_regs.end[i] = |
322 XSTRING_INDEX_BYTE_TO_CHAR (string, search_regs.end[i]); | 322 string_index_byte_to_char (string, search_regs.end[i]); |
323 } | 323 } |
324 } | 324 } |
325 } | 325 } |
326 | 326 |
327 | 327 |
375 { | 375 { |
376 search_regs.start[i] += BI_BUF_BEGV (buf); | 376 search_regs.start[i] += BI_BUF_BEGV (buf); |
377 search_regs.end[i] += BI_BUF_BEGV (buf); | 377 search_regs.end[i] += BI_BUF_BEGV (buf); |
378 } | 378 } |
379 } | 379 } |
380 XSETBUFFER (last_thing_searched, buf); | 380 last_thing_searched = wrap_buffer (buf); |
381 fixup_search_regs_for_buffer (buf); | 381 fixup_search_regs_for_buffer (buf); |
382 return unbind_to_1 (count, val); | 382 return unbind_to_1 (count, val); |
383 } | 383 } |
384 | 384 |
385 DEFUN ("looking-at", Flooking_at, 1, 2, 0, /* | 385 DEFUN ("looking-at", Flooking_at, 1, 2, 0, /* |
444 (!NILP (buf->case_fold_search) | 444 (!NILP (buf->case_fold_search) |
445 ? XCASE_TABLE_DOWNCASE (buf->case_table) : Qnil), | 445 ? XCASE_TABLE_DOWNCASE (buf->case_table) : Qnil), |
446 0, ERROR_ME); | 446 0, ERROR_ME); |
447 QUIT; | 447 QUIT; |
448 { | 448 { |
449 Bytecount bis = XSTRING_INDEX_CHAR_TO_BYTE (string, s); | 449 Bytecount bis = string_index_char_to_byte (string, s); |
450 regex_match_object = string; | 450 regex_match_object = string; |
451 regex_emacs_buffer = buf; | 451 regex_emacs_buffer = buf; |
452 val = re_search (bufp, (char *) XSTRING_DATA (string), | 452 val = re_search (bufp, (char *) XSTRING_DATA (string), |
453 XSTRING_LENGTH (string), bis, | 453 XSTRING_LENGTH (string), bis, |
454 XSTRING_LENGTH (string) - bis, | 454 XSTRING_LENGTH (string) - bis, |
459 if (val < 0) return unbind_to (count); | 459 if (val < 0) return unbind_to (count); |
460 last_thing_searched = Qt; | 460 last_thing_searched = Qt; |
461 fixup_search_regs_for_string (string); | 461 fixup_search_regs_for_string (string); |
462 return | 462 return |
463 unbind_to_1 (count, | 463 unbind_to_1 (count, |
464 make_int (XSTRING_INDEX_BYTE_TO_CHAR (string, val))); | 464 make_int (string_index_byte_to_char (string, val))); |
465 } | 465 } |
466 | 466 |
467 DEFUN ("string-match", Fstring_match, 2, 4, 0, /* | 467 DEFUN ("string-match", Fstring_match, 2, 4, 0, /* |
468 Return index of start of first match for REGEXP in STRING, or nil. | 468 Return index of start of first match for REGEXP in STRING, or nil. |
469 If third arg START is non-nil, start search at that index in STRING. | 469 If third arg START is non-nil, start search at that index in STRING. |
752 { | 752 { |
753 return scan_buffer (buf, '\n', from, 0, count, 0, 1); | 753 return scan_buffer (buf, '\n', from, 0, count, 0, 1); |
754 } | 754 } |
755 | 755 |
756 Bytebpos | 756 Bytebpos |
757 bi_find_next_emchar_in_string (Lisp_String* str, Emchar target, Bytebpos st, | 757 bi_find_next_emchar_in_string (Lisp_Object str, Emchar target, Bytebpos st, |
758 EMACS_INT count) | 758 EMACS_INT count) |
759 { | 759 { |
760 /* This function has been Mule-ized. */ | 760 /* This function has been Mule-ized. */ |
761 Bytebpos lim = string_length (str) -1; | 761 Bytebpos lim = XSTRING_LENGTH (str) -1; |
762 Intbyte* s = string_data (str); | 762 Intbyte *s = XSTRING_DATA (str); |
763 | 763 |
764 assert (count >= 0); | 764 assert (count >= 0); |
765 | 765 |
766 #ifdef MULE | 766 #ifdef MULE |
767 /* Due to the Mule representation of characters in a buffer, | 767 /* Due to the Mule representation of characters in a buffer, |
771 way is faster. */ | 771 way is faster. */ |
772 if (target >= 0200) | 772 if (target >= 0200) |
773 { | 773 { |
774 while (st < lim && count > 0) | 774 while (st < lim && count > 0) |
775 { | 775 { |
776 if (string_char (str, st) == target) | 776 if (XSTRING_CHAR (str, st) == target) |
777 count--; | 777 count--; |
778 INC_CHARBYTEBPOS (s, st); | 778 INC_CHARBYTEBPOS (s, st); |
779 } | 779 } |
780 } | 780 } |
781 else | 781 else |
1237 if (search_regs.start[i] >= 0) | 1237 if (search_regs.start[i] >= 0) |
1238 { | 1238 { |
1239 search_regs.start[i] += j; | 1239 search_regs.start[i] += j; |
1240 search_regs.end[i] += j; | 1240 search_regs.end[i] += j; |
1241 } | 1241 } |
1242 XSETBUFFER (last_thing_searched, buf); | 1242 last_thing_searched = wrap_buffer (buf); |
1243 /* Set pos to the new position. */ | 1243 /* Set pos to the new position. */ |
1244 pos = search_regs.start[0]; | 1244 pos = search_regs.start[0]; |
1245 fixup_search_regs_for_buffer (buf); | 1245 fixup_search_regs_for_buffer (buf); |
1246 /* And charbpos too. */ | 1246 /* And charbpos too. */ |
1247 charbpos = search_regs.start[0]; | 1247 charbpos = search_regs.start[0]; |
1275 if (search_regs.start[i] >= 0) | 1275 if (search_regs.start[i] >= 0) |
1276 { | 1276 { |
1277 search_regs.start[i] += j; | 1277 search_regs.start[i] += j; |
1278 search_regs.end[i] += j; | 1278 search_regs.end[i] += j; |
1279 } | 1279 } |
1280 XSETBUFFER (last_thing_searched, buf); | 1280 last_thing_searched = wrap_buffer (buf); |
1281 /* Set pos to the new position. */ | 1281 /* Set pos to the new position. */ |
1282 pos = search_regs.end[0]; | 1282 pos = search_regs.end[0]; |
1283 fixup_search_regs_for_buffer (buf); | 1283 fixup_search_regs_for_buffer (buf); |
1284 /* And charbpos too. */ | 1284 /* And charbpos too. */ |
1285 charbpos = search_regs.end[0]; | 1285 charbpos = search_regs.end[0]; |
1964 search_regs.num_regs = 1; | 1964 search_regs.num_regs = 1; |
1965 } | 1965 } |
1966 | 1966 |
1967 search_regs.start[0] = beg; | 1967 search_regs.start[0] = beg; |
1968 search_regs.end[0] = beg + len; | 1968 search_regs.end[0] = beg + len; |
1969 XSETBUFFER (last_thing_searched, buf); | 1969 last_thing_searched = wrap_buffer (buf); |
1970 } | 1970 } |
1971 | 1971 |
1972 | 1972 |
1973 /* Given a string of words separated by word delimiters, | 1973 /* Given a string of words separated by word delimiters, |
1974 compute a regexp that matches those exact words | 1974 compute a regexp that matches those exact words |
1984 | 1984 |
1985 CHECK_STRING (string); | 1985 CHECK_STRING (string); |
1986 len = XSTRING_CHAR_LENGTH (string); | 1986 len = XSTRING_CHAR_LENGTH (string); |
1987 | 1987 |
1988 for (i = 0; i < len; i++) | 1988 for (i = 0; i < len; i++) |
1989 if (!WORD_SYNTAX_P (syntax_table, string_char (XSTRING (string), i))) | 1989 if (!WORD_SYNTAX_P (syntax_table, XSTRING_CHAR (string, i))) |
1990 { | 1990 { |
1991 punct_count++; | 1991 punct_count++; |
1992 if (i > 0 && WORD_SYNTAX_P (syntax_table, | 1992 if (i > 0 && WORD_SYNTAX_P (syntax_table, |
1993 string_char (XSTRING (string), i - 1))) | 1993 XSTRING_CHAR (string, i - 1))) |
1994 word_count++; | 1994 word_count++; |
1995 } | 1995 } |
1996 if (WORD_SYNTAX_P (syntax_table, string_char (XSTRING (string), len - 1))) | 1996 if (WORD_SYNTAX_P (syntax_table, XSTRING_CHAR (string, len - 1))) |
1997 word_count++; | 1997 word_count++; |
1998 if (!word_count) return build_string (""); | 1998 if (!word_count) return build_string (""); |
1999 | 1999 |
2000 { | 2000 { |
2001 /* The following value is an upper bound on the amount of storage we | 2001 /* The following value is an upper bound on the amount of storage we |
2008 *o++ = '\\'; | 2008 *o++ = '\\'; |
2009 *o++ = 'b'; | 2009 *o++ = 'b'; |
2010 | 2010 |
2011 for (i = 0; i < len; i++) | 2011 for (i = 0; i < len; i++) |
2012 { | 2012 { |
2013 Emchar ch = string_char (XSTRING (string), i); | 2013 Emchar ch = XSTRING_CHAR (string, i); |
2014 | 2014 |
2015 if (WORD_SYNTAX_P (syntax_table, ch)) | 2015 if (WORD_SYNTAX_P (syntax_table, ch)) |
2016 o += set_charptr_emchar (o, ch); | 2016 o += set_charptr_emchar (o, ch); |
2017 else if (i > 0 | 2017 else if (i > 0 |
2018 && WORD_SYNTAX_P (syntax_table, | 2018 && WORD_SYNTAX_P (syntax_table, |
2019 string_char (XSTRING (string), i - 1)) | 2019 XSTRING_CHAR (string, i - 1)) |
2020 && --word_count) | 2020 && --word_count) |
2021 { | 2021 { |
2022 *o++ = '\\'; | 2022 *o++ = '\\'; |
2023 *o++ = 'W'; | 2023 *o++ = 'W'; |
2024 *o++ = '\\'; | 2024 *o++ = '\\'; |
2330 of the typical half-assed "let the implementation be | 2330 of the typical half-assed "let the implementation be |
2331 visible" form it's in, we could extend it to include | 2331 visible" form it's in, we could extend it to include |
2332 the last string matched and the buffer used for that | 2332 the last string matched and the buffer used for that |
2333 matching. But of course we can't change it as it is. */ | 2333 matching. But of course we can't change it as it is. */ |
2334 buf = decode_buffer (strbuffer, 0); | 2334 buf = decode_buffer (strbuffer, 0); |
2335 XSETBUFFER (buffer, buf); | 2335 buffer = wrap_buffer (buf); |
2336 } | 2336 } |
2337 else | 2337 else |
2338 { | 2338 { |
2339 if (!NILP (strbuffer)) | 2339 if (!NILP (strbuffer)) |
2340 { | 2340 { |
2392 for (pos = search_regs.start[sub]; pos < last; pos++) | 2392 for (pos = search_regs.start[sub]; pos < last; pos++) |
2393 { | 2393 { |
2394 if (NILP (string)) | 2394 if (NILP (string)) |
2395 c = BUF_FETCH_CHAR (buf, pos); | 2395 c = BUF_FETCH_CHAR (buf, pos); |
2396 else | 2396 else |
2397 c = string_char (XSTRING (string), pos); | 2397 c = XSTRING_CHAR (string, pos); |
2398 | 2398 |
2399 if (LOWERCASEP (buf, c)) | 2399 if (LOWERCASEP (buf, c)) |
2400 { | 2400 { |
2401 /* Cannot be all caps if any original char is lower case */ | 2401 /* Cannot be all caps if any original char is lower case */ |
2402 | 2402 |
2477 /* If SUBSTART is set, we need to also insert the | 2477 /* If SUBSTART is set, we need to also insert the |
2478 text from SUBSTART to SUBEND in the original string. */ | 2478 text from SUBSTART to SUBEND in the original string. */ |
2479 Charcount substart = -1; | 2479 Charcount substart = -1; |
2480 Charcount subend = -1; | 2480 Charcount subend = -1; |
2481 | 2481 |
2482 c = string_char (XSTRING (replacement), strpos); | 2482 c = XSTRING_CHAR (replacement, strpos); |
2483 if (c == '\\' && strpos < stlen - 1) | 2483 if (c == '\\' && strpos < stlen - 1) |
2484 { | 2484 { |
2485 c = string_char (XSTRING (replacement), ++strpos); | 2485 c = XSTRING_CHAR (replacement, ++strpos); |
2486 if (c == '&') | 2486 if (c == '&') |
2487 { | 2487 { |
2488 literal_end = strpos - 1; | 2488 literal_end = strpos - 1; |
2489 substart = search_regs.start[0]; | 2489 substart = search_regs.start[0]; |
2490 subend = search_regs.end[0]; | 2490 subend = search_regs.end[0]; |
2570 Charcount stlen = XSTRING_CHAR_LENGTH (replacement); | 2570 Charcount stlen = XSTRING_CHAR_LENGTH (replacement); |
2571 Charcount strpos; | 2571 Charcount strpos; |
2572 | 2572 |
2573 for (strpos = 0; strpos < stlen; strpos++) | 2573 for (strpos = 0; strpos < stlen; strpos++) |
2574 { | 2574 { |
2575 Emchar curchar = string_char (XSTRING (replacement), strpos); | 2575 Emchar curchar = XSTRING_CHAR (replacement, strpos); |
2576 Emchar newchar = -1; | 2576 Emchar newchar = -1; |
2577 if (i < Dynarr_length (ul_pos_dynarr) && | 2577 if (i < Dynarr_length (ul_pos_dynarr) && |
2578 strpos == Dynarr_at (ul_pos_dynarr, i)) | 2578 strpos == Dynarr_at (ul_pos_dynarr, i)) |
2579 { | 2579 { |
2580 int new_action = Dynarr_at (ul_action_dynarr, i); | 2580 int new_action = Dynarr_at (ul_action_dynarr, i); |
2594 newchar = DOWNCASE (buf, curchar); | 2594 newchar = DOWNCASE (buf, curchar); |
2595 else | 2595 else |
2596 newchar = curchar; | 2596 newchar = curchar; |
2597 } | 2597 } |
2598 if (newchar != curchar) | 2598 if (newchar != curchar) |
2599 set_string_char (XSTRING (replacement), strpos, newchar); | 2599 set_string_char (replacement, strpos, newchar); |
2600 } | 2600 } |
2601 } | 2601 } |
2602 | 2602 |
2603 /* frees the Dynarrs if necessary. */ | 2603 /* frees the Dynarrs if necessary. */ |
2604 unbind_to (speccount); | 2604 unbind_to (speccount); |
2631 exactly complementing BUF_SET_PT() above. | 2631 exactly complementing BUF_SET_PT() above. |
2632 During the loop, it keeps track of the amount inserted. | 2632 During the loop, it keeps track of the amount inserted. |
2633 */ | 2633 */ |
2634 Charcount offset = BUF_PT (buf) - search_regs.start[sub]; | 2634 Charcount offset = BUF_PT (buf) - search_regs.start[sub]; |
2635 | 2635 |
2636 c = string_char (XSTRING (replacement), strpos); | 2636 c = XSTRING_CHAR (replacement, strpos); |
2637 if (c == '\\' && strpos < stlen - 1) | 2637 if (c == '\\' && strpos < stlen - 1) |
2638 { | 2638 { |
2639 /* XXX FIXME: replacing just a substring non-literally | 2639 /* XXX FIXME: replacing just a substring non-literally |
2640 using backslash refs to the match looks dangerous. But | 2640 using backslash refs to the match looks dangerous. But |
2641 <15366.18513.698042.156573@ns.caldera.de> from Torsten Duwe | 2641 <15366.18513.698042.156573@ns.caldera.de> from Torsten Duwe |
2642 <duwe@caldera.de> claims Finsert_buffer_substring already | 2642 <duwe@caldera.de> claims Finsert_buffer_substring already |
2643 handles this correctly. | 2643 handles this correctly. |
2644 */ | 2644 */ |
2645 c = string_char (XSTRING (replacement), ++strpos); | 2645 c = XSTRING_CHAR (replacement, ++strpos); |
2646 if (c == '&') | 2646 if (c == '&') |
2647 Finsert_buffer_substring | 2647 Finsert_buffer_substring |
2648 (buffer, | 2648 (buffer, |
2649 make_int (search_regs.start[0] + offset), | 2649 make_int (search_regs.start[0] + offset), |
2650 make_int (search_regs.end[0] + offset)); | 2650 make_int (search_regs.end[0] + offset)); |
2913 if (MARKERP (marker)) | 2913 if (MARKERP (marker)) |
2914 { | 2914 { |
2915 if (XMARKER (marker)->buffer == 0) | 2915 if (XMARKER (marker)->buffer == 0) |
2916 marker = Qzero; | 2916 marker = Qzero; |
2917 else | 2917 else |
2918 XSETBUFFER (last_thing_searched, XMARKER (marker)->buffer); | 2918 last_thing_searched = wrap_buffer (XMARKER (marker)->buffer); |
2919 } | 2919 } |
2920 | 2920 |
2921 CHECK_INT_COERCE_MARKER (marker); | 2921 CHECK_INT_COERCE_MARKER (marker); |
2922 search_regs.start[i] = XINT (marker); | 2922 search_regs.start[i] = XINT (marker); |
2923 list = Fcdr (list); | 2923 list = Fcdr (list); |