Mercurial > emacs
changeset 20529:4b3fc2cda7fc
(describe_abbrev): Return void.
(write_abbrev): Return void.
(Fexpand_abbrev): Scan in bytepos along with charpos.
(Funexpand_abbrev): Use bytepos to delete the expansion.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Wed, 31 Dec 1997 05:05:32 +0000 |
parents | 4ffe5887d8c6 |
children | 88d7475304df |
files | src/abbrev.c |
diffstat | 1 files changed, 27 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/abbrev.c Wed Dec 31 04:44:31 1997 +0000 +++ b/src/abbrev.c Wed Dec 31 05:05:32 1997 +0000 @@ -218,7 +218,8 @@ () { register char *buffer, *p; - register int wordstart, wordend, idx; + int wordstart, wordend; + register int wordstart_byte, wordend_byte, idx; int whitecnt; int uccount = 0, lccount = 0; register Lisp_Object sym; @@ -243,8 +244,12 @@ Vabbrev_start_location = Qnil; if (wordstart < BEGV || wordstart > ZV) wordstart = 0; - if (wordstart && wordstart != ZV && FETCH_BYTE (wordstart) == '-') - del_range (wordstart, wordstart + 1); + if (wordstart && wordstart != ZV) + { + wordstart_byte = CHAR_TO_BYTE (wordstart); + if (FETCH_BYTE (wordstart_byte) == '-') + del_range (wordstart, wordstart + 1); + } } if (!wordstart) wordstart = scan_words (PT, -1); @@ -252,20 +257,24 @@ if (!wordstart) return value; + wordstart_byte = CHAR_TO_BYTE (wordstart); wordend = scan_words (wordstart, 1); if (!wordend) return value; if (wordend > PT) wordend = PT; + + wordend_byte = CHAR_TO_BYTE (wordend); whitecnt = PT - wordend; if (wordend <= wordstart) return value; - p = buffer = (char *) alloca (wordend - wordstart); + p = buffer = (char *) alloca (wordend_byte - wordstart_byte); - for (idx = wordstart; idx < wordend; idx++) + for (idx = wordstart_byte; idx < wordend_byte; idx++) { + /* ??? This loop needs to go by characters! */ register int c = FETCH_BYTE (idx); if (UPPERCASEP (c)) c = DOWNCASE (c), uccount++; @@ -310,7 +319,7 @@ { SET_PT (wordstart); - del_range (wordstart, wordend); + del_range_both (wordstart, wordend, wordstart_byte, wordend_byte, 1); insert_from_string (expansion, 0, XSTRING (expansion)->size, 1); SET_PT (PT + whitecnt); @@ -335,14 +344,15 @@ else if (uccount) { /* Abbrev included some caps. Cap first initial of expansion */ - int pos = wordstart; + int pos = wordstart_byte; /* Find the initial. */ - while (pos < PT - && SYNTAX (*BUF_CHAR_ADDRESS (current_buffer, pos)) != Sword) + while (pos < PT_BYTE + && SYNTAX (*BUF_BYTE_ADDRESS (current_buffer, pos)) != Sword) pos++; /* Change just that. */ + pos = BYTE_TO_CHAR (pos); Fupcase_initials_region (make_number (pos), make_number (pos + 1)); } } @@ -371,22 +381,25 @@ /* This isn't correct if Vlast_abbrev->function was used to do the expansion */ Lisp_Object val; + int zv_before; + val = XSYMBOL (Vlast_abbrev)->value; if (!STRINGP (val)) error ("value of abbrev-symbol must be a string"); - adjust = XSTRING (val)->size; - del_range (PT, PT + adjust); + zv_before = ZV; + del_range_byte (PT_BYTE, PT_BYTE + XSTRING (val)->size, 1); /* Don't inherit properties here; just copy from old contents. */ insert_from_string (Vlast_abbrev_text, 0, XSTRING (Vlast_abbrev_text)->size, 0); - adjust -= XSTRING (Vlast_abbrev_text)->size; Vlast_abbrev_text = Qnil; + /* Total number of characters deleted. */ + adjust = ZV - zv_before; } SET_PT (last_abbrev_point < opoint ? opoint - adjust : opoint); return Qnil; } -static +static void write_abbrev (sym, stream) Lisp_Object sym, stream; { @@ -405,7 +418,7 @@ insert (")\n", 2); } -static +static void describe_abbrev (sym, stream) Lisp_Object sym, stream; {