unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* list-colors-display: filter same adjecent colors
@ 2004-02-24  3:43 Michael Mauger
  2004-02-24  6:43 ` Eli Zaretskii
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Mauger @ 2004-02-24  3:43 UTC (permalink / raw)


This was another conversation from November.  

See http://mail.gnu.org/archive/html/emacs-devel/2003-11/msg00189.html

Currently a color in the color list is not shown if the previous color
was the same numeric color value.  This patch filters out the color if
the *names* are the same (i.e., "gray" and "grey" are the same,
whitespace and letter case are ignored).  

The benefit of this change is that under w32 we have added colors based
on the current desktop theme.  Some of these colors may be the same but
logically be different colors.

As an added benefit, on my slow machine, the patch runs faster than the
original code.


Index: emacs/lisp/facemenu.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/facemenu.el,v
retrieving revision 1.71
diff -u -b -r1.71 facemenu.el
--- emacs/lisp/facemenu.el      1 Sep 2003 15:45:11 -0000       1.71
+++ emacs/lisp/facemenu.el      18 Nov 2003 18:04:08 -0000
@@ -508,12 +510,19 @@

 (defun facemenu-color-equal (a b)
   "Return t if colors A and B are the same color.
-A and B should be strings naming colors.
-This function queries the display system to find out what the color
-names mean.  It returns nil if the colors differ or if it can't
-determine the correct answer."
-  (cond ((equal a b) t)
-       ((equal (color-values a) (color-values b)))))
+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.


__________________________________
Do you Yahoo!?
Yahoo! Mail SpamGuard - Read only the mail you want.
http://antispam.yahoo.com/tools

^ permalink raw reply	[flat|nested] 8+ messages in thread
* Re: list-colors-display: filter same adjecent colors
@ 2004-05-18 21:13 Michael Mauger
  2004-05-20 17:55 ` Eli Zaretskii
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Mauger @ 2004-05-18 21:13 UTC (permalink / raw)


I think we had agreed on this one.  Can it be committed?

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
+    ;; 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 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 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.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2004-05-20 17:55 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-02-24  3:43 list-colors-display: filter same adjecent colors Michael Mauger
2004-02-24  6:43 ` Eli Zaretskii
2004-03-05 23:49   ` Michael Mauger
2004-03-06  8:51     ` Eli Zaretskii
2004-04-06  3:08       ` Michael Mauger
2004-04-15 13:18         ` Eli Zaretskii
  -- strict thread matches above, loose matches on Subject: below --
2004-05-18 21:13 Michael Mauger
2004-05-20 17:55 ` Eli Zaretskii

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).