Some years ago (2005) there was a discussion on the XEmacs and SXEmacs
lists about extent glyphs for zero-length extents, and how they should
be ordered when you have multiple "adjacent" zero-length extents.
For some background, see...
http://www.sxemacs.org/list-archives/html/sxemacs-devel/2005-06/msg00000....
http://www.sxemacs.org/list-archives/html/sxemacs-devel/2005-06/msg00008....
http://www.sxemacs.org/list-archives/html/sxemacs-devel/2005-06/msg00029....
I didn't have much success in finding the relevant threads on the XEmacs
lists. So I'm not sure what became of the issue in XEmacs land. My gut
tells me that it simply got forgotten about.
Now, because of this "flaw" in XEmacs extents, and because it has been
this way for eons, it's really not surprising that there is code out
there that breaks when given fixed extents to work with. :-)
http://www.sxemacs.org/~steve/bugs/bug-94_movie_1.avi is a short AVI
which graphically demonstrates the problem that this patch addresses.
In the video, XEmacs 21.5 is on the left, and SXEmacs is on the right.
Norbert, I don't have commit access to XEmacs CVS anymore (think my key
is fubar'd), so can you please commit this for me. Thanks!
slider patch:
ChangeLog files diff command: cvs -q diff -U 0
Files affected: ChangeLog
Source files diff command: cvs -q diff -uN
Files affected: slider.el
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/slider/ChangeLog,v
retrieving revision 1.12
diff -u -p -U0 -r1.12 ChangeLog
--- ChangeLog 2003/10/31 17:08:09 1.12
+++ ChangeLog 2008/11/13 08:40:57
@@ -0,0 +1,7 @@
+2008-11-13 Steve Youngs <steve(a)sxemacs.org>
+
+ * slider.el: Add compatibility code for SXEmacs.
+ (slider-new): Use it.
+ (slider-set): Use it.
+ (slider-activate-arrow-or-bar): Use it.
+
Index: slider.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/slider/slider.el,v
retrieving revision 1.2
diff -u -p -u -r1.2 slider.el
--- slider.el 2000/10/06 08:44:47 1.2
+++ slider.el 2008/11/13 08:40:54
@@ -23,8 +23,24 @@
;; Code:
;;
-;;; First of all we'll define the needed variables.
+;;; Compatibility.
+
+;; There is a bug in XEmacs extents where the order of extent glyphs
+;; can get messed up when you have zero-length extents. SXEmacs has
+;; this fixed, but because it is such a long-standing bug code like
+;; this was written against the "buggy" extent api and so "breaks"
+;; when used with non-buggy extents. Hence this compatibility snippet
+;; here. --SY.
+(eval-and-compile
+ (if (featurep 'sxemacs)
+ (progn
+ (fset #'slider-set-glyph #'set-extent-end-glyph)
+ (fset #'slider-glyph #'extent-end-glyph))
+ (fset #'slider-set-glyph #'set-extent-begin-glyph)
+ (fset #'slider-glyph #'extent-begin-glyph)))
+
+;;; First of all we'll define the needed variables.
(defconst slider-bar-elem-width 4)
@@ -64,7 +80,7 @@
(insert-string " ")
(goto-char (1- (point)))
- (setq slider (make-extent (1- (point)) (1+ (point))))
+ (setq slider (make-extent (point) (point)))
(set-extent-property slider 'keymap slider-bar-keymap)
(set-extent-property slider 'read-only read-only)
(set-extent-property slider 'start-open t)
@@ -113,16 +129,16 @@
(set-extent-property tmp 'slider-down slider-right-down)
;; initializing the display:
;; left arrow glyph:
- (set-extent-begin-glyph (aref left-vector 0) slider-left-up)
+ (slider-set-glyph (aref left-vector 0) slider-left-up)
;; the left bar is invisible, so make the knob glyph:
- (set-extent-begin-glyph knob slider-knob)
+ (slider-set-glyph knob slider-knob)
;; the right part of the bar is fully visible
(let ((count 0))
(while (< count number-of-bars)
- (set-extent-begin-glyph (aref right-vector count) slider-element)
+ (slider-set-glyph (aref right-vector count) slider-element)
(setq count (1+ count))))
;; the right arrow glyph
- (set-extent-begin-glyph (aref right-vector number-of-bars) slider-right-up)
+ (slider-set-glyph (aref right-vector number-of-bars) slider-right-up)
;; put some needed information into the knob's properties.
(set-extent-property knob 'slider-action 'slider-drag-knob)
(set-extent-keymap knob slider-knob-keymap)
@@ -154,26 +170,26 @@
abs-value min max)
(let ((count 1))
(while (<= count step)
- (set-extent-begin-glyph
+ (slider-set-glyph
(aref (extent-property slider 'slider-left)
count)
slider-element)
(setq count (1+ count)))
(while (<= count length)
- (set-extent-begin-glyph
+ (slider-set-glyph
(aref (extent-property slider 'slider-left)
count)
nil)
(setq count (1+ count))))
(let ((count 0))
(while (< count step)
- (set-extent-begin-glyph
+ (slider-set-glyph
(aref (extent-property slider 'slider-right)
count)
nil)
(setq count (1+ count)))
(while (< count length)
- (set-extent-begin-glyph
+ (slider-set-glyph
(aref (extent-property slider 'slider-right)
count)
slider-element)
@@ -253,8 +269,8 @@
up-glyph down-glyph)
;; make the glyph look pressed
(cond ((setq down-glyph (extent-property extent 'slider-down))
- (setq up-glyph (extent-begin-glyph extent))
- (set-extent-begin-glyph extent down-glyph)))
+ (setq up-glyph (slider-glyph extent))
+ (slider-set-glyph extent down-glyph)))
(while mouse-down
(if (input-pending-p)
(setq event (next-event event))
@@ -263,7 +279,7 @@
(if (button-release-event-p event)
(setq mouse-down nil)))
;; make the glyph look released
- (if down-glyph (set-extent-begin-glyph extent up-glyph))))
+ (if down-glyph (slider-set-glyph extent up-glyph))))
(defun slider-activate-knob (event)
(interactive "e")
--
|---<Steve Youngs>---------------<GnuPG KeyID: A94B3003>---|
| SXEmacs - The only _______ you'll ever need. |
| Fill in the blank, yes, it's THAT good! |
|------------------------------------<steve(a)sxemacs.org>---|
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches