changeset 55705:d2c247888af6

(facemenu-color-name-equal): New function. (list-colors-display): Use it to compare colors instead of facemenu-color-equal.
author Eli Zaretskii <eliz@gnu.org>
date Thu, 20 May 2004 16:56:35 +0000
parents 9c9741bc4dda
children f9ebf0f3d214
files lisp/facemenu.el
diffstat 1 files changed, 27 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/facemenu.el	Thu May 20 16:45:28 2004 +0000
+++ b/lisp/facemenu.el	Thu May 20 16:56:35 2004 +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.  For example, on MS-Windows, logical colors are added to
+    ;; the list that might have the same value but have different
+    ;; names and meanings.  For example, `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 identical 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))
@@ -515,6 +525,22 @@
   (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 accommodates 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.
 If START is nil or START to END is empty, add FACE to next typed character