comparison src/abbrev.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 /* Primitives for word-abbrev mode. 1 /* Primitives for word-abbrev mode.
2 Copyright (C) 1985, 1986, 1992, 1993 Free Software Foundation, Inc. 2 Copyright (C) 1985, 1986, 1992, 1993 Free Software Foundation, Inc.
3 Copyright (C) 2002 Ben Wing.
3 4
4 This file is part of XEmacs. 5 This file is part of XEmacs.
5 6
6 XEmacs is free software; you can redistribute it and/or modify it 7 XEmacs is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by the 8 under the terms of the GNU General Public License as published by the
90 { 91 {
91 struct abbrev_match_mapper_closure *closure = 92 struct abbrev_match_mapper_closure *closure =
92 (struct abbrev_match_mapper_closure *)arg; 93 (struct abbrev_match_mapper_closure *)arg;
93 Charcount abbrev_length; 94 Charcount abbrev_length;
94 Lisp_Symbol *sym = XSYMBOL (symbol); 95 Lisp_Symbol *sym = XSYMBOL (symbol);
95 Lisp_String *abbrev; 96 Lisp_Object abbrev;
96 97
97 /* symbol_value should be OK here, because abbrevs are not expected 98 /* symbol_value should be OK here, because abbrevs are not expected
98 to contain any SYMBOL_MAGIC stuff. */ 99 to contain any SYMBOL_MAGIC stuff. */
99 if (UNBOUNDP (symbol_value (sym)) || NILP (symbol_value (sym))) 100 if (UNBOUNDP (symbol_value (sym)) || NILP (symbol_value (sym)))
100 { 101 {
101 /* The symbol value of nil means that abbrev got undefined. */ 102 /* The symbol value of nil means that abbrev got undefined. */
102 return 0; 103 return 0;
103 } 104 }
104 abbrev = symbol_name (sym); 105 abbrev = symbol_name (sym);
105 abbrev_length = string_char_length (abbrev); 106 abbrev_length = XSTRING_CHAR_LENGTH (abbrev);
106 if (abbrev_length > closure->maxlen) 107 if (abbrev_length > closure->maxlen)
107 { 108 {
108 /* This abbrev is too large -- it wouldn't fit. */ 109 /* This abbrev is too large -- it wouldn't fit. */
109 return 0; 110 return 0;
110 } 111 }
111 /* If `bar' is an abbrev, and a user presses `fubar<SPC>', we don't 112 /* If `bar' is an abbrev, and a user presses `fubar<SPC>', we don't
112 normally want to expand it. OTOH, if the abbrev begins with 113 normally want to expand it. OTOH, if the abbrev begins with
113 non-word syntax (e.g. `#if'), it is OK to abbreviate it anywhere. */ 114 non-word syntax (e.g. `#if'), it is OK to abbreviate it anywhere. */
114 if (abbrev_length < closure->maxlen && abbrev_length > 0 115 if (abbrev_length < closure->maxlen && abbrev_length > 0
115 && (WORD_SYNTAX_P (closure->chartab, string_char (abbrev, 0))) 116 && (WORD_SYNTAX_P (closure->chartab, XSTRING_CHAR (abbrev, 0)))
116 && (WORD_SYNTAX_P (closure->chartab, 117 && (WORD_SYNTAX_P (closure->chartab,
117 BUF_FETCH_CHAR (closure->buf, 118 BUF_FETCH_CHAR (closure->buf,
118 closure->point - (abbrev_length + 1))))) 119 closure->point -
120 (abbrev_length + 1)))))
119 { 121 {
120 return 0; 122 return 0;
121 } 123 }
122 /* Match abbreviation string against buffer text. */ 124 /* Match abbreviation string against buffer text. */
123 { 125 {
124 Intbyte *ptr = string_data (abbrev); 126 Intbyte *ptr = XSTRING_DATA (abbrev);
125 Charcount idx; 127 Charcount idx;
126 128
127 for (idx = 0; idx < abbrev_length; idx++) 129 for (idx = 0; idx < abbrev_length; idx++)
128 { 130 {
129 if (DOWNCASE (closure->buf, 131 if (DOWNCASE (closure->buf,
283 Charbpos abbrev_start; /* position of abbreviation beginning */ 285 Charbpos abbrev_start; /* position of abbreviation beginning */
284 286
285 Lisp_Symbol *(*fun) (struct buffer *, Lisp_Object); 287 Lisp_Symbol *(*fun) (struct buffer *, Lisp_Object);
286 288
287 Lisp_Symbol *abbrev_symbol; 289 Lisp_Symbol *abbrev_symbol;
288 Lisp_String *abbrev_string;
289 Lisp_Object expansion, count, hook; 290 Lisp_Object expansion, count, hook;
290 Charcount abbrev_length; 291 Charcount abbrev_length;
291 int lccount, uccount; 292 int lccount, uccount;
292 293
293 run_hook (Qpre_abbrev_expand_hook); 294 run_hook (Qpre_abbrev_expand_hook);
326 point = BUF_PT (buf); 327 point = BUF_PT (buf);
327 328
328 /* OK, we're out of the must-be-fast part. An abbreviation matched. 329 /* OK, we're out of the must-be-fast part. An abbreviation matched.
329 Now find the parameters, insert the expansion, and make it all 330 Now find the parameters, insert the expansion, and make it all
330 look pretty. */ 331 look pretty. */
331 abbrev_string = symbol_name (abbrev_symbol); 332 abbrev_length = XSTRING_CHAR_LENGTH (symbol_name (abbrev_symbol));
332 abbrev_length = string_char_length (abbrev_string);
333 abbrev_start = point - abbrev_length; 333 abbrev_start = point - abbrev_length;
334 334
335 expansion = symbol_value (abbrev_symbol); 335 expansion = symbol_value (abbrev_symbol);
336 CHECK_STRING (expansion); 336 CHECK_STRING (expansion);
337 337
344 344
345 /* Count the case in the original text. */ 345 /* Count the case in the original text. */
346 abbrev_count_case (buf, abbrev_start, abbrev_length, &lccount, &uccount); 346 abbrev_count_case (buf, abbrev_start, abbrev_length, &lccount, &uccount);
347 347
348 /* Remember the last abbrev text, location, etc. */ 348 /* Remember the last abbrev text, location, etc. */
349 XSETSYMBOL (Vlast_abbrev, abbrev_symbol); 349 Vlast_abbrev = wrap_symbol (abbrev_symbol);
350 Vlast_abbrev_text = 350 Vlast_abbrev_text =
351 make_string_from_buffer (buf, abbrev_start, abbrev_length); 351 make_string_from_buffer (buf, abbrev_start, abbrev_length);
352 last_abbrev_location = abbrev_start; 352 last_abbrev_location = abbrev_start;
353 353
354 /* Add an undo boundary, in case we are doing this for a 354 /* Add an undo boundary, in case we are doing this for a