summaryrefslogtreecommitdiff
path: root/lisp/facemenu.el
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2004-05-20 16:56:35 +0000
committerEli Zaretskii <eliz@gnu.org>2004-05-20 16:56:35 +0000
commit9c7fcb51a35f8122141cbdad73b914be17180f7f (patch)
tree8453d8f2be2686b79a9687cd04c24406559b0bb7 /lisp/facemenu.el
parent9af49a1adb149da0c6ab4ed32077db7647149af2 (diff)
downloademacs-9c7fcb51a35f8122141cbdad73b914be17180f7f.tar.gz
(facemenu-color-name-equal): New function.
(list-colors-display): Use it to compare colors instead of facemenu-color-equal.
Diffstat (limited to 'lisp/facemenu.el')
-rw-r--r--lisp/facemenu.el28
1 files changed, 27 insertions, 1 deletions
diff --git a/lisp/facemenu.el b/lisp/facemenu.el
index 3893e320655..e9af58fc73d 100644
--- a/lisp/facemenu.el
+++ b/lisp/facemenu.el
@@ -480,9 +480,19 @@ of colors that the current display can handle."
(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 @@ 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 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