unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#25890: 26.0.50; `color-values` gives wrong value
@ 2017-02-27 14:05 Rasmus
  2017-02-27 15:51 ` Eli Zaretskii
                   ` (2 more replies)
  0 siblings, 3 replies; 38+ messages in thread
From: Rasmus @ 2017-02-27 14:05 UTC (permalink / raw)
  To: 25890

Hi,

I try to get the color value of my background, "light yellow", with
color.el.  However, `color-values` from faces.el returns the wrong value.

  (color-values "#ffffff")      => (65280 65280 65280) ; The max values.
  (color-values "#ffffe0")      => (65280 65280 57344) ; Light yellow hex.
  (color-values "light yellow") => (65535 65535 57568) ; The potential bug.

That is the color value of "light yellow" exceeds the maximum value as
defined by the color values of white (cf. `color-rgb-to-hex').  This means
that the color.el functions won't work.

Is this a bug or because color-values isn't intended for "complicated"
names like "light yellow"?  Unfortunately, the C code is a bit
complicated, so I couldn't identify where the bug, if it is a bug, is
introduced.

Thanks,
Rasmus
 

In GNU Emacs 26.0.50.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.22.7)
 of 2017-02-10 built on W530
Repository revision: 2d284db5c9c5ff23269e2ec277f5348abdf1cd47
Windowing system distributor 'The X.Org Foundation', version 11.0.11901000
Recent messages:
Mark set [3 times]
Mark saved where search started
Type "q" in help window to restore its previous buffer.
uncompressing faces.el.gz...done
Note: file is write protected

Quit
Mark set [2 times]
Mark deactivated
Mark activated
 [2 times]
Configured using:
 'configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib
 --localstatedir=/var --mandir=/usr/share/man --with-gameuser=:games
 --with-sound=alsa --with-xft --with-modules --with-x-toolkit=gtk3
 --without-gconf --with-gsettings --with-xwidgets 'CFLAGS=-march=x86-64
 -mtune=generic -O2 -pipe -fstack-protector-strong
 --param=ssp-buffer-size=4' CPPFLAGS=-D_FORTIFY_SOURCE=2
 LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro'

Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GSETTINGS NOTIFY ACL
LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 MODULES XWIDGETS LIBSYSTEMD

Important settings:
  value of $LC_MONETARY: en_DK.UTF-8
  value of $LC_NUMERIC: en_DK.UTF-8
  value of $LC_TIME: en_DK.UTF-8
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  erc-list-mode: t
  erc-menu-mode: t
  erc-autojoin-mode: t
  erc-ring-mode: t
  erc-pcomplete-mode: t
  erc-track-mode: t
  erc-button-mode: t
  erc-fill-mode: t
  erc-stamp-mode: t
  erc-netsplit-mode: t
  erc-notifications-mode: t
  erc-match-mode: t
  erc-spelling-mode: t
  erc-services-mode: t
  erc-networks-mode: t
  erc-smiley-mode: t
  erc-irccontrols-mode: t
  erc-noncommands-mode: t
  erc-move-to-prompt-mode: t
  erc-readonly-mode: t
  recentf-mode: t
  shell-dirtrack-mode: t
  nyan-mode: t
  paredit-mode: t
  checkdoc-minor-mode: t
  subword-mode: t
  rainbow-mode: t
  global-company-mode: t
  company-mode: t
  diff-auto-refine-mode: t
  ido-everywhere: t
  global-auto-revert-mode: t
  which-function-mode: t
  winner-mode: t
  delete-selection-mode: t
  show-paren-mode: t
  electric-pair-mode: t
  savehist-mode: t
  save-place-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  prettify-symbols-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  global-visual-line-mode: t
  visual-line-mode: t
  transient-mark-mode: t

Load-path shadows:
/home/rasmus/.emacs.d/lisp/git-annex hides /home/rasmus/.emacs.d/elpa/git-annex-20160215.1111/git-annex
/home/rasmus/.emacs.d/lisp/readline-complete hides /home/rasmus/.emacs.d/elpa/readline-complete-20150708.737/readline-complete
/home/rasmus/.emacs.d/lisp/showtip hides /home/rasmus/.emacs.d/elpa/showtip-20080329.1959/showtip
/home/rasmus/.emacs.d/lisp/htmlize hides /usr/share/emacs/site-lisp/org_contrib/lisp/htmlize
/home/rasmus/.emacs.d/lisp/abbrev hides /usr/share/emacs/26.0.50/lisp/abbrev
/usr/share/emacs/site-lisp/org/ox-odt hides /usr/share/emacs/26.0.50/lisp/org/ox-odt
/usr/share/emacs/site-lisp/org/ox-texinfo hides /usr/share/emacs/26.0.50/lisp/org/ox-texinfo
/usr/share/emacs/site-lisp/org/ox-publish hides /usr/share/emacs/26.0.50/lisp/org/ox-publish
/usr/share/emacs/site-lisp/org/ox-org hides /usr/share/emacs/26.0.50/lisp/org/ox-org
/usr/share/emacs/site-lisp/org/ox-man hides /usr/share/emacs/26.0.50/lisp/org/ox-man
/usr/share/emacs/site-lisp/org/ox-md hides /usr/share/emacs/26.0.50/lisp/org/ox-md
/usr/share/emacs/site-lisp/org/ox-latex hides /usr/share/emacs/26.0.50/lisp/org/ox-latex
/usr/share/emacs/site-lisp/org/ox-html hides /usr/share/emacs/26.0.50/lisp/org/ox-html
/usr/share/emacs/site-lisp/org/ox-icalendar hides /usr/share/emacs/26.0.50/lisp/org/ox-icalendar
/usr/share/emacs/site-lisp/org/ox-ascii hides /usr/share/emacs/26.0.50/lisp/org/ox-ascii
/usr/share/emacs/site-lisp/org/ox-beamer hides /usr/share/emacs/26.0.50/lisp/org/ox-beamer
/usr/share/emacs/site-lisp/org/ox hides /usr/share/emacs/26.0.50/lisp/org/ox
/usr/share/emacs/site-lisp/org/org-table hides /usr/share/emacs/26.0.50/lisp/org/org-table
/usr/share/emacs/site-lisp/org/org-w3m hides /usr/share/emacs/26.0.50/lisp/org/org-w3m
/usr/share/emacs/site-lisp/org/org-timer hides /usr/share/emacs/26.0.50/lisp/org/org-timer
/usr/share/emacs/site-lisp/org/org-mouse hides /usr/share/emacs/26.0.50/lisp/org/org-mouse
/usr/share/emacs/site-lisp/org/org-mobile hides /usr/share/emacs/26.0.50/lisp/org/org-mobile
/usr/share/emacs/site-lisp/org/org-rmail hides /usr/share/emacs/26.0.50/lisp/org/org-rmail
/usr/share/emacs/site-lisp/org/org-src hides /usr/share/emacs/26.0.50/lisp/org/org-src
/usr/share/emacs/site-lisp/org/org-protocol hides /usr/share/emacs/26.0.50/lisp/org/org-protocol
/usr/share/emacs/site-lisp/org/org-mhe hides /usr/share/emacs/26.0.50/lisp/org/org-mhe
/usr/share/emacs/site-lisp/org/org-plot hides /usr/share/emacs/26.0.50/lisp/org/org-plot
/usr/share/emacs/site-lisp/org/org-info hides /usr/share/emacs/26.0.50/lisp/org/org-info
/usr/share/emacs/site-lisp/org/org-irc hides /usr/share/emacs/26.0.50/lisp/org/org-irc
/usr/share/emacs/site-lisp/org/org-inlinetask hides /usr/share/emacs/26.0.50/lisp/org/org-inlinetask
/usr/share/emacs/site-lisp/org/org hides /usr/share/emacs/26.0.50/lisp/org/org
/usr/share/emacs/site-lisp/org/org-pcomplete hides /usr/share/emacs/26.0.50/lisp/org/org-pcomplete
/usr/share/emacs/site-lisp/org/org-indent hides /usr/share/emacs/26.0.50/lisp/org/org-indent
/usr/share/emacs/site-lisp/org/org-list hides /usr/share/emacs/26.0.50/lisp/org/org-list
/usr/share/emacs/site-lisp/org/org-macro hides /usr/share/emacs/26.0.50/lisp/org/org-macro
/usr/share/emacs/site-lisp/org/org-macs hides /usr/share/emacs/26.0.50/lisp/org/org-macs
/usr/share/emacs/site-lisp/org/org-id hides /usr/share/emacs/26.0.50/lisp/org/org-id
/usr/share/emacs/site-lisp/org/org-habit hides /usr/share/emacs/26.0.50/lisp/org/org-habit
/usr/share/emacs/site-lisp/org/org-feed hides /usr/share/emacs/26.0.50/lisp/org/org-feed
/usr/share/emacs/site-lisp/org/org-gnus hides /usr/share/emacs/26.0.50/lisp/org/org-gnus
/usr/share/emacs/site-lisp/org/org-eshell hides /usr/share/emacs/26.0.50/lisp/org/org-eshell
/usr/share/emacs/site-lisp/org/org-element hides /usr/share/emacs/26.0.50/lisp/org/org-element
/usr/share/emacs/site-lisp/org/org-docview hides /usr/share/emacs/26.0.50/lisp/org/org-docview
/usr/share/emacs/site-lisp/org/org-footnote hides /usr/share/emacs/26.0.50/lisp/org/org-footnote
/usr/share/emacs/site-lisp/org/org-ctags hides /usr/share/emacs/26.0.50/lisp/org/org-ctags
/usr/share/emacs/site-lisp/org/org-faces hides /usr/share/emacs/26.0.50/lisp/org/org-faces
/usr/share/emacs/site-lisp/org/org-datetree hides /usr/share/emacs/26.0.50/lisp/org/org-datetree
/usr/share/emacs/site-lisp/org/org-crypt hides /usr/share/emacs/26.0.50/lisp/org/org-crypt
/usr/share/emacs/site-lisp/org/org-entities hides /usr/share/emacs/26.0.50/lisp/org/org-entities
/usr/share/emacs/site-lisp/org/org-colview hides /usr/share/emacs/26.0.50/lisp/org/org-colview
/usr/share/emacs/site-lisp/org/org-clock hides /usr/share/emacs/26.0.50/lisp/org/org-clock
/usr/share/emacs/site-lisp/org/ob-fortran hides /usr/share/emacs/26.0.50/lisp/org/ob-fortran
/usr/share/emacs/site-lisp/org/org-agenda hides /usr/share/emacs/26.0.50/lisp/org/org-agenda
/usr/share/emacs/site-lisp/org/ob-C hides /usr/share/emacs/26.0.50/lisp/org/ob-C
/usr/share/emacs/site-lisp/org/org-compat hides /usr/share/emacs/26.0.50/lisp/org/org-compat
/usr/share/emacs/site-lisp/org/org-bibtex hides /usr/share/emacs/26.0.50/lisp/org/org-bibtex
/usr/share/emacs/site-lisp/org/org-attach hides /usr/share/emacs/26.0.50/lisp/org/org-attach
/usr/share/emacs/site-lisp/org/org-bbdb hides /usr/share/emacs/26.0.50/lisp/org/org-bbdb
/usr/share/emacs/site-lisp/org/org-capture hides /usr/share/emacs/26.0.50/lisp/org/org-capture
/usr/share/emacs/site-lisp/org/org-archive hides /usr/share/emacs/26.0.50/lisp/org/org-archive
/usr/share/emacs/site-lisp/org/ob-tangle hides /usr/share/emacs/26.0.50/lisp/org/ob-tangle
/usr/share/emacs/site-lisp/org/ob-sqlite hides /usr/share/emacs/26.0.50/lisp/org/ob-sqlite
/usr/share/emacs/site-lisp/org/ob-table hides /usr/share/emacs/26.0.50/lisp/org/ob-table
/usr/share/emacs/site-lisp/org/ob-sql hides /usr/share/emacs/26.0.50/lisp/org/ob-sql
/usr/share/emacs/site-lisp/org/ob-shen hides /usr/share/emacs/26.0.50/lisp/org/ob-shen
/usr/share/emacs/site-lisp/org/ob-screen hides /usr/share/emacs/26.0.50/lisp/org/ob-screen
/usr/share/emacs/site-lisp/org/ob-scala hides /usr/share/emacs/26.0.50/lisp/org/ob-scala
/usr/share/emacs/site-lisp/org/ob-scheme hides /usr/share/emacs/26.0.50/lisp/org/ob-scheme
/usr/share/emacs/site-lisp/org/ob-sass hides /usr/share/emacs/26.0.50/lisp/org/ob-sass
/usr/share/emacs/site-lisp/org/ob-R hides /usr/share/emacs/26.0.50/lisp/org/ob-R
/usr/share/emacs/site-lisp/org/ob-ruby hides /usr/share/emacs/26.0.50/lisp/org/ob-ruby
/usr/share/emacs/site-lisp/org/ob-ref hides /usr/share/emacs/26.0.50/lisp/org/ob-ref
/usr/share/emacs/site-lisp/org/ob-python hides /usr/share/emacs/26.0.50/lisp/org/ob-python
/usr/share/emacs/site-lisp/org/ob-picolisp hides /usr/share/emacs/26.0.50/lisp/org/ob-picolisp
/usr/share/emacs/site-lisp/org/ob-plantuml hides /usr/share/emacs/26.0.50/lisp/org/ob-plantuml
/usr/share/emacs/site-lisp/org/ob-ocaml hides /usr/share/emacs/26.0.50/lisp/org/ob-ocaml
/usr/share/emacs/site-lisp/org/ob-perl hides /usr/share/emacs/26.0.50/lisp/org/ob-perl
/usr/share/emacs/site-lisp/org/ob-org hides /usr/share/emacs/26.0.50/lisp/org/ob-org
/usr/share/emacs/site-lisp/org/ob-maxima hides /usr/share/emacs/26.0.50/lisp/org/ob-maxima
/usr/share/emacs/site-lisp/org/ob-octave hides /usr/share/emacs/26.0.50/lisp/org/ob-octave
/usr/share/emacs/site-lisp/org/ob-mscgen hides /usr/share/emacs/26.0.50/lisp/org/ob-mscgen
/usr/share/emacs/site-lisp/org/ob-matlab hides /usr/share/emacs/26.0.50/lisp/org/ob-matlab
/usr/share/emacs/site-lisp/org/ob-makefile hides /usr/share/emacs/26.0.50/lisp/org/ob-makefile
/usr/share/emacs/site-lisp/org/ob-lob hides /usr/share/emacs/26.0.50/lisp/org/ob-lob
/usr/share/emacs/site-lisp/org/ob-lisp hides /usr/share/emacs/26.0.50/lisp/org/ob-lisp
/usr/share/emacs/site-lisp/org/ob-ledger hides /usr/share/emacs/26.0.50/lisp/org/ob-ledger
/usr/share/emacs/site-lisp/org/ob-lilypond hides /usr/share/emacs/26.0.50/lisp/org/ob-lilypond
/usr/share/emacs/site-lisp/org/ob-latex hides /usr/share/emacs/26.0.50/lisp/org/ob-latex
/usr/share/emacs/site-lisp/org/ob-keys hides /usr/share/emacs/26.0.50/lisp/org/ob-keys
/usr/share/emacs/site-lisp/org/ob-js hides /usr/share/emacs/26.0.50/lisp/org/ob-js
/usr/share/emacs/site-lisp/org/ob-java hides /usr/share/emacs/26.0.50/lisp/org/ob-java
/usr/share/emacs/site-lisp/org/ob-haskell hides /usr/share/emacs/26.0.50/lisp/org/ob-haskell
/usr/share/emacs/site-lisp/org/ob-gnuplot hides /usr/share/emacs/26.0.50/lisp/org/ob-gnuplot
/usr/share/emacs/site-lisp/org/ob-io hides /usr/share/emacs/26.0.50/lisp/org/ob-io
/usr/share/emacs/site-lisp/org/ob-exp hides /usr/share/emacs/26.0.50/lisp/org/ob-exp
/usr/share/emacs/site-lisp/org/ob-eval hides /usr/share/emacs/26.0.50/lisp/org/ob-eval
/usr/share/emacs/site-lisp/org/ob-css hides /usr/share/emacs/26.0.50/lisp/org/ob-css
/usr/share/emacs/site-lisp/org/ob-emacs-lisp hides /usr/share/emacs/26.0.50/lisp/org/ob-emacs-lisp
/usr/share/emacs/site-lisp/org/ob hides /usr/share/emacs/26.0.50/lisp/org/ob
/usr/share/emacs/site-lisp/org/ob-ditaa hides /usr/share/emacs/26.0.50/lisp/org/ob-ditaa
/usr/share/emacs/site-lisp/org/ob-core hides /usr/share/emacs/26.0.50/lisp/org/ob-core
/usr/share/emacs/site-lisp/org/ob-dot hides /usr/share/emacs/26.0.50/lisp/org/ob-dot
/usr/share/emacs/site-lisp/org/ob-calc hides /usr/share/emacs/26.0.50/lisp/org/ob-calc
/usr/share/emacs/site-lisp/org/ob-clojure hides /usr/share/emacs/26.0.50/lisp/org/ob-clojure
/usr/share/emacs/site-lisp/org/ob-comint hides /usr/share/emacs/26.0.50/lisp/org/ob-comint
/usr/share/emacs/site-lisp/org/ob-asymptote hides /usr/share/emacs/26.0.50/lisp/org/ob-asymptote
/usr/share/emacs/site-lisp/org/ob-awk hides /usr/share/emacs/26.0.50/lisp/org/ob-awk
/usr/share/emacs/site-lisp/org/org-loaddefs hides /usr/share/emacs/26.0.50/lisp/org/org-loaddefs
/usr/share/emacs/site-lisp/org/org-version hides /usr/share/emacs/26.0.50/lisp/org/org-version
/usr/share/emacs/site-lisp/org/org-install hides /usr/share/emacs/26.0.50/lisp/org/org-install

Features:
(shadow bbdb-message quail footnote cookie1 emacsbug erc-list erc-menu
erc-join erc-ring erc-pcomplete erc-track erc-button erc-fill erc-stamp
erc-netsplit erc-desktop-notifications erc-match erc-spelling erc-services
erc-networks erc-goodies erc erc-backend erc-compat mule-diag edebug
cus-start cus-load find-dired grep compile ffap add-log debug
ido-completing-read+ smex misearch multi-isearch recentf tree-widget
eieio-opt speedbar sb-image ezimage dframe gnus-notifications gnus-fun
notifications dbus flow-fill org-table proced gnus-html url-queue help-fns
radix-tree mm-url shr svg xml dom browse-url url-http url-gw url-auth
gnus-gravatar gravatar url-cache url url-proxy url-privacy url-expand
url-methods url-history url-cookie url-domsuf gnus-picon sort hi-lock
flyspell ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util
rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-icalendar
org-cite reftex-cite ox-koma-letter ox-beamer ox-ascii ox-html table
ox-latex ox-publish ox ispell face-remap cdlatex texmathp reftex
reftex-loaddefs reftex-vars org-rmail org-mhe org-irc org-info org-gnus
org-docview doc-view jka-compr image-mode org-bibtex bibtex org-bbdb
org-w3m org-element avl-tree org-inlinetask org-indent
org-location-google-maps org-agenda google-maps google-maps-static
url-util google-maps-geocode google-maps-base json map org org-macro
org-footnote org-pcomplete org-list org-faces org-entities noutline
outline org-version ob-calc calc-store calc-trail calc-ext calc
calc-loaddefs calc-macs ob-shell ob-awk ob-org ob-octave ob-python ob-C
ob-emacs-lisp ob-fortran cc-mode cc-fonts cc-guess cc-menus cc-cmds
cc-styles cc-align cc-engine cc-vars cc-defs ob-latex ob-R ob ob-tangle
org-src ob-ref ob-lob ob-table ob-keys ob-exp ob-comint tramp tramp-compat
tramp-loaddefs trampver ucs-normalize readline-complete shell pcomplete
comint ob-core ob-eval org-compat org-macs org-loaddefs find-func da-cal
holidays hol-loaddefs cal-menu calendar cal-loaddefs smiley gnus-cite
mm-archive mail-extr gnus-async gnus-bcklg qp gnus-ml disp-table
gnus-topic hl-line cursor-sensor epa-file utf-7 network-stream nsm
starttls nnfolder bbdb-gnus bbdb-mua nnnil gnus-demon gnus-harvest
bbdb-com crm mailalias nnir bbdb bbdb-site timezone smtpmail-async
smtpmail sendmail async gnus-delay gnus-draft gnus-agent gnus-srvr
gnus-score score-mode nnvirtual nntp gnus-cache gnus-msg gnus-art mm-uu
mml2015 mm-view mml-smime smime dig mailcap gnus-sum nndraft nnmh
gnus-group gnus-undo gnus-start gnus-cloud nnimap tls gnutls utf7 netrc
parse-time gnus-spec nnmail gnus-int gnus-range mail-source message puny
git-annex cl dired-aux dired-x dired dired-loaddefs format-spec rfc822 mml
mml-sec epa derived epg mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader gnus-win nnoo gnus nnheader subr-x
gnus-util rmail rmail-loaddefs rfc2047 rfc2045 ietf-drums mail-utils
mm-util mail-prsvr wid-edit nyan-mode paredit checkdoc thingatpt cap-words
superword subword rainbow-mode ansi-color color company-oddmuse
company-keywords company-etags etags xref project company-gtags
company-dabbrev-code company-dabbrev company-files company-capf
company-cmake company-xcode company-clang company-semantic company-eclim
company-template company-css company-nxml company-bbdb company-c-headers
rx company vc-git diff-mode easy-mmode bookmark pp ido autorevert
filenotify which-func imenu winner ring server pinentry windmove delsel
time-date paren elec-pair savehist saveplace edmacro kmacro finder-inf
tex-site advice info package epg-config url-handlers url-parse auth-source
cl-seq eieio eieio-core cl-macs eieio-loaddefs password-cache url-vars seq
byte-opt gv bytecomp byte-compile cl-extra help-mode easymenu cconv
cl-loaddefs pcase cl-lib mule-util tooltip eldoc electric uniquify
ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win
term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode
register page menu-bar rfn-eshadow isearch timer select scroll-bar mouse
jit-lock font-lock syntax facemenu font-core term/tty-colors frame
cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai
tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak
czech european ethiopic indian cyrillic chinese composite charscript
case-table epa-hook jka-cmpr-hook help simple abbrev obarray minibuffer
cl-preloaded nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule custom
widget hashtable-print-readable backquote dbusbind inotify dynamic-setting
system-font-setting font-render-setting xwidget-internal move-toolbar gtk
x-toolkit x multi-tty make-network-process emacs)

Memory information:
((conses 16 992968 563427)
 (symbols 48 62565 1120)
 (miscs 40 5725 14030)
 (strings 32 191481 179682)
 (string-bytes 1 5919595)
 (vectors 16 96124)
 (vector-slots 8 2231231 290956)
 (floats 8 1324 9912)
 (intervals 56 13687 17259)
 (buffers 976 71))

-- 
Evidence suggests Snowden used a powerful tool called monospaced fonts





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

* bug#25890: 26.0.50; `color-values` gives wrong value
  2017-02-27 14:05 bug#25890: 26.0.50; `color-values` gives wrong value Rasmus
@ 2017-02-27 15:51 ` Eli Zaretskii
  2017-02-27 17:09   ` bug#25890: " Rasmus
  2017-02-27 23:36   ` bug#25890: 26.0.50; " Michael Heerdegen
  2017-03-10  5:23 ` mail
  2017-03-29 20:01 ` bug#25890: Default value of digits-per-component? Clément Pit-Claudel
  2 siblings, 2 replies; 38+ messages in thread
From: Eli Zaretskii @ 2017-02-27 15:51 UTC (permalink / raw)
  To: Rasmus; +Cc: 25890

> From: Rasmus <rasmus@gmx.us>
> Date: Mon, 27 Feb 2017 15:05:46 +0100
> 
> I try to get the color value of my background, "light yellow", with
> color.el.  However, `color-values` from faces.el returns the wrong value.
> 
>   (color-values "#ffffff")      => (65280 65280 65280) ; The max values.

Are you sure?  What does the below produce?

   (color-values "#fffffffff")

>   (color-values "#ffffe0")      => (65280 65280 57344) ; Light yellow hex.
>   (color-values "light yellow") => (65535 65535 57568) ; The potential bug.

On my system, I get these results:

  (color-values "#ffffff")      => (65535 65535 65535)
  (color-values "#ffffe0")      => (65535 65535 57568)
  (color-values "light yellow") => (65535 65535 57568)

> That is the color value of "light yellow" exceeds the maximum value as
> defined by the color values of white (cf. `color-rgb-to-hex').  This means
> that the color.el functions won't work.

I think this means your color resolution is greater than 24 bits.  Or
maybe I don't understand how the above affects your code.





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

* bug#25890: `color-values` gives wrong value
  2017-02-27 15:51 ` Eli Zaretskii
@ 2017-02-27 17:09   ` Rasmus
  2017-02-27 23:36   ` bug#25890: 26.0.50; " Michael Heerdegen
  1 sibling, 0 replies; 38+ messages in thread
From: Rasmus @ 2017-02-27 17:09 UTC (permalink / raw)
  To: 25890

Hi Eli,

Eli Zaretskii <eliz@gnu.org> writes:

>> I try to get the color value of my background, "light yellow", with
>> color.el.  However, `color-values` from faces.el returns the wrong value.
>> 
>>   (color-values "#ffffff")      => (65280 65280 65280) ; The max values.
>
> Are you sure?
>
> What does the below produce?
>
>    (color-values "#fffffffff")

For that I get the right value:

    (color-values "#fffffffff") => (65520 65520 65520)
    (color-values "#ffffff")    => (65280 65280 65280)

>>   (color-values "#ffffe0")      => (65280 65280 57344) ; Light yellow hex.
>>   (color-values "light yellow") => (65535 65535 57568) ; The potential bug.
>
> On my system, I get these results:
>
>   (color-values "#ffffff")      => (65535 65535 65535)
>   (color-values "#ffffe0")      => (65535 65535 57568)
>   (color-values "light yellow") => (65535 65535 57568)

Which seems more reasonable.

>> That is the color value of "light yellow" exceeds the maximum value as
>> defined by the color values of white (cf. `color-rgb-to-hex').  This means
>> that the color.el functions won't work.
>
> I think this means your color resolution is greater than 24 bits.

Xorg tells me it's using 24 bits.

    $> xwininfo -root | grep Depth
    Depth: 24

> Or maybe I don't understand how the above affects your code.

I want to manipulate colors such as "light yellow" with color.el.  E.g.

    (set-frame-parameter (selected-frame) 'background-color
                         (color-darken-name "light yellow" 5))

This produces an "Undefined color" error because

    (color-darken-name "light yellow" 5) => "#100100c6".

This in turn points to `color-name-to-rgb', which uses (color-values
"#ffffff") as the denominator.  Because "#ffffff produces an RGB triplet
with smaller numbers than "light yellow", I get an RGB triple with
elements exceeding 1, which it shouldn't.

So an easy fix might be to use "#fffffffff" in `color-name-to-rgb', but
then I'd still not have equal color values for the white with and without
alpha...

    (equal (color-values "#fffffffff") (color-values "#ffffff")) => nil

Thus, I suggested that the error was in the C code in my initial report.
I hope this explains the problem I'm seeing better.

Thanks,
Rasmus

-- 
Even a three-legged dog has three good legs to lose







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

* bug#25890: 26.0.50; `color-values` gives wrong value
  2017-02-27 15:51 ` Eli Zaretskii
  2017-02-27 17:09   ` bug#25890: " Rasmus
@ 2017-02-27 23:36   ` Michael Heerdegen
  2017-02-28  9:44     ` bug#25890: " Rasmus
  1 sibling, 1 reply; 38+ messages in thread
From: Michael Heerdegen @ 2017-02-27 23:36 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 25890, Rasmus

Eli Zaretskii <eliz@gnu.org> writes:

> >   (color-values "#ffffff") => (65280 65280 65280) ; The max values.
>
> Are you sure?

FWIW, I see the same here; and we already have a bug report like this
one:

  https://debbugs.gnu.org/cgi/bugreport.cgi?bug=24273


Michael.





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

* bug#25890: `color-values` gives wrong value
  2017-02-27 23:36   ` bug#25890: 26.0.50; " Michael Heerdegen
@ 2017-02-28  9:44     ` Rasmus
  2017-02-28 15:50       ` Eli Zaretskii
  0 siblings, 1 reply; 38+ messages in thread
From: Rasmus @ 2017-02-28  9:44 UTC (permalink / raw)
  To: michael_heerdegen; +Cc: 25890

Michael Heerdegen <michael_heerdegen@web.de> writes:

> Eli Zaretskii <eliz@gnu.org> writes:
>
>> >   (color-values "#ffffff") => (65280 65280 65280) ; The max values.
>>
>> Are you sure?
>
> FWIW, I see the same here; and we already have a bug report like this
> one:
>
>   https://debbugs.gnu.org/cgi/bugreport.cgi?bug=24273

Oh thanks.  (I didn't search as gmane search is still down).

I guess this bug can be closed.

Rasmus

-- 
⠠⠵





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

* bug#25890: `color-values` gives wrong value
  2017-02-28  9:44     ` bug#25890: " Rasmus
@ 2017-02-28 15:50       ` Eli Zaretskii
  2017-02-28 23:42         ` Michael Heerdegen
  2017-03-01  9:55         ` Rasmus
  0 siblings, 2 replies; 38+ messages in thread
From: Eli Zaretskii @ 2017-02-28 15:50 UTC (permalink / raw)
  To: Rasmus; +Cc: michael_heerdegen, 25890

> From: Rasmus <rasmus@gmx.us>
> Cc: eliz@gnu.org, 25890@debbugs.gnu.org
> Date: Tue, 28 Feb 2017 10:44:22 +0100
> 
> Michael Heerdegen <michael_heerdegen@web.de> writes:
> 
> > Eli Zaretskii <eliz@gnu.org> writes:
> >
> >> >   (color-values "#ffffff") => (65280 65280 65280) ; The max values.
> >>
> >> Are you sure?
> >
> > FWIW, I see the same here; and we already have a bug report like this
> > one:
> >
> >   https://debbugs.gnu.org/cgi/bugreport.cgi?bug=24273
> 
> Oh thanks.  (I didn't search as gmane search is still down).
> 
> I guess this bug can be closed.

I'd rather we fixed it.

I think there's a bug in color.el: it assumes that the #RGB notation
uses 24 bits, i.e. each component maxes out at 255.  But Emacs does
its color calculations based on 16-bit components, which max out at
65535, which is why #ffffff does NOT produce (65535 65535 65535), the
white color.  (We decided long ago to use 16-bit components because X
APIs such as XParseColor on some systems, including yours, work with
such components.)  IOW, #ffffff is parsed as #ff00ff00ff00, and that
is not "white".

So I think the patch below is what is needed to fix this problem.  Can
you try it?  (There's one user of the functions the patch changes,
shr-color.el, which will need to be adapted to the change, if we
decide to install it.)


--- lisp/color.el~0	2017-01-02 06:25:09.000000000 +0200
+++ lisp/color.el	2017-02-28 17:35:43.570586100 +0200
@@ -52,14 +52,14 @@
 If FRAME cannot display COLOR, return nil."
   ;; `colors-values' maximum value is either 65535 or 65280 depending on the
   ;; display system.  So we use a white conversion to get the max value.
-  (let ((valmax (float (car (color-values "#ffffff")))))
+  (let ((valmax (float (car (color-values "#ffffffffffff")))))
     (mapcar (lambda (x) (/ x valmax)) (color-values color frame))))
 
 (defun color-rgb-to-hex  (red green blue)
   "Return hexadecimal notation for the color RED GREEN BLUE.
 RED, GREEN, and BLUE should be numbers between 0.0 and 1.0, inclusive."
-  (format "#%02x%02x%02x"
-          (* red 255) (* green 255) (* blue 255)))
+  (format "#%04x%04x%04x"
+          (* red 65535) (* green 65535) (* blue 65535)))
 
 (defun color-complement (color-name)
   "Return the color that is the complement of COLOR-NAME.





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

* bug#25890: `color-values` gives wrong value
  2017-02-28 15:50       ` Eli Zaretskii
@ 2017-02-28 23:42         ` Michael Heerdegen
  2017-02-28 23:54           ` Drew Adams
  2017-03-01  3:43           ` Eli Zaretskii
  2017-03-01  9:55         ` Rasmus
  1 sibling, 2 replies; 38+ messages in thread
From: Michael Heerdegen @ 2017-02-28 23:42 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 25890, Rasmus

Eli Zaretskii <eliz@gnu.org> writes:

> So I think the patch below is what is needed to fix this problem.  Can
> you try it?  (There's one user of the functions the patch changes,
> shr-color.el, which will need to be adapted to the change, if we
> decide to install it.)
>
>
> --- lisp/color.el~0	2017-01-02 06:25:09.000000000 +0200
> +++ lisp/color.el	2017-02-28 17:35:43.570586100 +0200
> @@ -52,14 +52,14 @@
>  If FRAME cannot display COLOR, return nil."
>    ;; `colors-values' maximum value is either 65535 or 65280 depending on the
>    ;; display system.  So we use a white conversion to get the max value.
> -  (let ((valmax (float (car (color-values "#ffffff")))))
> +  (let ((valmax (float (car (color-values "#ffffffffffff")))))
>      (mapcar (lambda (x) (/ x valmax)) (color-values color frame))))
>  
>  (defun color-rgb-to-hex  (red green blue)
>    "Return hexadecimal notation for the color RED GREEN BLUE.
>  RED, GREEN, and BLUE should be numbers between 0.0 and 1.0, inclusive."
> -  (format "#%02x%02x%02x"
> -          (* red 255) (* green 255) (* blue 255)))
> +  (format "#%04x%04x%04x"
> +          (* red 65535) (* green 65535) (* blue 65535)))
>  
>  (defun color-complement (color-name)
>    "Return the color that is the complement of COLOR-NAME.

With that patch, for me in the recipe of bug #24273, it makes a
difference; now

(color-name-to-rgb "#ffffff")
==>
(0.9961089494163424 0.9961089494163424 0.9961089494163424)

and

(color-name-to-rgb "white")
==>
(1.0 1.0 1.0)


For the recipe of this bug report, the values are the same as without
the patch.

I guess this is what you expected.  But is it ok that "#ffffff" is not
equivalent to "white"?  If it is, seems there is no inconsistency left.


Thanks so far,

Michael.





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

* bug#25890: `color-values` gives wrong value
  2017-02-28 23:42         ` Michael Heerdegen
@ 2017-02-28 23:54           ` Drew Adams
  2017-03-03 14:16             ` Eli Zaretskii
  2017-03-01  3:43           ` Eli Zaretskii
  1 sibling, 1 reply; 38+ messages in thread
From: Drew Adams @ 2017-02-28 23:54 UTC (permalink / raw)
  To: Michael Heerdegen, Eli Zaretskii; +Cc: 25890, Rasmus

> >  (defun color-rgb-to-hex  (red green blue)
> >    "Return hexadecimal notation for the color RED GREEN BLUE.
> >  RED, GREEN, and BLUE should be numbers between 0.0 and 1.0, inclusive."
> > -  (format "#%02x%02x%02x"
> > -          (* red 255) (* green 255) (* blue 255)))
> > +  (format "#%04x%04x%04x"
> > +          (* red 65535) (* green 65535) (* blue 65535)))

The function should accept an optional arg NB-DIGITS, which
specifies the number of hex digits for each of R, G, B.  And
yes, it should default to 4 digits: #RRRRGGGGBBBB.

(That's what the original function in hexrgb.el does, from
which color.el was supposedly derived.)





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

* bug#25890: `color-values` gives wrong value
  2017-02-28 23:42         ` Michael Heerdegen
  2017-02-28 23:54           ` Drew Adams
@ 2017-03-01  3:43           ` Eli Zaretskii
  1 sibling, 0 replies; 38+ messages in thread
From: Eli Zaretskii @ 2017-03-01  3:43 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: 25890, rasmus

> From: Michael Heerdegen <michael_heerdegen@web.de>
> Cc: Rasmus <rasmus@gmx.us>,  25890@debbugs.gnu.org
> Date: Wed, 01 Mar 2017 00:42:02 +0100
> 
> With that patch, for me in the recipe of bug #24273, it makes a
> difference; now
> 
> (color-name-to-rgb "#ffffff")
> ==>
> (0.9961089494163424 0.9961089494163424 0.9961089494163424)
> 
> and
> 
> (color-name-to-rgb "white")
> ==>
> (1.0 1.0 1.0)

That's what should happen, yes.

> For the recipe of this bug report, the values are the same as without
> the patch.
> 
> I guess this is what you expected.

Yes, expected.  color-values were not affected by the change, it's
just that color.el is now consistent with what color-values returns.

> But is it ok that "#ffffff" is not equivalent to "white"?

Yes.  There's no other way, really, on systems where "white" has 3
16-bit components with all bits set, when color-values is called.





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

* bug#25890: `color-values` gives wrong value
  2017-02-28 15:50       ` Eli Zaretskii
  2017-02-28 23:42         ` Michael Heerdegen
@ 2017-03-01  9:55         ` Rasmus
  2017-03-03 14:08           ` Eli Zaretskii
  1 sibling, 1 reply; 38+ messages in thread
From: Rasmus @ 2017-03-01  9:55 UTC (permalink / raw)
  To: 25890

Hi,

Eli Zaretskii <eliz@gnu.org> writes:

> I think there's a bug in color.el: it assumes that the #RGB notation
> uses 24 bits, i.e. each component maxes out at 255.  But Emacs does
> its color calculations based on 16-bit components, which max out at
> 65535, which is why #ffffff does NOT produce (65535 65535 65535), the
> white color.  (We decided long ago to use 16-bit components because X
> APIs such as XParseColor on some systems, including yours, work with
> such components.)  IOW, #ffffff is parsed as #ff00ff00ff00, and that
> is not "white".
>
> So I think the patch below is what is needed to fix this problem.  Can
> you try it?  (There's one user of the functions the patch changes,
> shr-color.el, which will need to be adapted to the change, if we
> decide to install it.)

The test I used before now works for me:

    (set-frame-parameter (selected-frame) 'background-color
                         (color-darken-name "light yellow" 5))

Other noteworthy effects of the change were already addressed by Michael.

Thanks,
Rasmus

-- 
Hvor meget poesi tror De kommer ud af et glas isvand?






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

* bug#25890: `color-values` gives wrong value
  2017-03-01  9:55         ` Rasmus
@ 2017-03-03 14:08           ` Eli Zaretskii
  2017-03-04 14:24             ` Simen Heggestøyl
  0 siblings, 1 reply; 38+ messages in thread
From: Eli Zaretskii @ 2017-03-03 14:08 UTC (permalink / raw)
  To: Rasmus; +Cc: 25890-done

> From: Rasmus <rasmus@gmx.us>
> Date: Wed, 01 Mar 2017 10:55:22 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > I think there's a bug in color.el: it assumes that the #RGB notation
> > uses 24 bits, i.e. each component maxes out at 255.  But Emacs does
> > its color calculations based on 16-bit components, which max out at
> > 65535, which is why #ffffff does NOT produce (65535 65535 65535), the
> > white color.  (We decided long ago to use 16-bit components because X
> > APIs such as XParseColor on some systems, including yours, work with
> > such components.)  IOW, #ffffff is parsed as #ff00ff00ff00, and that
> > is not "white".
> >
> > So I think the patch below is what is needed to fix this problem.  Can
> > you try it?  (There's one user of the functions the patch changes,
> > shr-color.el, which will need to be adapted to the change, if we
> > decide to install it.)
> 
> The test I used before now works for me:
> 
>     (set-frame-parameter (selected-frame) 'background-color
>                          (color-darken-name "light yellow" 5))
> 
> Other noteworthy effects of the change were already addressed by Michael.

Thanks, I installed my change with minor variations, and I'm marking
this bug done.





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

* bug#25890: `color-values` gives wrong value
  2017-02-28 23:54           ` Drew Adams
@ 2017-03-03 14:16             ` Eli Zaretskii
  0 siblings, 0 replies; 38+ messages in thread
From: Eli Zaretskii @ 2017-03-03 14:16 UTC (permalink / raw)
  To: Drew Adams; +Cc: michael_heerdegen, 25890, rasmus

> Date: Tue, 28 Feb 2017 15:54:46 -0800 (PST)
> From: Drew Adams <drew.adams@oracle.com>
> Cc: 25890@debbugs.gnu.org, Rasmus <rasmus@gmx.us>
> 
> > >  (defun color-rgb-to-hex  (red green blue)
> > >    "Return hexadecimal notation for the color RED GREEN BLUE.
> > >  RED, GREEN, and BLUE should be numbers between 0.0 and 1.0, inclusive."
> > > -  (format "#%02x%02x%02x"
> > > -          (* red 255) (* green 255) (* blue 255)))
> > > +  (format "#%04x%04x%04x"
> > > +          (* red 65535) (* green 65535) (* blue 65535)))
> 
> The function should accept an optional arg NB-DIGITS, which
> specifies the number of hex digits for each of R, G, B.  And
> yes, it should default to 4 digits: #RRRRGGGGBBBB.
> 
> (That's what the original function in hexrgb.el does, from
> which color.el was supposedly derived.)

The code in hexrgb.el produces strange results in this regard (e.g.,
it produces "#FFFFFFFFE0E0" instead of "#FFFFFFFFE000" for the color
mentioned by the OP).  I believe that's because it interprets the
conversion between 2 and 4 hex digits incorrectly: the 2 hex digits
are the _most_ significant bits of the 4-digit version, not the LSB.

But I did add such an optional argument to color-rgb-to-hex, with the
difference that its value can only be either 4 or 2, as I see no
reason for anyone to want a 12-bit per component color notations.

Thanks.





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

* bug#25890: `color-values` gives wrong value
       [not found]             ` <<83wpc6la28.fsf@gnu.org>
@ 2017-03-03 15:49               ` Drew Adams
  2017-03-03 18:32                 ` Eli Zaretskii
  0 siblings, 1 reply; 38+ messages in thread
From: Drew Adams @ 2017-03-03 15:49 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: michael_heerdegen, 25890, rasmus

> > > >  (defun color-rgb-to-hex  (red green blue)
> >
> > The function should accept an optional arg NB-DIGITS, which
> > specifies the number of hex digits for each of R, G, B.  And
> > yes, it should default to 4 digits: #RRRRGGGGBBBB.
> >
> > (That's what the original function in hexrgb.el does, from
> > which color.el was supposedly derived.)
> 
> The code in hexrgb.el produces strange results in this regard (e.g.,
> it produces "#FFFFFFFFE0E0" instead of "#FFFFFFFFE000" for the color
> mentioned by the OP).

Not clear what you are saying.  What color mentioned by the OP?
Do you mean "light yellow"?  What sexp using hexrgb.el did you try?  

If I do (hexrgb-color-name-to-hex "light yellow") I do get
"#FFFFFFFFE0E0".  That comes from `x-color-values' returning
(65535 65535 57568) and `hexrgb-int-to-hex' converting 57568
to "E0E0".  That's from (format "%04X" 57568).  Hex conversion
of decimal 57568 _should_ be E0E0, AFAIK.  Where is the bug?

Or are you saying that the bug is from `x-color-values'
(`color-values') and not from hexrgb.el?  Is 57568 the
wrong blue color value for "light yellow"?

> I believe that's because it interprets the
> conversion between 2 and 4 hex digits incorrectly: the 2 hex digits
> are the _most_ significant bits of the 4-digit version, not the LSB.

See above.  I'm missing what you are trying to say, I guess.
Are you saying that color value 57568 should not be expressed
in hex as E0E0?

> But I did add such an optional argument to color-rgb-to-hex,

Good.

> with the difference that its value can only be either 4 or 2,
> as I see no reason for anyone to want a 12-bit per component
> color notations.

(I see no reason for the function not to be general.  Sure,
for current applications of such a function to colors there
is no real need for such generality.  But why prevent it?)

Anyway, thanks for adding the optional arg.

I'm interested in your reply to my questions above,
especially in the case that might have located a bug in
hexrgb.el.  It's not clear to me, so far.  Thx.






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

* bug#25890: `color-values` gives wrong value
  2017-03-03 15:49               ` bug#25890: `color-values` gives wrong value Drew Adams
@ 2017-03-03 18:32                 ` Eli Zaretskii
  0 siblings, 0 replies; 38+ messages in thread
From: Eli Zaretskii @ 2017-03-03 18:32 UTC (permalink / raw)
  To: Drew Adams; +Cc: michael_heerdegen, 25890, rasmus

> Date: Fri, 3 Mar 2017 07:49:33 -0800 (PST)
> From: Drew Adams <drew.adams@oracle.com>
> Cc: michael_heerdegen@web.de, 25890@debbugs.gnu.org, rasmus@gmx.us
> 
> > The code in hexrgb.el produces strange results in this regard (e.g.,
> > it produces "#FFFFFFFFE0E0" instead of "#FFFFFFFFE000" for the color
> > mentioned by the OP).
> 
> Not clear what you are saying.  What color mentioned by the OP?
> Do you mean "light yellow"?  What sexp using hexrgb.el did you try?  
> 
> If I do (hexrgb-color-name-to-hex "light yellow") I do get
> "#FFFFFFFFE0E0".  That comes from `x-color-values' returning
> (65535 65535 57568) and `hexrgb-int-to-hex' converting 57568
> to "E0E0".  That's from (format "%04X" 57568).  Hex conversion
> of decimal 57568 _should_ be E0E0, AFAIK.  Where is the bug?

The bug is in hexrgb-int-to-hex: it incorrectly assumes that it should
produce the LSB part of the number, while it actually should produce
the MSB part.





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

* bug#25890: `color-values` gives wrong value
       [not found]                 ` <<83pohyky8i.fsf@gnu.org>
@ 2017-03-03 19:20                   ` Drew Adams
  2017-03-03 19:27                     ` Eli Zaretskii
  0 siblings, 1 reply; 38+ messages in thread
From: Drew Adams @ 2017-03-03 19:20 UTC (permalink / raw)
  To: Eli Zaretskii, Drew Adams; +Cc: michael_heerdegen, 25890, rasmus

> > > The code in hexrgb.el produces strange results in this regard (e.g.,
> > > it produces "#FFFFFFFFE0E0" instead of "#FFFFFFFFE000" for the color
> > > mentioned by the OP).
> >
> > Not clear what you are saying.  What color mentioned by the OP?
> > Do you mean "light yellow"?  What sexp using hexrgb.el did you try?
> >
> > If I do (hexrgb-color-name-to-hex "light yellow") I do get
> > "#FFFFFFFFE0E0".  That comes from `x-color-values' returning
> > (65535 65535 57568) and `hexrgb-int-to-hex' converting 57568
> > to "E0E0".  That's from (format "%04X" 57568).  Hex conversion
> > of decimal 57568 _should_ be E0E0, AFAIK.  Where is the bug?
> 
> The bug is in hexrgb-int-to-hex: it incorrectly assumes that it should
> produce the LSB part of the number, while it actually should produce
> the MSB part.

You seem to be just repeating yourself, without answering my
questions.  Are you saying that hex conversion of decimal 57568
should not be E0E0?  If so, why?  Why should it be E000?





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

* bug#25890: `color-values` gives wrong value
  2017-03-03 19:20                   ` Drew Adams
@ 2017-03-03 19:27                     ` Eli Zaretskii
  0 siblings, 0 replies; 38+ messages in thread
From: Eli Zaretskii @ 2017-03-03 19:27 UTC (permalink / raw)
  To: Drew Adams; +Cc: michael_heerdegen, 25890, rasmus

> Date: Fri, 3 Mar 2017 11:20:44 -0800 (PST)
> From: Drew Adams <drew.adams@oracle.com>
> Cc: michael_heerdegen@web.de, 25890@debbugs.gnu.org, rasmus@gmx.us
> 
> Are you saying that hex conversion of decimal 57568 should not be
> E0E0?

No.





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

* bug#25890: `color-values` gives wrong value
       [not found]                     ` <<83o9xikvop.fsf@gnu.org>
@ 2017-03-03 21:18                       ` Drew Adams
  2017-03-04  8:43                         ` Eli Zaretskii
  0 siblings, 1 reply; 38+ messages in thread
From: Drew Adams @ 2017-03-03 21:18 UTC (permalink / raw)
  To: Eli Zaretskii, Drew Adams; +Cc: michael_heerdegen, 25890, rasmus

> > Are you saying that hex conversion of decimal 57568 should not be
> > E0E0?
> 
> No.

Not very helpful.  It's not clear what you think is incorrect
in hexrgb.el, in that case.

You said:

> The bug is in hexrgb-int-to-hex: it incorrectly assumes that it should
> produce the LSB part of the number, while it actually should produce
> the MSB part.

`hexrgb-int-to-hex' just converts integer RGB to hex RGB.
And it converts integer 57568 to E0E0, which you now agree
is correct.

Perhaps you can elaborate a bit on what you think the bug is?





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

* bug#25890: `color-values` gives wrong value
  2017-03-03 21:18                       ` Drew Adams
@ 2017-03-04  8:43                         ` Eli Zaretskii
  0 siblings, 0 replies; 38+ messages in thread
From: Eli Zaretskii @ 2017-03-04  8:43 UTC (permalink / raw)
  To: Drew Adams; +Cc: michael_heerdegen, 25890, rasmus

> Date: Fri, 3 Mar 2017 13:18:12 -0800 (PST)
> From: Drew Adams <drew.adams@oracle.com>
> Cc: michael_heerdegen@web.de, 25890@debbugs.gnu.org, rasmus@gmx.us
> 
> You said:
> 
> > The bug is in hexrgb-int-to-hex: it incorrectly assumes that it should
> > produce the LSB part of the number, while it actually should produce
> > the MSB part.
> 
> `hexrgb-int-to-hex' just converts integer RGB to hex RGB.
> And it converts integer 57568 to E0E0, which you now agree
> is correct.
> 
> Perhaps you can elaborate a bit on what you think the bug is?

I already did, but you didn't want to hear, claiming that I repeat
myself.

Here it is again: the problem is in hexrgb-int-to-hex.  It does this:

  (substring (format (concat "%0" (int-to-string nb-digits) "X") int) (- nb-digits))

which assumes that the digits to be produced, if n in the %0nX format
is too small and doesn't allow to produce all of them, are the
least-significant digits of the number.  It should instead produce the
most-significant digits.  IOW, when #FFFFFF is converted to 16-bit per
color component, it should yield #FF00FF00FF00, not #FFFFFFFFFFFF.





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

* bug#25890: `color-values` gives wrong value
  2017-03-03 14:08           ` Eli Zaretskii
@ 2017-03-04 14:24             ` Simen Heggestøyl
  2017-03-04 14:38               ` Eli Zaretskii
  0 siblings, 1 reply; 38+ messages in thread
From: Simen Heggestøyl @ 2017-03-04 14:24 UTC (permalink / raw)
  To: Eli Zaretskii, 25890, eliz, rasmus; +Cc: 25890-done

On Fri, Mar 3, 2017 at 3:08 PM, Eli Zaretskii <eliz@gnu.org> wrote:
> Thanks, I installed my change with minor variations, and I'm marking
> this bug done.

Thanks, Eli. The changes makes sense to me, but I've still got one
problem. I'm working with web colors, where color codes are specified
with either one or two digits per component (meaning that both "#fff"
and "#ffffff" specify the brightest possible value, named
"white"). But:

(apply #'color-rgb-to-hex `(,@(color-name-to-rgb "#ffffff") 2))
     => "#fefefe"

(apply #'color-rgb-to-hex `(,@(color-name-to-rgb "#fff") 2))
     => "#efefef"

Where I would like both to give back "#ffffff". Does this mean that I
have to ensure that input to `color-name-to-rgb' uses 4 digits per
component? Would it make sense for it to get a new optional parameter
`DIGITS-PER-COMPONENT', like `color-rgb-to-hex' did?

-- Simen






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

* bug#25890: `color-values` gives wrong value
  2017-03-04 14:24             ` Simen Heggestøyl
@ 2017-03-04 14:38               ` Eli Zaretskii
  2017-03-04 15:44                 ` Lars Ingebrigtsen
  0 siblings, 1 reply; 38+ messages in thread
From: Eli Zaretskii @ 2017-03-04 14:38 UTC (permalink / raw)
  To: Simen Heggestøyl; +Cc: 25890, rasmus

> Date: Sat, 04 Mar 2017 15:24:00 +0100
> From: Simen Heggestøyl <simenheg@gmail.com>
> Cc: 25890-done@debbugs.gnu.org
> 
> Thanks, Eli. The changes makes sense to me, but I've still got one
> problem. I'm working with web colors, where color codes are specified
> with either one or two digits per component (meaning that both "#fff"
> and "#ffffff" specify the brightest possible value, named
> "white"). But:
> 
> (apply #'color-rgb-to-hex `(,@(color-name-to-rgb "#ffffff") 2))
>      => "#fefefe"
> 
> (apply #'color-rgb-to-hex `(,@(color-name-to-rgb "#fff") 2))
>      => "#efefef"
> 
> Where I would like both to give back "#ffffff". Does this mean that I
> have to ensure that input to `color-name-to-rgb' uses 4 digits per
> component?

Yes, IMO.  Emacs does all its calculations with color components
assuming 16 bits per component.  Applications that need to use fewer
digits and have the missing digits as something other than zero, need
to do that in application code.

> Would it make sense for it to get a new optional parameter
> `DIGITS-PER-COMPONENT', like `color-rgb-to-hex' did?

Not IMO, because only the application knows what it means by #ffffff,
color.el has no way of knowing that.  So it would be best to leave
this for the application to do, by converting the #RGB spec to the
canonical 16-bits-per-component form.





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

* bug#25890: `color-values` gives wrong value
       [not found]                         ` <<83lgsll9ey.fsf@gnu.org>
@ 2017-03-04 15:38                           ` Drew Adams
  2017-03-04 16:10                             ` Eli Zaretskii
  0 siblings, 1 reply; 38+ messages in thread
From: Drew Adams @ 2017-03-04 15:38 UTC (permalink / raw)
  To: Eli Zaretskii, Drew Adams; +Cc: michael_heerdegen, 25890, rasmus

> the problem is in hexrgb-int-to-hex.  It does this:
> 
>   (substring (format (concat "%0" (int-to-string nb-digits) "X") int)
>              (- nb-digits))
> 
> which assumes that the digits to be produced, if n in the %0nX format
> is too small and doesn't allow to produce all of them, are the
> least-significant digits of the number.

Correct.  Which is just what its doc string says:

 If INT is too large to be represented with NB-DIGITS, then the result
 is truncated from the left.  So, for example, INT=256 and NB-DIGITS=2
 returns \"00\", since the hex equivalent of 256 decimal is 100, which
 is more than 2 digits.

That doesn't claim that the result faithfully represents the decimal
input value.  It doesn't.  But neither would truncating from the
right represent it correctly.  The doc string just describes the
behavior, letting you know what the (inaccurate) return value is
in such a case.

Is there an advantage in truncating from the right?  If so,
what?  Can you show how you would use such "corrected" behavior
advantageously?  To my mind, neither kind of truncation gives
you anything useful, if what you need is to represent the same
number faithfully.

> It should instead produce the most-significant digits.

Why?  How would that be better?  If the decimal number is too
big for the allotted number of hex digits then it is just too big.

> IOW, when #FFFFFF is converted to 16-bit per color component, it
> should yield #FF00FF00FF00, not #FFFFFFFFFFFF.

Where do you see `hexrgb-int-to-hex' being used as (I guess) you
suppose?  Where do you see #FFFFFF "converted" to #FFFFFFFFFFFF
(let alone to #FF00FF00FF00).

Sorry, but I just do not understand what you're trying to say.

Are you perhaps thinking of using `hexrgb-int-to-hex' together
with `hexrgb-hex-to-int', to "convert" from 6 hex digits to 12?
In that case, the "conversion" would be from "FFFFFF" to
"000000FFFFFF", which is correct, I think:

(hexrgb-int-to-hex (hexrgb-hex-to-int "FFFFFF") 12) => "000000FFFFFF"

Or from 2 to 4 hex digits (since the function is used on each
color component separately):

(hexrgb-int-to-hex (hexrgb-hex-to-int "FF") 4) => "00FF"

Or for your "E0" example:

(hexrgb-int-to-hex (hexrgb-hex-to-int "E0") 4) => "00E0"

I don't see any "conversion" from "E0" to "E0E0" (or to "E000",
which is apparently what you suggest is called for).

Can you please relate your message, whatever it might be, back
to your initial statement that hexrgb 'produces "#FFFFFFFFE0E0"
instead of "#FFFFFFFFE000" for the color mentioned by the OP'.

AFAIK, the color mentioned by the OP was "light yellow".  Do
we agree so far?  (I asked this once, but got no reply.)

(And I asked what sexp using the hexrgb code you tried, but I
got no answer there either.)

I said that if you use (hexrgb-color-name-to-hex "light yellow")
which is what I'd hope you would use, you do get "#FFFFFFFFE0E0".
And I said that that is, AFAIK, correct, not incorrect.

You say (I think) that the correct hex value for "light yellow"
is, or should be, "#FFFFFFFFE000".  But you haven't said why you
think that.

The color values for "light yellow" are: (65535 65535 57568).
I asked if you thought those values are correct, but I got no
reply.

Let's assume they are correct (they are not from hexrgb code,
anyway).  If so, the question is how each of those color values
should be represented using 4 hex digits.  `hexrgb-int-to-hex'
returns "FFFF" for each of the first two and "E0E0" for the third.

I asked if you agreed that that is correct, and you said yes.
To me, that means that it is correct for the 12-digit hex code
for "light yellow" to be "#FFFFFFFFE0E0", which you apparently
do not agree with.

I get the impression that you are perhaps thinking that it is
about "converting" FFFFE0 (not "light yellow") to FFFFFFFFE0E0
or to FFFFFFFFE000.  If so, why do you think that, and where
do you see the hexrgb code doing any such "conversion"?

Sorry, but I just do not get your message.  Could you perhaps
show some code that points out the bug you think you have found?
Could you show (with code) how using `hexrgb-int-to-hex' for
"light yellow" or whatever gives the wrong hex representation?

Saying that `hexrgb-int-to-hex' truncates from the left (i.e.,
drops the MSB) just repeats what its doc string says.  It's not
a bug but the declared behavior.

If you see a _use_ of `hexrgb-int-to-hex' in hexrgb.el that
leads to incorrect results because of that (intended) behavior,
please point to it.

I'd like to correct a bug in hexrgb, but so far I haven't been
able to see what it is.

You apparently think that `hexrgb-int-to-hex' should truncate
from the right, i.e., drop the LSB, not the MSB, when the number
is too large to be represented by the given number of hex digits.

I don't see the advantage of that.  If the number is too large
then it is too large.  For an integer value of 256 you would, I
guess, prefer to see the hex representation "10" returned instead
of "00".  I don't see how that would help anything.

I think the question is how code makes _use_ of `hexrgb-int-to-hex'.
If the number to convert is too big for the number of hex digits
allowed then there is no way to represent the decimal number with
those few hex digits.  I don't see an advantage to truncating from
the right instead of the left.

Can you give an actual example, where you would use a version of
`hexrgb-int-to-hex' that is corrected according to you (presumably
truncating at the right), where you can usefully make use of the
return value?  IOW, supposing a corrected `hexrgb-int-to-hex',
how would you use it in a sexp to take advantage of the correction?

AFAICS, if the decimal value cannot be represented with so few hex
digits there is no sense in trying to use the result as if it
represented the same number.  But perhaps I'm missing something.





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

* bug#25890: `color-values` gives wrong value
  2017-03-04 14:38               ` Eli Zaretskii
@ 2017-03-04 15:44                 ` Lars Ingebrigtsen
  2017-03-04 16:15                   ` Eli Zaretskii
  0 siblings, 1 reply; 38+ messages in thread
From: Lars Ingebrigtsen @ 2017-03-04 15:44 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 25890, Simen Heggestøyl, rasmus

Eli Zaretskii <eliz@gnu.org> writes:

>> (apply #'color-rgb-to-hex `(,@(color-name-to-rgb "#ffffff") 2))
>>      => "#fefefe"
>> 
>> (apply #'color-rgb-to-hex `(,@(color-name-to-rgb "#fff") 2))
>>      => "#efefef"
>> 
>> Where I would like both to give back "#ffffff". Does this mean that I
>> have to ensure that input to `color-name-to-rgb' uses 4 digits per
>> component?
>
> Yes, IMO.  Emacs does all its calculations with color components
> assuming 16 bits per component.  Applications that need to use fewer
> digits and have the missing digits as something other than zero, need
> to do that in application code.

I haven't followed this discussion closely, but you've changed the way
color-rgb-to-rgb works in an incompatible way?  I don't think that makes
much sense -- it's a function we must assume is used by third party code
and that's supposed to return certain values on certain inputs.

If you want to have a function that does something else, I think it
would make more sense to introduce new functions that does this
"something new" (i.e., 16 bit component parsing instead of HTML-like
color parsing, which is what those functions are supposed to do), and
revert the old functions how they used to work.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





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

* bug#25890: `color-values` gives wrong value
  2017-03-04 15:38                           ` Drew Adams
@ 2017-03-04 16:10                             ` Eli Zaretskii
  0 siblings, 0 replies; 38+ messages in thread
From: Eli Zaretskii @ 2017-03-04 16:10 UTC (permalink / raw)
  To: Drew Adams; +Cc: michael_heerdegen, 25890, rasmus

> Date: Sat, 4 Mar 2017 07:38:51 -0800 (PST)
> From: Drew Adams <drew.adams@oracle.com>
> Cc: michael_heerdegen@web.de, 25890@debbugs.gnu.org, rasmus@gmx.us
> 
> > It should instead produce the most-significant digits.
> 
> Why?

Because that's how colors are interpreted on X, which is where Emacs
takes its ideas of how to process these specs.  See, for example, this
man page:

  https://linux.die.net/man/3/xparsecolor

(Emacs on X uses XParseColor internally in the implementation of
color-values.)

If you do it differently, sooner or later the results will clash with
what Emacs does, and yield subtly wrong values.

I will now bail out of this discussion.  I have nothing more to say
about this issue.  If you don't want to change hexrgb.el, that's your
prerogative.





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

* bug#25890: `color-values` gives wrong value
  2017-03-04 15:44                 ` Lars Ingebrigtsen
@ 2017-03-04 16:15                   ` Eli Zaretskii
  0 siblings, 0 replies; 38+ messages in thread
From: Eli Zaretskii @ 2017-03-04 16:15 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 25890, simenheg, rasmus

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: Simen Heggestøyl <simenheg@gmail.com>,
>   25890@debbugs.gnu.org,  rasmus@gmx.us
> Date: Sat, 04 Mar 2017 16:44:28 +0100
> 
> I haven't followed this discussion closely, but you've changed the way
> color-rgb-to-rgb works in an incompatible way?

There's no color-rgb-to-rgb.  There's color-rgb-to-hex and
color-name-to-rgb.  And I don't think the changes are incompatible.
Please show examples if you think otherwise.

> If you want to have a function that does something else, I think it
> would make more sense to introduce new functions that does this
> "something new" (i.e., 16 bit component parsing instead of HTML-like
> color parsing, which is what those functions are supposed to do), and
> revert the old functions how they used to work.

The changes make the above 2 functions compatible with all the other
color calculations in Emacs.  IMO it makes no sense to have color.el
make assumptions about RGB components that are different from
everything else in Emacs, as doing so will only produce subtle bugs
such as the one which started this bug report.





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

* bug#25890: `color-values` gives wrong value
       [not found]                             ` <<83lgslja4t.fsf@gnu.org>
@ 2017-03-04 20:40                               ` Drew Adams
  0 siblings, 0 replies; 38+ messages in thread
From: Drew Adams @ 2017-03-04 20:40 UTC (permalink / raw)
  To: Eli Zaretskii, Drew Adams; +Cc: michael_heerdegen, 25890, rasmus

> > > It should instead produce the most-significant digits.
> >
> > Why?
> 
> Because that's how colors are interpreted on X,

I think you misunderstand `hexrgb-int-to-hex'.  It does
no color interpretation at all.

It simply converts a decimal integer to a string of hex
digits of a given length.  If the prescribed length is
too short for the number then the returned string clearly
cannot represent the number accurately - as is documented.

The fact that too few digits cannot represent the number
is irrespective of whether those too few digits are MSB
or LSB.

It's up to code calling the function to DTRT wrt the
number of digits it passes, just as it is up to the
caller of `hexrgb-hex-to-int' to pass a hex string that
does not represent an integer larger than what Emacs
can handle.

Here, for instance, is how `hexrgb-increment-hex' checks
inputs to `hexrgb-int-to-hex' before it calls it:

 (<= (length (format (concat \"%X\") INT)) NB-DIGITS)

The doc makes all of this pretty clear, I think.

> which is where Emacs takes its ideas of how to
> process these specs.

Emacs interprets color specs.  hexrgb does not.

> See, for example, this man page:
> https://linux.die.net/man/3/xparsecolor
> (Emacs on X uses XParseColor internally in the
> implementation of color-values.)

I see nothing on that page that conflicts with the hexrgb code.
In particular, this quote describes the hexrgb behavior too:

  "the string ''#3a7'' is the same as ''#3000a0007000''

Same color represented by both patterns.

You use `hexrgb-int-to-hex' on each color component separately,
and the maximum integer input is 65535 - as documented.

(hexrgb-int-to-hex (hexrgb-hex-to-int "7000") 4 ) ==> "7000"
(hexrgb-int-to-hex (hexrgb-hex-to-int "7")    1 ) ==> "7"

It is Emacs, not hexrgb, that interprets such a hex value
as a color component.  And Emacs (correctly) interprets
the component "7" in "#3a7" the same as it interprets the
component "7000" in "#3000a0007000" - same color.

> If you do it differently, sooner or later the results will
> clash with what Emacs does, and yield subtly wrong values.

hexrgb does not "do it" at all.  hexrgb does not conflict
with anything shown on the page you cited.

> I will now bail out of this discussion.  I have nothing more
> to say about this issue.  If you don't want to change
> hexrgb.el, that's your prerogative.

I've been clear that I would LOVE to fix a bug, if you can
please point to one.  Show some code that uses hexrgb and
produces an incorrect result, for example.





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

* bug#25890: `color-values` gives wrong value
  2017-02-27 14:05 bug#25890: 26.0.50; `color-values` gives wrong value Rasmus
  2017-02-27 15:51 ` Eli Zaretskii
@ 2017-03-10  5:23 ` mail
  2017-03-10  7:28   ` Eli Zaretskii
  2017-03-29 20:01 ` bug#25890: Default value of digits-per-component? Clément Pit-Claudel
  2 siblings, 1 reply; 38+ messages in thread
From: mail @ 2017-03-10  5:23 UTC (permalink / raw)
  To: 25890@debbugs.gnu.org

[-- Attachment #1: Type: text/plain, Size: 454 bytes --]

Hello,

I'd like to ask a question regarding to the commit 7b00e956.
I quickly scanned the discussion here, but couldn't find any good reason for changing the behavior of color-rgb-to-hex function without keeping backward compatibility;
why the default value for digits-per-component is 4, not 2?
This change actually had impact on several packages including mode-icons, and IMO keeping the original behavior is a better option.

Thanks,
kissge

[-- Attachment #2: Type: text/html, Size: 731 bytes --]

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

* bug#25890: `color-values` gives wrong value
  2017-03-10  5:23 ` mail
@ 2017-03-10  7:28   ` Eli Zaretskii
  2017-03-10  8:13     ` mail
  0 siblings, 1 reply; 38+ messages in thread
From: Eli Zaretskii @ 2017-03-10  7:28 UTC (permalink / raw)
  To: mail@yo.eki.do; +Cc: 25890

> From: "mail@yo.eki.do" <mail@yo.eki.do>
> Date: Fri, 10 Mar 2017 05:23:35 +0000
> 
> I'd like to ask a question regarding to the commit 7b00e956.
> I quickly scanned the discussion here, but couldn't find any good reason for changing the behavior of
> color-rgb-to-hex function without keeping backward compatibility;
> why the default value for digits-per-component is 4, not 2?

The default was changed to 4 to match how Emacs does color
calculations internally.  Using 2 will produce subtle bugs, like that
one which prompted that change.

> This change actually had impact on several packages including mode-icons, and IMO keeping the original
> behavior is a better option.

I'm sorry to hear that, but you could still use the optional argument
to get back the original behavior, right?





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

* bug#25890: `color-values` gives wrong value
  2017-03-10  7:28   ` Eli Zaretskii
@ 2017-03-10  8:13     ` mail
  2017-03-10  8:33       ` mail
  2017-03-10  9:25       ` Eli Zaretskii
  0 siblings, 2 replies; 38+ messages in thread
From: mail @ 2017-03-10  8:13 UTC (permalink / raw)
  To: 25890@debbugs.gnu.org

2017-03-10 16:28 GMT+09:00 Eli Zaretskii <eliz@gnu.org>:
>
> > From: "mail@yo.eki.do" <mail@yo.eki.do>
> > Date: Fri, 10 Mar 2017 05:23:35 +0000
> >
> > I'd like to ask a question regarding to the commit 7b00e956.
> > I quickly scanned the discussion here, but couldn't find any good reason for changing the behavior of
> > color-rgb-to-hex function without keeping backward compatibility;
> > why the default value for digits-per-component is 4, not 2?
>
> The default was changed to 4 to match how Emacs does color
> calculations internally.  Using 2 will produce subtle bugs, like that
> one which prompted that change.

Thanks for clear explanation.
So that basically means this destructive change was inevitable.
I guess you are right.

> > This change actually had impact on several packages including mode-icons, and IMO keeping the original
> > behavior is a better option.
>
> I'm sorry to hear that, but you could still use the optional argument
> to get back the original behavior, right?

Hopefully. Actually I'm not qute certain how many packages will be affected.

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

* bug#25890: `color-values` gives wrong value
  2017-03-10  8:13     ` mail
@ 2017-03-10  8:33       ` mail
  2017-03-10  9:28         ` Eli Zaretskii
  2017-03-10  9:25       ` Eli Zaretskii
  1 sibling, 1 reply; 38+ messages in thread
From: mail @ 2017-03-10  8:33 UTC (permalink / raw)
  To: 25890@debbugs.gnu.org

2017-03-10 17:13 GMT+09:00 mail@yo.eki.do <mail@yo.eki.do>:
>> > This change actually had impact on several packages including mode-icons, and IMO keeping the original
>> > behavior is a better option.
>>
>> I'm sorry to hear that, but you could still use the optional argument
>> to get back the original behavior, right?
>
> Hopefully. Actually I'm not qute certain how many packages will be affected.

No, let me take back my words.
This change will have too large impacts since the number of parameters
will change.
Indeed developers can use the optional argument, but that trick won't
work in the previous version of Emacs and will lead to
wrong-number-of-arguments errors,
so they will need burdensome workarounds e.g. version check.
I'd have to say that the default argument should stick to 2, the original.

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

* bug#25890: `color-values` gives wrong value
  2017-03-10  8:13     ` mail
  2017-03-10  8:33       ` mail
@ 2017-03-10  9:25       ` Eli Zaretskii
  2017-03-10 11:07         ` Lars Ingebrigtsen
  1 sibling, 1 reply; 38+ messages in thread
From: Eli Zaretskii @ 2017-03-10  9:25 UTC (permalink / raw)
  To: mail@yo.eki.do; +Cc: 25890

> From: "mail@yo.eki.do" <mail@yo.eki.do>
> Date: Fri, 10 Mar 2017 08:13:15 +0000
> 
> > The default was changed to 4 to match how Emacs does color
> > calculations internally.  Using 2 will produce subtle bugs, like that
> > one which prompted that change.
> 
> Thanks for clear explanation.
> So that basically means this destructive change was inevitable.
> I guess you are right.

To my defense, they didn't look so destructive when I made them.  This
function has only one caller in the rest of the Emacs sources.

> > > This change actually had impact on several packages including mode-icons, and IMO keeping the original
> > > behavior is a better option.
> >
> > I'm sorry to hear that, but you could still use the optional argument
> > to get back the original behavior, right?
> 
> Hopefully. Actually I'm not qute certain how many packages will be affected.

Neither am I.

I'm open to alternative ideas for how to solve the original bug in a
less intrusive way.  I just don't think defaulting to 2 would be such
an alternative, because the underlying issues are very subtle, and if
we continue using 2 as the default, users of that function will never
discover that they need to use 4.  But maybe there are other ways that
leave everyone more happy.





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

* bug#25890: `color-values` gives wrong value
  2017-03-10  8:33       ` mail
@ 2017-03-10  9:28         ` Eli Zaretskii
  2017-03-11 10:06           ` mail
  0 siblings, 1 reply; 38+ messages in thread
From: Eli Zaretskii @ 2017-03-10  9:28 UTC (permalink / raw)
  To: mail@yo.eki.do; +Cc: 25890

> From: "mail@yo.eki.do" <mail@yo.eki.do>
> Date: Fri, 10 Mar 2017 08:33:59 +0000
> 
> This change will have too large impacts since the number of parameters
> will change.
> Indeed developers can use the optional argument, but that trick won't
> work in the previous version of Emacs and will lead to
> wrong-number-of-arguments errors,
> so they will need burdensome workarounds e.g. version check.

Packages that need to support older versions of Emacs will have to
provide a wrapper function that indeed looks at emacs-version.  That's
nothing new.

> I'd have to say that the default argument should stick to 2, the original.

That would leave the original problem in place, so I don't think it's
acceptable.





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

* bug#25890: `color-values` gives wrong value
  2017-03-10  9:25       ` Eli Zaretskii
@ 2017-03-10 11:07         ` Lars Ingebrigtsen
  2017-03-10 13:32           ` Eli Zaretskii
  0 siblings, 1 reply; 38+ messages in thread
From: Lars Ingebrigtsen @ 2017-03-10 11:07 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 25890, mail@yo.eki.do

Eli Zaretskii <eliz@gnu.org> writes:

> I'm open to alternative ideas for how to solve the original bug in a
> less intrusive way.  I just don't think defaulting to 2 would be such
> an alternative, because the underlying issues are very subtle, and if
> we continue using 2 as the default, users of that function will never
> discover that they need to use 4.  But maybe there are other ways that
> leave everyone more happy.

The normal way to introduce incompatible changes like this is to
introduce a new function and mark the old function as obsolete, isn't
it?  (Then remove the old function in about ten years time.  :-))

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





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

* bug#25890: `color-values` gives wrong value
  2017-03-10 11:07         ` Lars Ingebrigtsen
@ 2017-03-10 13:32           ` Eli Zaretskii
  2017-03-11 10:08             ` mail
  0 siblings, 1 reply; 38+ messages in thread
From: Eli Zaretskii @ 2017-03-10 13:32 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 25890, mail

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: "mail\@yo.eki.do" <mail@yo.eki.do>,  25890@debbugs.gnu.org
> Date: Fri, 10 Mar 2017 12:07:18 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > I'm open to alternative ideas for how to solve the original bug in a
> > less intrusive way.  I just don't think defaulting to 2 would be such
> > an alternative, because the underlying issues are very subtle, and if
> > we continue using 2 as the default, users of that function will never
> > discover that they need to use 4.  But maybe there are other ways that
> > leave everyone more happy.
> 
> The normal way to introduce incompatible changes like this is to
> introduce a new function and mark the old function as obsolete, isn't
> it?  (Then remove the old function in about ten years time.  :-))

I asked about that in https://debbugs.gnu.org/cgi/bugreport.cgi?bug=25525#68,
but no one answered.  The disadvantage would be that those packages
need to change their code anyway, now or in "ten years time".  If
that's deemed a better way, I can do it.





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

* bug#25890: `color-values` gives wrong value
  2017-03-10  9:28         ` Eli Zaretskii
@ 2017-03-11 10:06           ` mail
  0 siblings, 0 replies; 38+ messages in thread
From: mail @ 2017-03-11 10:06 UTC (permalink / raw)
  To: 25890@debbugs.gnu.org

2017-03-10 18:28 GMT+09:00 Eli Zaretskii <eliz@gnu.org>:
> Packages that need to support older versions of Emacs will have to
> provide a wrapper function that indeed looks at emacs-version.  That's
> nothing new.

Yes, you are right.
The point is, if it is possible, preserving the original behavior
would produce less confusion for developers.

2017-03-10 18:28 GMT+09:00 Eli Zaretskii <eliz@gnu.org>:
>> From: "mail@yo.eki.do" <mail@yo.eki.do>
>> Date: Fri, 10 Mar 2017 08:33:59 +0000
>>
>> This change will have too large impacts since the number of parameters
>> will change.
>> Indeed developers can use the optional argument, but that trick won't
>> work in the previous version of Emacs and will lead to
>> wrong-number-of-arguments errors,
>> so they will need burdensome workarounds e.g. version check.
>
> Packages that need to support older versions of Emacs will have to
> provide a wrapper function that indeed looks at emacs-version.  That's
> nothing new.
>
>> I'd have to say that the default argument should stick to 2, the original.
>
> That would leave the original problem in place, so I don't think it's
> acceptable.

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

* bug#25890: `color-values` gives wrong value
  2017-03-10 13:32           ` Eli Zaretskii
@ 2017-03-11 10:08             ` mail
  0 siblings, 0 replies; 38+ messages in thread
From: mail @ 2017-03-11 10:08 UTC (permalink / raw)
  To: 25890@debbugs.gnu.org

2017-03-10 22:32 GMT+09:00 Eli Zaretskii <eliz@gnu.org>:
> I asked about that in https://debbugs.gnu.org/cgi/bugreport.cgi?bug=25525#68,
> but no one answered.  The disadvantage would be that those packages
> need to change their code anyway, now or in "ten years time".  If
> that's deemed a better way, I can do it.

Now I understand the situation.
So far, "to introduce a new function and mark the old function as
obsolete" sounds the best idea.

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

* bug#25890: Default value of digits-per-component?
  2017-02-27 14:05 bug#25890: 26.0.50; `color-values` gives wrong value Rasmus
  2017-02-27 15:51 ` Eli Zaretskii
  2017-03-10  5:23 ` mail
@ 2017-03-29 20:01 ` Clément Pit-Claudel
  2017-03-30  2:36   ` Eli Zaretskii
  2 siblings, 1 reply; 38+ messages in thread
From: Clément Pit-Claudel @ 2017-03-29 20:01 UTC (permalink / raw)
  To: 25890

Hi all,

> When I worked on the change, it seemed harmless: the function has only
> one caller outside of color.el, and I changed that single caller to
> use the optional argument.

This is a public function, with many callers outside of Emacs, it seems (https://github.com/search?l=Emacs+Lisp&q=color-rgb-to-hex&type=Code&utf8=%E2%9C%93); it will certainly break some of these uses (it did break my uses of it :/) I tend to follow the ChangeLogs and emacs-devel discussions, but I didn't see it mentioned there; maybe it would be good to?

> If the change I made is nevertheless deemed too drastic, then what are
> our alternatives?  The only one I could think of is to define a new
> function and deprecate color-name-to-rgb in favor of that new
> function, which will then display warnings when code using it is
> compiled, and eventually cause them to make changes in their code
> anyway.  Is that better?  Or are there any better ideas?

It sounds much better to me: the current solution breaks all code silently, while a new function doesn't break any code and me authors time to adjust.  Additionally, with a new function, it's easy to write code that's compatible with all versions of Emacs (I just check whether the new function is fboundp).  With the current change, I have to inspect the function's signature to determine how to call it (is there a simpler way?).

An alternative is to advertise the argument as required, default to '2', and issue a warning when that argument isn't explicitly specified — a bit like what was done with looking-back.

Thanks!
Clément.





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

* bug#25890: Default value of digits-per-component?
  2017-03-29 20:01 ` bug#25890: Default value of digits-per-component? Clément Pit-Claudel
@ 2017-03-30  2:36   ` Eli Zaretskii
  2017-03-30  3:10     ` Clément Pit-Claudel
  0 siblings, 1 reply; 38+ messages in thread
From: Eli Zaretskii @ 2017-03-30  2:36 UTC (permalink / raw)
  To: Clément Pit-Claudel; +Cc: 25890

> Cc: Eli Zaretskii <eliz@gnu.org>
> From: Clément Pit-Claudel <cpitclaudel@gmail.com>
> Date: Wed, 29 Mar 2017 16:01:09 -0400
> 
> > If the change I made is nevertheless deemed too drastic, then what are
> > our alternatives?  The only one I could think of is to define a new
> > function and deprecate color-name-to-rgb in favor of that new
> > function, which will then display warnings when code using it is
> > compiled, and eventually cause them to make changes in their code
> > anyway.  Is that better?  Or are there any better ideas?
> 
> It sounds much better to me: the current solution breaks all code silently

I'm not sure I understand how come all users of that function are
suddenly broken.  A different result doesn't yet mean breakage, unless
the caller actually expected the precise format the old version was
producing, and relied on that.  Is that indeed so in the callers you
saw?





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

* bug#25890: Default value of digits-per-component?
  2017-03-30  2:36   ` Eli Zaretskii
@ 2017-03-30  3:10     ` Clément Pit-Claudel
  0 siblings, 0 replies; 38+ messages in thread
From: Clément Pit-Claudel @ 2017-03-30  3:10 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 25890

On 2017-03-29 22:36, Eli Zaretskii wrote:
>> Cc: Eli Zaretskii <eliz@gnu.org>
>> From: Clément Pit-Claudel <cpitclaudel@gmail.com>
>> Date: Wed, 29 Mar 2017 16:01:09 -0400
>>
>>> If the change I made is nevertheless deemed too drastic, then what are
>>> our alternatives?  The only one I could think of is to define a new
>>> function and deprecate color-name-to-rgb in favor of that new
>>> function, which will then display warnings when code using it is
>>> compiled, and eventually cause them to make changes in their code
>>> anyway.  Is that better?  Or are there any better ideas?
>>
>> It sounds much better to me: the current solution breaks all code silently
> 
> I'm not sure I understand how come all users of that function are
> suddenly broken.  A different result doesn't yet mean breakage, unless
> the caller actually expected the precise format the old version was
> producing, and relied on that.  Is that indeed so in the callers you
> saw?

For me, yes, definitely: I was producing HTML webpages with inline CSS and LaTeX documents.  Both of these got very confused when they started receiving a longer hex codes :)
I don't know about the uses on GitHub. 

Clément.





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

end of thread, other threads:[~2017-03-30  3:10 UTC | newest]

Thread overview: 38+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-02-27 14:05 bug#25890: 26.0.50; `color-values` gives wrong value Rasmus
2017-02-27 15:51 ` Eli Zaretskii
2017-02-27 17:09   ` bug#25890: " Rasmus
2017-02-27 23:36   ` bug#25890: 26.0.50; " Michael Heerdegen
2017-02-28  9:44     ` bug#25890: " Rasmus
2017-02-28 15:50       ` Eli Zaretskii
2017-02-28 23:42         ` Michael Heerdegen
2017-02-28 23:54           ` Drew Adams
2017-03-03 14:16             ` Eli Zaretskii
2017-03-01  3:43           ` Eli Zaretskii
2017-03-01  9:55         ` Rasmus
2017-03-03 14:08           ` Eli Zaretskii
2017-03-04 14:24             ` Simen Heggestøyl
2017-03-04 14:38               ` Eli Zaretskii
2017-03-04 15:44                 ` Lars Ingebrigtsen
2017-03-04 16:15                   ` Eli Zaretskii
2017-03-10  5:23 ` mail
2017-03-10  7:28   ` Eli Zaretskii
2017-03-10  8:13     ` mail
2017-03-10  8:33       ` mail
2017-03-10  9:28         ` Eli Zaretskii
2017-03-11 10:06           ` mail
2017-03-10  9:25       ` Eli Zaretskii
2017-03-10 11:07         ` Lars Ingebrigtsen
2017-03-10 13:32           ` Eli Zaretskii
2017-03-11 10:08             ` mail
2017-03-29 20:01 ` bug#25890: Default value of digits-per-component? Clément Pit-Claudel
2017-03-30  2:36   ` Eli Zaretskii
2017-03-30  3:10     ` Clément Pit-Claudel
     [not found] <<87zih7n2yt.fsf@pank.eu>
     [not found] ` <<83r32jpr8b.fsf@gnu.org>
     [not found]   ` <<87bmtnryqr.fsf@drachen>
     [not found]     ` <<87d1e2tzt5.fsf@pank.eu>
     [not found]       ` <<8337eypb5l.fsf@gnu.org>
     [not found]         ` <<87vartx4qd.fsf@drachen>
     [not found]           ` <<56bad9de-8111-4962-a9e9-2dbf0084e004@default>
     [not found]             ` <<83wpc6la28.fsf@gnu.org>
2017-03-03 15:49               ` bug#25890: `color-values` gives wrong value Drew Adams
2017-03-03 18:32                 ` Eli Zaretskii
     [not found] <<<87zih7n2yt.fsf@pank.eu>
     [not found] ` <<<83r32jpr8b.fsf@gnu.org>
     [not found]   ` <<<87bmtnryqr.fsf@drachen>
     [not found]     ` <<<87d1e2tzt5.fsf@pank.eu>
     [not found]       ` <<<8337eypb5l.fsf@gnu.org>
     [not found]         ` <<<87vartx4qd.fsf@drachen>
     [not found]           ` <<<56bad9de-8111-4962-a9e9-2dbf0084e004@default>
     [not found]             ` <<<83wpc6la28.fsf@gnu.org>
     [not found]               ` <<2cfd6280-34de-4751-b35f-ec7d47a16595@default>
     [not found]                 ` <<83pohyky8i.fsf@gnu.org>
2017-03-03 19:20                   ` Drew Adams
2017-03-03 19:27                     ` Eli Zaretskii
     [not found] <<<<87zih7n2yt.fsf@pank.eu>
     [not found] ` <<<<83r32jpr8b.fsf@gnu.org>
     [not found]   ` <<<<87bmtnryqr.fsf@drachen>
     [not found]     ` <<<<87d1e2tzt5.fsf@pank.eu>
     [not found]       ` <<<<8337eypb5l.fsf@gnu.org>
     [not found]         ` <<<<87vartx4qd.fsf@drachen>
     [not found]           ` <<<<56bad9de-8111-4962-a9e9-2dbf0084e004@default>
     [not found]             ` <<<<83wpc6la28.fsf@gnu.org>
     [not found]               ` <<<2cfd6280-34de-4751-b35f-ec7d47a16595@default>
     [not found]                 ` <<<83pohyky8i.fsf@gnu.org>
     [not found]                   ` <<d73ecee8-1b1d-4739-b2b8-e3eb9ecc3ce0@default>
     [not found]                     ` <<83o9xikvop.fsf@gnu.org>
2017-03-03 21:18                       ` Drew Adams
2017-03-04  8:43                         ` Eli Zaretskii
     [not found] <<<<<87zih7n2yt.fsf@pank.eu>
     [not found] ` <<<<<83r32jpr8b.fsf@gnu.org>
     [not found]   ` <<<<<87bmtnryqr.fsf@drachen>
     [not found]     ` <<<<<87d1e2tzt5.fsf@pank.eu>
     [not found]       ` <<<<<8337eypb5l.fsf@gnu.org>
     [not found]         ` <<<<<87vartx4qd.fsf@drachen>
     [not found]           ` <<<<<56bad9de-8111-4962-a9e9-2dbf0084e004@default>
     [not found]             ` <<<<<83wpc6la28.fsf@gnu.org>
     [not found]               ` <<<<2cfd6280-34de-4751-b35f-ec7d47a16595@default>
     [not found]                 ` <<<<83pohyky8i.fsf@gnu.org>
     [not found]                   ` <<<d73ecee8-1b1d-4739-b2b8-e3eb9ecc3ce0@default>
     [not found]                     ` <<<83o9xikvop.fsf@gnu.org>
     [not found]                       ` <<1b96dc61-19bb-486b-a408-c3b3c15e113b@default>
     [not found]                         ` <<83lgsll9ey.fsf@gnu.org>
2017-03-04 15:38                           ` Drew Adams
2017-03-04 16:10                             ` Eli Zaretskii
     [not found] <<<<<<87zih7n2yt.fsf@pank.eu>
     [not found] ` <<<<<<83r32jpr8b.fsf@gnu.org>
     [not found]   ` <<<<<<87bmtnryqr.fsf@drachen>
     [not found]     ` <<<<<<87d1e2tzt5.fsf@pank.eu>
     [not found]       ` <<<<<<8337eypb5l.fsf@gnu.org>
     [not found]         ` <<<<<<87vartx4qd.fsf@drachen>
     [not found]           ` <<<<<<56bad9de-8111-4962-a9e9-2dbf0084e004@default>
     [not found]             ` <<<<<<83wpc6la28.fsf@gnu.org>
     [not found]               ` <<<<<2cfd6280-34de-4751-b35f-ec7d47a16595@default>
     [not found]                 ` <<<<<83pohyky8i.fsf@gnu.org>
     [not found]                   ` <<<<d73ecee8-1b1d-4739-b2b8-e3eb9ecc3ce0@default>
     [not found]                     ` <<<<83o9xikvop.fsf@gnu.org>
     [not found]                       ` <<<1b96dc61-19bb-486b-a408-c3b3c15e113b@default>
     [not found]                         ` <<<83lgsll9ey.fsf@gnu.org>
     [not found]                           ` <<59441882-425e-4962-8760-70c505d991dd@default>
     [not found]                             ` <<83lgslja4t.fsf@gnu.org>
2017-03-04 20:40                               ` Drew Adams

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).