emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: list-colors-display: filter same adjecent colors


From: Michael Mauger
Subject: Re: list-colors-display: filter same adjecent colors
Date: Mon, 5 Apr 2004 20:08:29 -0700 (PDT)

Sorry for the delay on this -- I've been offline for a bit.

How does this version (with an expanded comment block) look?

Index: emacs/lisp/facemenu.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/facemenu.el,v
retrieving revision 1.71
diff -u -r1.71 facemenu.el
--- emacs/lisp/facemenu.el      1 Sep 2003 15:45:11 -0000       1.71
+++ emacs/lisp/facemenu.el      13 Mar 2004 21:59:20 -0000
@@ -480,9 +480,19 @@
   (when (and (null list) (> (display-color-cells) 0))
     (setq list (defined-colors))
     ;; Delete duplicate colors.
+
+    ;; Identify duplicate colors by the name rather than the color
+    ;; value.  On w32, logical colors are added to the list that might
+    ;; have the same value but have different names and meanings.  For
+    ;; eaxmple, `SystemMenuText' (the color w32 uses for the text in
+    ;; menu entries) and `SystemWindowText' (the default color w32
+    ;; uses for the text in windows and dialogs) may be the same
+    ;; display color and be adjacent in the list.  Detecting
+    ;; duplicates by name insures that both of these colors remain
+    ;; despite similar color values.
     (let ((l list))
       (while (cdr l)
-       (if (facemenu-color-equal (car l) (car (cdr l)))
+       (if (facemenu-color-name-equal (car l) (car (cdr l)))
            (setcdr l (cdr (cdr l)))
          (setq l (cdr l)))))
     (when (memq (display-visual-class) '(gray-scale pseudo-color
direct-color))
@@ -514,6 +524,22 @@
 determine the correct answer."
   (cond ((equal a b) t)
        ((equal (color-values a) (color-values b)))))
+
+(defun facemenu-color-name-equal (a b)
+  "Return t if colors A and B are the same color.
+A and B should be strings naming colors.  These names are
+downcased, stripped of spaces and the string `grey' is turned
+into `gray'.  This accomidates alternative spellings of colors
+found commonly in the list.  It returns nil if the colors differ."
+  (progn
+    (setq a (replace-regexp-in-string "grey" "gray"
+            (replace-regexp-in-string " " ""
+             (downcase a)))
+         b (replace-regexp-in-string "grey" "gray"
+            (replace-regexp-in-string " " ""
+             (downcase b))))
+
+    (equal a b)))
 
 (defun facemenu-add-face (face &optional start end)
   "Add FACE to text between START and END.


--- Eli Zaretskii <address@hidden> wrote:
> > Date: Fri, 5 Mar 2004 15:49:19 -0800 (PST)
> > From: Michael Mauger <address@hidden>
> > 
> > How does this patch look:
> 
> It's okay with me, but I'd suggest to give an explicit example in
> this comment:
> 
> > +    ;; Identify duplicate colors by the name rather than the color
> > +    ;; value.  On w32, logical colors are added to the list that
> might
> > +    ;; have the same value but have different names and meanings.
> > +    ;; Detecting duplicates by name insures that all of these
> logical
> > +    ;; colors remain despite similar color values.
> 
> I'd mention the special ``system'' colors and why they are important,
> just so people could see a specific example.
> 
> Thanks.


__________________________________
Do you Yahoo!?
Yahoo! Small Business $15K Web Design Giveaway 
http://promotions.yahoo.com/design_giveaway/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]