? cpu.patch ? crsh.patch ? cyg.patch ? dynsize.patch ? munge.awk ? Root ? tabfixagain.patch ? tmp ? ToDo ? usegut.patch ? wingeom.patch ? etc/anim.gif ? etc/ChangeLog ? lib-src/patch.exe.core ? lib-src/run.res ? lisp/.emacs_andyp ? lisp/fl.el ? lisp/font-lock.el.dist ? lisp/font-lock.el.new ? lisp/mule ? lisp/prim ? lisp/wid-edit.el.new ? lwlib/tmp ? lwlib/xlwtabs.c.new ? man/internals/patch.exe.core ? modules/ChangeLog ? nt/Installation ? nt/obj ? nt/puresize-adjust.h ? nt/xemacs.mak+ ? nt/xemacs95.mak ? nt/inc/tmp ? src/.emacs_andyp ? src/cc1.exe.stackdump ? src/dialog-msw.c.new ? src/dist ? src/emacs.c.mine ? src/emacs.c.new ? src/fc ? src/glyphs-x.c- ? src/l ? src/lay.tgz ? src/mkdc ? src/new ? src/Readme.txt ? src/redisplay-output.c.new ? src/symsinit.h.mine ? src/t.c ? src/TDOC ? src/temacs-lineno.plog ? src/temacs.exe.core ? src/temacs.exe.stackdump ? src/temacs.plog ? src/tstdoc ? src/weblogic.log ? src/xemacs.exe.stackdump ? src/s/.emacs_andyp ? src/s/mingw32.h.new ? src/s/mn.patch ? src/s/wn.patch Index: lisp/font-lock.el =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/lisp/font-lock.el,v retrieving revision 1.7.2.10 diff -u -r1.7.2.10 font-lock.el --- lisp/font-lock.el 2000/02/19 11:52:58 1.7.2.10 +++ lisp/font-lock.el 2000/02/26 21:18:28 @@ -4,7 +4,7 @@ ;; Copyright (C) 1995 Amdahl Corporation. ;; Copyright (C) 1996 Ben Wing. -;; Author: Jamie Zawinski , for the LISPM Preservation Society. +;; Author: Jamie Zawinski , for the LISPM Preservation Society. ;; Minimally merged with FSF 19.34 by Barry Warsaw ;; Then (partially) synched with FSF 19.30, leading to: ;; Next Author: RMS @@ -611,11 +611,7 @@ '((((class color) (background dark)) (:foreground "light coral")) (((class color) (background light)) (:foreground "green4")) (t (:bold t))) - "Font Lock mode face used to highlight documentation strings. -This is currently supported only in Lisp-like modes, which are those -with \"lisp\" or \"scheme\" in their name. You can explicitly make -a mode Lisp-like by putting a non-nil `font-lock-lisp-like' property -on the major mode's symbol." + "Font Lock mode face used to highlight documentation strings." :group 'font-lock-faces) (defface font-lock-keyword-face @@ -834,8 +830,9 @@ ((or (null maximum-size) (<= (buffer-size) maximum-size)) (font-lock-fontify-buffer)) (font-lock-verbose - (lmessage 'command "Fontifying %s... buffer too big." - (buffer-name))))) + (lprogress 'font-lock + "Fontifying %s... buffer too big." 'abort + (buffer-name))))) (font-lock-fontified (setq font-lock-fontified nil) (remove-hook 'before-revert-hook 'font-lock-revert-setup t) @@ -1004,7 +1001,7 @@ (font-lock-mode 0))) (set (make-local-variable 'font-lock-fontified) t) (when (and aborted font-lock-verbose) - (lmessage 'command "Fontifying %s... aborted." (buffer-name)))) + (lprogress 'font-lock "Fontifying %s... aborted." 'abort (buffer-name)))) (run-hooks 'font-lock-after-fontify-buffer-hook)) (defun font-lock-default-unfontify-buffer () @@ -1043,7 +1040,7 @@ (defun font-lock-default-unfontify-region (beg end &optional maybe-loudly) (when (and maybe-loudly font-lock-verbose (>= (- end beg) font-lock-message-threshold)) - (lmessage 'progress "Fontifying %s..." (buffer-name))) + (lprogress 'font-lock "Fontifying %s..." 0 (buffer-name))) (let ((modified (buffer-modified-p)) (buffer-undo-list t) (inhibit-read-only t) buffer-file-name buffer-file-truename) @@ -1288,16 +1285,6 @@ ; ;; Clean up. ; (and prev (remove-text-properties prev end '(face nil))))) -(defun font-lock-lisp-like (mode) - ;; Note: (or (get mode 'font-lock-lisp-like) (string-match ...)) is - ;; not enough because the property needs to be able to specify a nil - ;; value. - (if (plist-member (symbol-plist mode) 'font-lock-lisp-like) - (get mode 'font-lock-lisp-like) - ;; If the property is not specified, guess. Similar logic exists - ;; in add-log, but I think this encompasses more modes. - (string-match "lisp\\|scheme" (symbol-name mode)))) - (defun font-lock-fontify-syntactically-region (start end &optional loudly) "Put proper face on each string and comment between START and END. START should be at the beginning of a line." @@ -1305,29 +1292,26 @@ nil (when (and font-lock-verbose (>= (- end start) font-lock-message-threshold)) - (lmessage 'progress "Fontifying %s... (syntactically...)" - (buffer-name))) + (lprogress 'font-lock "Fontifying %s... (syntactically)" 5 + (buffer-name))) (font-lock-unfontify-region start end loudly) (goto-char start) (if (> end (point-max)) (setq end (point-max))) - (let ((lisp-like (font-lock-lisp-like major-mode))) - (syntactically-sectionize - #'(lambda (s e context depth) - (let (face) - (cond ((eq context 'string) - (setq face - ;; #### It would be nice if we handled - ;; Python and other non-Lisp languages with - ;; docstrings correctly. - (if (and lisp-like (= depth 1)) - ;; really we should only use this if - ;; in position 3 depth 1, but that's - ;; too expensive to compute. - 'font-lock-doc-string-face - 'font-lock-string-face))) - ((or (eq context 'comment) - (eq context 'block-comment)) - (setq face 'font-lock-comment-face) + (syntactically-sectionize + #'(lambda (s e context depth) + (let (face) + (cond ((eq context 'string) + ;;#### Should only do this is Lisp-like modes! + (setq face + (if (= depth 1) + ;; really we should only use this if + ;; in position 3 depth 1, but that's + ;; too expensive to compute. + 'font-lock-doc-string-face + 'font-lock-string-face))) + ((or (eq context 'comment) + (eq context 'block-comment)) + (setq face 'font-lock-comment-face) ; ;; Don't fontify whitespace at the beginning of lines; ; ;; otherwise comment blocks may not line up with code. ; ;; (This is sometimes a good idea, sometimes not; in any @@ -1340,9 +1324,9 @@ ; (skip-chars-forward " \t\n") ; (setq s (point))) )) - (font-lock-set-face s e face))) - start end) - ))) + (font-lock-set-face s e face))) + start end) + )) ;;; Additional text property functions. @@ -1493,14 +1477,13 @@ (keywords (cdr (if (eq (car-safe font-lock-keywords) t) font-lock-keywords (font-lock-compile-keywords)))) - (bufname (buffer-name)) (count 0) + (bufname (buffer-name)) (count 5) keyword matcher highlights) ;; ;; Fontify each item in `font-lock-keywords' from `start' to `end'. (while keywords - (when loudly (lmessage 'progress "Fontifying %s... (regexps..%s)" - bufname - (make-string (setq count (1+ count)) ?.))) + (when loudly (lprogress 'font-lock "Fontifying %s... (regexps)" + (setq count (+ count 5)) bufname)) ;; ;; Find an occurrence of `matcher' from `start' to `end'. (setq keyword (car keywords) matcher (car keyword)) @@ -1523,7 +1506,7 @@ (font-lock-fontify-anchored-keywords (car highlights) end)) (setq highlights (cdr highlights)))) (setq keywords (cdr keywords)))) - (if loudly (lmessage 'progress "Fontifying %s... done." (buffer-name))))) + (if loudly (lprogress 'font-lock "Fontifying %s... " 100 (buffer-name))))) ;; Various functions. @@ -1548,17 +1531,26 @@ (lazy-lock-after-fontify-buffer)))) ;; If the buffer is about to be reverted, it won't be fontified afterward. -(defun font-lock-revert-setup () - (setq font-lock-fontified nil)) +;(defun font-lock-revert-setup () +; (setq font-lock-fontified nil)) ;; If the buffer has just been reverted, normally that turns off ;; Font Lock mode. So turn the mode back on if necessary. ;; sb 1999-03-03 -- The above comment no longer appears to be operative as ;; the first call to normal-mode *will* restore the font-lock state and ;; this call forces a second font-locking to occur when reverting a buffer, -;; which is wasteful at best. -;(defalias 'font-lock-revert-cleanup 'turn-on-font-lock) -(defun font-lock-revert-cleanup ()) +;; which is wasteful at best. +;;(defun font-lock-revert-cleanup ()) + +;; 12-10-99. This still does not work right, I think +;; after change functions will still get us. The simplest thing to do +;; is unconditionally turn-off font-lock before revert (and thus nuke +;; all hooks) and then turn it on again afterwards. This also happens +;; to be much faster because fontifying from scratch is better than +;; trying to do incremental changes for the whole buffer. + +(defalias 'font-lock-revert-cleanup 'turn-on-font-lock) +(defalias 'font-lock-revert-setup 'turn-off-font-lock) ;; Various functions. Index: lisp/gutter-items.el =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/lisp/Attic/gutter-items.el,v retrieving revision 1.1.2.30 diff -u -r1.1.2.30 gutter-items.el --- lisp/gutter-items.el 2000/02/25 08:11:35 1.1.2.30 +++ lisp/gutter-items.el 2000/02/26 21:18:38 @@ -1,7 +1,7 @@ ;;; gutter-items.el --- Gutter content for XEmacs. ;; Copyright (C) 1999 Free Software Foundation, Inc. -;; Copyright (C) 1999 Andy Piper. +;; Copyright (C) 1999, 2000 Andy Piper. ;; Maintainer: XEmacs Development Team ;; Keywords: frames, extensions, internal, dumped @@ -59,6 +59,57 @@ (set-default-gutter-position val) (setq default-gutter-position val) (when gutter-buffers-tab (update-tab-in-gutter)))) + +;;; Gutter helper functions + +(defun set-gutter-element (gutter-specifier prop val &optional locale tag-set) + "Set GUTTER-SPECIFIER gutter element PROP to VAL in optional LOCALE. +This is a convenience function for setting gutter elements." + (let ((spec-list (specifier-spec-list gutter-specifier locale tag-set))) + (if spec-list + (add-spec-list-to-specifier + gutter-specifier + (mapcar #'(lambda (spec) + (setcdr (car (cdr spec)) + (plist-put (cdr (car (cdr spec))) + prop val)) + spec) spec-list) + 'remove-all) + (set-specifier gutter-specifier (list prop val) locale tag-set)))) + +(defun remove-gutter-element (gutter-specifier prop &optional locale tag-set) + "Remove gutter element PROP from GUTTER-SPECIFIER in optional LOCALE. +This is a convenience function for removing gutter elements." + (let ((spec-list (specifier-spec-list gutter-specifier locale tag-set))) + (when spec-list + (add-spec-list-to-specifier + gutter-specifier + (mapcar #'(lambda (spec) + (setcdr (car (cdr spec)) + (plist-remprop (cdr (car (cdr spec))) + prop)) + spec) spec-list) + 'remove-all)))) + +(defun set-gutter-element-visible-p (gutter-specifier + prop &optional visible-p + locale tag-set) + "Make gutter element PROP VISIBLE-P for GUTTER-SPECIFIER in optional LOCALE. +This is a convenience function for hiding and showing gutter elements." + (let ((spec-list (specifier-spec-list gutter-specifier locale tag-set))) + (cond (spec-list + (add-spec-list-to-specifier + gutter-specifier + (mapcar #'(lambda (spec) + (setcdr (car (cdr spec)) + (if visible-p + (cons prop (cdr (car (cdr spec)))) + (delq prop (cdr (car (cdr spec)))))) + spec) spec-list) + 'remove-all)) + (visible-p + (set-specifier gutter-specifier (list prop) locale tag-set)) + (t nil)))) ;;; The Buffers tab Index: src/device-msw.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/device-msw.c,v retrieving revision 1.20.2.13 diff -u -r1.20.2.13 device-msw.c --- src/device-msw.c 2000/02/24 02:32:56 1.20.2.13 +++ src/device-msw.c 2000/02/26 21:18:43 @@ -40,7 +40,12 @@ #include "frame.h" #include "sysdep.h" +#if (defined (__CYGWIN32__) || defined(__MINGW32__)) && \ + CYGWIN_VERSION_DLL_MAJOR < 21 +extern BOOL WINAPI DdeFreeStringHandle(DWORD,HSZ); +#else #include +#endif /* win32 DDE management library globals */ #ifdef HAVE_DRAGNDROP Index: src/gui-msw.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/Attic/gui-msw.c,v retrieving revision 1.1.2.6 diff -u -r1.1.2.6 gui-msw.c --- src/gui-msw.c 2000/02/21 21:53:31 1.1.2.6 +++ src/gui-msw.c 2000/02/26 21:18:44 @@ -137,9 +137,9 @@ if (ret > 32) return Qt; - if (ret == ERROR_FILE_NOT_FOUND || ret == SE_ERR_FNF) + if (ret == ERROR_FILE_NOT_FOUND) signal_simple_error ("file not found", document); - else if (ret == ERROR_PATH_NOT_FOUND || ret == SE_ERR_PNF) + else if (ret == ERROR_PATH_NOT_FOUND) signal_simple_error ("path not found", current_dir); else if (ret == ERROR_BAD_FORMAT) signal_simple_error ("bad executable format", document); Index: src/gutter.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/Attic/gutter.c,v retrieving revision 1.1.2.19 diff -u -r1.1.2.19 gutter.c --- src/gutter.c 2000/02/17 14:16:45 1.1.2.19 +++ src/gutter.c 2000/02/26 21:18:47 @@ -1,5 +1,5 @@ /* Gutter implementation. - Copyright (C) 1999 Andy Piper. + Copyright (C) 1999, 2000 Andy Piper. This file is part of XEmacs. @@ -47,6 +47,7 @@ Lisp_Object Vdefault_gutter_position; Lisp_Object Qgutter_size; +Lisp_Object Qgutter_visible; #define SET_GUTTER_WAS_VISIBLE_FLAG(frame, pos, flag) \ do { \ @@ -214,6 +215,37 @@ } } +/* Convert the gutter specifier into something we can actually + display. */ +static Lisp_Object construct_window_gutter_spec (struct window* w, + enum gutter_pos pos) +{ + Lisp_Object rest, *args; + int nargs = 0; + Lisp_Object gutter = RAW_WINDOW_GUTTER (w, pos); + + if (STRINGP (gutter) || NILP (gutter)) + return gutter; + + GET_LIST_LENGTH (gutter, nargs); + args = alloca_array (Lisp_Object, nargs >> 1); + nargs = 0; + + for (rest = gutter; !NILP (rest); rest = XCDR (XCDR (rest))) + { + /* We only put things in the real gutter that are declared to be + visible. */ + if (!CONSP (WINDOW_GUTTER_VISIBLE (w, pos)) + || + !NILP (Fmemq (XCAR (rest), WINDOW_GUTTER_VISIBLE (w, pos)))) + { + args [nargs++] = XCAR (XCDR (rest)); + } + } + + return Fconcat (nargs, args); +} + static void output_gutter (struct frame *f, enum gutter_pos pos) { @@ -292,7 +324,7 @@ is no reasonable metric to use */ assert (pos == TOP_GUTTER || pos == BOTTOM_GUTTER); /* degenerate case */ - if (NILP (WINDOW_GUTTER (w, pos)) + if (NILP (RAW_WINDOW_GUTTER (w, pos)) || !FRAME_VISIBLE_P (f) || @@ -558,9 +590,22 @@ { if (NILP (instantiator)) return; + + /* Must be a string or a plist. */ + if (!STRINGP (instantiator) && NILP (Fvalid_plist_p (instantiator))) + signal_simple_error ("Gutter spec must be string, plist or nil", instantiator); if (!STRINGP (instantiator)) - signal_simple_error ("Gutter spec must be string or nil", instantiator); + { + Lisp_Object rest; + + for (rest = instantiator; !NILP (rest); rest = XCDR (XCDR (rest))) + { + if (!SYMBOLP (XCAR (rest)) + || !STRINGP (XCAR (XCDR (rest)))) + signal_simple_error ("Gutter plist spec must contain strings", instantiator); + } + } } DEFUN ("gutter-specifier-p", Fgutter_specifier_p, 1, 1, 0, /* @@ -570,9 +615,9 @@ `left-gutter', `right-gutter', and `bottom-gutter' are always gutter specifiers. -Valid gutter instantiators are called "gutter descriptors" -and are lists of vectors. See `default-gutter' for a description -of the exact format. +Valid gutter instantiators are called "gutter descriptors" and are +either strings or property-lists of strings. See `default-gutter' for +a description of the exact format. */ (object)) { @@ -598,7 +643,9 @@ enum gutter_pos pos; GUTTER_POS_LOOP (pos) { + w->real_gutter[pos] = construct_window_gutter_spec (w, pos); w->real_gutter_size[pos] = w->gutter_size[pos]; + if (EQ (w->real_gutter_size[pos], Qautodetect) && !NILP (w->gutter_visible_p[pos])) { @@ -606,6 +653,7 @@ } } MARK_GUTTER_CHANGED; + MARK_MODELINE_CHANGED; MARK_WINDOWS_CHANGED (w); } @@ -632,6 +680,7 @@ } MARK_GUTTER_CHANGED; + MARK_MODELINE_CHANGED; MARK_WINDOWS_CHANGED (w); } @@ -656,6 +705,9 @@ Lisp_Object oldval) { recompute_overlaying_specifier (Vgutter_visible_p); + /* Need to reconstruct the gutter specifier as it is affected by the + visibility. */ + recompute_overlaying_specifier (Vgutter); } @@ -675,12 +727,69 @@ DEFUN ("gutter-size-specifier-p", Fgutter_size_specifier_p, 1, 1, 0, /* Return non-nil if OBJECT is a gutter-size specifier. + +Gutter-size specifiers are used to specify the size of a gutter. The +values of the variables `default-gutter-size', `top-gutter-size', +`left-gutter-size', `right-gutter-size', and `bottom-gutter-size' are +always gutter-size specifiers. + +Valid gutter-size instantiators are either integers or the special +symbol 'autodetect. If a gutter-size is set to 'autodetect them the +size of the gutter will be adjusted to just accomodate the gutters +contents. 'autodetect only works for top and bottom gutters. */ (object)) { return GUTTER_SIZE_SPECIFIERP (object) ? Qt : Qnil; } +DECLARE_SPECIFIER_TYPE (gutter_visible); +#define GUTTER_VISIBLE_SPECIFIERP(x) SPECIFIER_TYPEP (x, gutter_visible) +DEFINE_SPECIFIER_TYPE (gutter_visible); + +static void +gutter_visible_validate (Lisp_Object instantiator) +{ + if (NILP (instantiator)) + return; + + if (!NILP (instantiator) && !EQ (instantiator, Qt) && !CONSP (instantiator)) + signal_simple_error ("Gutter visibility must be a boolean or list of symbols", + instantiator); + + if (CONSP (instantiator)) + { + Lisp_Object rest; + + EXTERNAL_LIST_LOOP (rest, instantiator) + { + if (!SYMBOLP (XCAR (rest))) + signal_simple_error ("Gutter visibility must be a boolean or list of symbols", + instantiator); + } + } +} + +DEFUN ("gutter-visible-specifier-p", Fgutter_visible_specifier_p, 1, 1, 0, /* +Return non-nil if OBJECT is a gutter-visible specifier. + +Gutter-visible specifiers are used to specify the visibility of a +gutter. The values of the variables `default-gutter-visible-p', +`top-gutter-visible-p', `left-gutter-visible-p', +`right-gutter-visible-p', and `bottom-gutter-visible-p' are always +gutter-visible specifiers. + +Valid gutter-visible instantiators are t, nil or a list of symbols. +If a gutter-visible instantiator is set to a list of symbols, and the +correspondong gutter specification is a property-list strings, then +elements of the gutter specification will only be visible if the +corresponding symbol occurs in the gutter-visible instantiator. +*/ + (object)) +{ + return GUTTER_VISIBLE_SPECIFIERP (object) ? Qt : Qnil; +} + DEFUN ("redisplay-gutter-area", Fredisplay_gutter_area, 0, 0, 0, /* Ensure that all gutters are correctly showing their gutter specifier. */ @@ -723,6 +832,7 @@ initialization. We need to recalculate autodetected gutters. */ GUTTER_POS_LOOP (pos) { + w->real_gutter[pos] = construct_window_gutter_spec (w, pos); w->real_gutter_size[pos] = w->gutter_size[pos]; if (EQ (w->gutter_size[pos], Qautodetect) && !NILP (w->gutter_visible_p[pos])) @@ -739,6 +849,7 @@ { DEFSUBR (Fgutter_specifier_p); DEFSUBR (Fgutter_size_specifier_p); + DEFSUBR (Fgutter_visible_specifier_p); DEFSUBR (Fset_default_gutter_position); DEFSUBR (Fdefault_gutter_position); DEFSUBR (Fgutter_pixel_height); @@ -746,6 +857,7 @@ DEFSUBR (Fredisplay_gutter_area); defsymbol (&Qgutter_size, "gutter-size"); + defsymbol (&Qgutter_visible, "gutter-visible"); } void @@ -761,13 +873,14 @@ specifier_type_create_gutter (void) { INITIALIZE_SPECIFIER_TYPE (gutter, "gutter", "gutter-specifier-p"); - SPECIFIER_HAS_METHOD (gutter, validate); SPECIFIER_HAS_METHOD (gutter, after_change); INITIALIZE_SPECIFIER_TYPE (gutter_size, "gutter-size", "gutter-size-specifier-p"); - SPECIFIER_HAS_METHOD (gutter_size, validate); + + INITIALIZE_SPECIFIER_TYPE (gutter_visible, "gutter-visible", "gutter-visible-specifier-p"); + SPECIFIER_HAS_METHOD (gutter_visible, validate); } void @@ -775,6 +888,7 @@ { REINITIALIZE_SPECIFIER_TYPE (gutter); REINITIALIZE_SPECIFIER_TYPE (gutter_size); + REINITIALIZE_SPECIFIER_TYPE (gutter_visible); } void @@ -815,12 +929,12 @@ using position-specific specifiers. That way, you will get sane behavior if the user changes the default gutter position. -The gutter value should be a string or nil. You can attach extents and -glyphs to the string and hence display glyphs and text in other fonts -in the gutter area. +The gutter value should be a string, a property list of strings or +nil. You can attach extents and glyphs to the string and hence display +glyphs and text in other fonts in the gutter area. If the gutter value +is a property list then the strings will be concatenated together +before being displayed. */ ); -*/ ); - Vdefault_gutter = Fmake_specifier (Qgutter); /* #### It would be even nicer if the specifier caching automatically knew about specifier fallbacks, so we didn't @@ -1143,7 +1257,7 @@ `default-gutter-visible-p' and all of the position-specific gutter visibility specifiers have a fallback value of true. */ ); - Vdefault_gutter_visible_p = Fmake_specifier (Qboolean); + Vdefault_gutter_visible_p = Fmake_specifier (Qgutter_visible); set_specifier_caching (Vdefault_gutter_visible_p, offsetof (struct window, default_gutter_visible_p), @@ -1157,11 +1271,11 @@ See `default-gutter-visible-p' for more information. */ ); - Vgutter_visible_p[TOP_GUTTER] = Fmake_specifier (Qboolean); + Vgutter_visible_p[TOP_GUTTER] = Fmake_specifier (Qgutter_visible); set_specifier_caching (Vgutter_visible_p[TOP_GUTTER], offsetof (struct window, gutter_visible_p[TOP_GUTTER]), - gutter_geometry_changed_in_window, + gutter_specs_changed, 0, 0); DEFVAR_SPECIFIER ("bottom-gutter-visible-p", @@ -1171,11 +1285,11 @@ See `default-gutter-visible-p' for more information. */ ); - Vgutter_visible_p[BOTTOM_GUTTER] = Fmake_specifier (Qboolean); + Vgutter_visible_p[BOTTOM_GUTTER] = Fmake_specifier (Qgutter_visible); set_specifier_caching (Vgutter_visible_p[BOTTOM_GUTTER], offsetof (struct window, gutter_visible_p[BOTTOM_GUTTER]), - gutter_geometry_changed_in_window, + gutter_specs_changed, 0, 0); DEFVAR_SPECIFIER ("left-gutter-visible-p", @@ -1185,11 +1299,11 @@ See `default-gutter-visible-p' for more information. */ ); - Vgutter_visible_p[LEFT_GUTTER] = Fmake_specifier (Qboolean); + Vgutter_visible_p[LEFT_GUTTER] = Fmake_specifier (Qgutter_visible); set_specifier_caching (Vgutter_visible_p[LEFT_GUTTER], offsetof (struct window, gutter_visible_p[LEFT_GUTTER]), - gutter_geometry_changed_in_window, + gutter_specs_changed, 0, 0); DEFVAR_SPECIFIER ("right-gutter-visible-p", @@ -1199,11 +1313,11 @@ See `default-gutter-visible-p' for more information. */ ); - Vgutter_visible_p[RIGHT_GUTTER] = Fmake_specifier (Qboolean); + Vgutter_visible_p[RIGHT_GUTTER] = Fmake_specifier (Qgutter_visible); set_specifier_caching (Vgutter_visible_p[RIGHT_GUTTER], offsetof (struct window, gutter_visible_p[RIGHT_GUTTER]), - gutter_geometry_changed_in_window, + gutter_specs_changed, 0, 0); /* initially, top inherits from default; this can be Index: src/gutter.h =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/Attic/gutter.h,v retrieving revision 1.1.2.8 diff -u -r1.1.2.8 gutter.h --- src/gutter.h 2000/02/23 22:29:41 1.1.2.8 +++ src/gutter.h 2000/02/26 21:18:47 @@ -64,15 +64,17 @@ void reset_gutter_display_lines (struct frame* f); #define WINDOW_GUTTER_BORDER_WIDTH(w, pos) \ -(INTP ((w)->gutter_border_width[pos]) ? XINT ((w)->gutter_border_width[pos]) : 0) + (INTP ((w)->gutter_border_width[pos]) ? XINT ((w)->gutter_border_width[pos]) : 0) #define WINDOW_GUTTER_SIZE(w, pos) \ -(INTP ((w)->gutter_size[pos]) ? XINT ((w)->gutter_size[pos]) : 0) + (INTP ((w)->gutter_size[pos]) ? XINT ((w)->gutter_size[pos]) : 0) #define WINDOW_GUTTER_SIZE_INTERNAL(w, pos) \ -(INTP ((w)->real_gutter_size[pos]) ? XINT ((w)->real_gutter_size[pos]) : 0) + (INTP ((w)->real_gutter_size[pos]) ? XINT ((w)->real_gutter_size[pos]) : 0) #define WINDOW_GUTTER_VISIBLE(w, pos) \ -((w)->gutter_visible_p[pos]) + ((w)->gutter_visible_p[pos]) #define WINDOW_GUTTER(w, pos) \ -((w)->gutter[pos]) + ((w)->real_gutter[pos]) +#define RAW_WINDOW_GUTTER(w, pos) \ + ((w)->gutter[pos]) #define WINDOW_REAL_GUTTER_SIZE(w, pos) \ (!NILP (WINDOW_GUTTER_VISIBLE (w, pos)) \ Index: src/lisp.h =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/lisp.h,v retrieving revision 1.38.2.49 diff -u -r1.38.2.49 lisp.h --- src/lisp.h 2000/02/21 23:07:05 1.38.2.49 +++ src/lisp.h 2000/02/26 21:18:57 @@ -2550,6 +2550,7 @@ EXFUN (Fchar_after, 2); EXFUN (Fchar_to_string, 1); EXFUN (Fcheck_valid_plist, 1); +EXFUN (Fvalid_plist_p, 1); EXFUN (Fclear_range_table, 1); EXFUN (Fcoding_category_list, 0); EXFUN (Fcoding_category_system, 1); Index: src/specifier.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/specifier.c,v retrieving revision 1.15.2.15 diff -u -r1.15.2.15 specifier.c --- src/specifier.c 2000/02/21 23:06:59 1.15.2.15 +++ src/specifier.c 2000/02/26 21:19:08 @@ -543,12 +543,14 @@ TYPE specifies the particular type of specifier, and should be one of the symbols 'generic, 'integer, 'boolean, 'color, 'font, 'image, -'face-boolean, or 'toolbar. +'face-boolean, 'gutter, 'gutter-size, 'gutter-visible or 'toolbar. -For more information on particular types of specifiers, see the functions -`generic-specifier-p', `integer-specifier-p', `boolean-specifier-p', -`color-specifier-p', `font-specifier-p', `image-specifier-p', -`face-boolean-specifier-p', and `toolbar-specifier-p'. +For more information on particular types of specifiers, see the +functions `generic-specifier-p', `integer-specifier-p', +`boolean-specifier-p', `color-specifier-p', `font-specifier-p', +`image-specifier-p', `face-boolean-specifier-p', `gutter-specifier-p, +`gutter-size-specifier-p, `gutter-visible-specifier-p and +`toolbar-specifier-p'. */ (type)) { Index: src/winslots.h =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/winslots.h,v retrieving revision 1.4.2.1 diff -u -r1.4.2.1 winslots.h --- src/winslots.h 1999/07/16 19:05:45 1.4.2.1 +++ src/winslots.h 2000/02/26 21:19:08 @@ -102,6 +102,10 @@ This is not a size hog because the value here is not copied, and will be shared with the specs in the specifier. */ WINDOW_SLOT_ARRAY (gutter, 4, EQUAL_WRAPPED); + /* Real (pre-calculated) gutter specification for each of the four positions. + This is not a specifier, it is calculated by the specifier change + functions. */ + WINDOW_SLOT_ARRAY (real_gutter, 4, EQUAL_WRAPPED); /* Gutter size for each of the four positions. */ WINDOW_SLOT_ARRAY (gutter_size, 4, EQUAL_WRAPPED); /* Real (pre-calculated) gutter size for each of the four positions. Index: src/s/cygwin32.h =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/s/cygwin32.h,v retrieving revision 1.14.2.13 diff -u -r1.14.2.13 cygwin32.h --- src/s/cygwin32.h 2000/02/20 23:47:25 1.14.2.13 +++ src/s/cygwin32.h 2000/02/26 21:19:10 @@ -42,26 +42,26 @@ /* cheesy way to determine cygwin version */ #ifndef NOT_C_CODE -#include -#ifdef HAVE_CYGWIN_VERSION_H -#include -#else -#ifdef SIGIO -#define CYGWIN_VERSION_DLL_MAJOR 19 -#define CYGWIN_VERSION_DLL_MINOR 0 -#define CYGWIN_B19 -#else -#define CYGWIN_VERSION_DLL_MAJOR 18 -#define CYGWIN_VERSION_DLL_MINOR 0 -#define BROKEN_CYGWIN -#endif -#endif +# include +# ifdef HAVE_CYGWIN_VERSION_H +# include +# else +# ifdef SIGIO +# define CYGWIN_VERSION_DLL_MAJOR 19 +# define CYGWIN_VERSION_DLL_MINOR 0 +# define CYGWIN_B19 +# else +# define CYGWIN_VERSION_DLL_MAJOR 18 +# define CYGWIN_VERSION_DLL_MINOR 0 +# define BROKEN_CYGWIN +# endif +# endif extern void cygwin32_win32_to_posix_path_list(const char*, char*); extern int cygwin32_win32_to_posix_path_list_buf_size(const char*); extern void cygwin32_posix_to_win32_path_list(const char*, char*); extern int cygwin32_posix_to_win32_path_list_buf_size(const char*); -#if CYGWIN_VERSION_DLL_MAJOR < 20 +# if CYGWIN_VERSION_DLL_MAJOR < 20 struct timeval; struct timezone; struct itimerval; @@ -85,28 +85,27 @@ extern int srandom( unsigned seed); extern long random(); -#define SND_ASYNC 1 -#define SND_NODEFAULT 2 -#define SND_MEMORY 4 -#define SND_FILENAME 0x2000L -#define VK_APPS 0x5D -#define SIF_TRACKPOS 0x0010 -#define ICC_BAR_CLASSES 4 -#define FW_BLACK FW_HEAVY -#define FW_ULTRABOLD FW_EXTRABOLD -#define FW_DEMIBOLD FW_SEMIBOLD -#define FW_ULTRALIGHT FW_EXTRALIGHT -#define APPCMD_FILTERINITS 0x20L -#define CBF_FAIL_SELFCONNECTIONS 0x1000 -#define CBF_SKIP_ALLNOTIFICATIONS 0x3C0000 -#define CBF_FAIL_ADVISES 0x4000 -#define CBF_FAIL_POKES 0x10000 -#define CBF_FAIL_REQUESTS 0x20000 -#define SZDDESYS_TOPIC "System" -#define JOHAB_CHARSET 130 -#define MAC_CHARSET 77 - -#endif +# define SND_ASYNC 1 +# define SND_NODEFAULT 2 +# define SND_MEMORY 4 +# define SND_FILENAME 0x2000L +# define VK_APPS 0x5D +# define SIF_TRACKPOS 0x0010 +# define ICC_BAR_CLASSES 4 +# define FW_BLACK FW_HEAVY +# define FW_ULTRABOLD FW_EXTRABOLD +# define FW_DEMIBOLD FW_SEMIBOLD +# define FW_ULTRALIGHT FW_EXTRALIGHT +# define APPCMD_FILTERINITS 0x20L +# define CBF_FAIL_SELFCONNECTIONS 0x1000 +# define CBF_SKIP_ALLNOTIFICATIONS 0x3C0000 +# define CBF_FAIL_ADVISES 0x4000 +# define CBF_FAIL_POKES 0x10000 +# define CBF_FAIL_REQUESTS 0x20000 +# define SZDDESYS_TOPIC "System" +# define JOHAB_CHARSET 130 +# define MAC_CHARSET 77 +# endif #endif #ifndef SPI_GETWHEELSCROLLLINES Index: tests/gutter-test.el =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/tests/Attic/gutter-test.el,v retrieving revision 1.1.2.2 diff -u -r1.1.2.2 gutter-test.el --- tests/gutter-test.el 1999/07/19 11:04:15 1.1.2.2 +++ tests/gutter-test.el 2000/02/26 21:19:11 @@ -1,17 +1,23 @@ -(setq str "Hello There\nHello Again") +(setq str "Hello\nAgain") +(setq str-ext (make-extent 0 1 str)) +(set-extent-property str-ext 'duplicable t) (set-extent-begin-glyph - (make-extent 0 0 str) + str-ext (make-glyph [xpm :file "../etc/xemacs-icon.xpm"])) +(setq str2 "Hello\n") +(setq str2-ext (make-extent 0 1 str2)) +(set-extent-property str2-ext 'duplicable t) (set-extent-begin-glyph - (make-extent 3 3 str) + str2-ext (make-glyph [button :width 5 :height 1 :face modeline-mousable + :callback (set-specifier bottom-gutter-visible '(str2)) :descriptor "ok" :selected t])) -(set-specifier default-gutter-height 'autodetect) -(set-specifier default-gutter-width 40) -(set-specifier default-gutter-border-width 2) -(set-specifier default-gutter str) -(set-default-gutter-position 'bottom) +(set-specifier bottom-gutter-height 'autodetect) +(set-specifier bottom-gutter-border-width 2) +(set-specifier bottom-gutter `(str ,str str2 ,str2)) +;(set-specifier bottom-gutter str) +(set-specifier bottom-gutter-visible-p '(str str2))