Subject: bug#17824: 24.4.50; Cursor interferes with underline and bold of overlapping overlays.

From: Keith David Bershatsky <[email-masked]>
Date: Fri, 20 Jun 2014 12:55:02 -0700

When the cursor touches two (2) overlapping overlays, an incorrect display occurs under the following example:

* Both overlays contain the same priority, or no assigned priority.

* First overlay: . . . 'face '(:foreground "red" :weight bold)

* Second overlay . . . 'face '(:underline "yellow" :weight normal)

[The same result also happens if the bolded foreground face is a glpyh in the `buffer-display-table`, and where only one (1) overlay contains a *normal* weight underline.  So, this issue does not appear to be exclusive to only the presence of overlapping overlays.]

The desired result is a bold foreground for the text, and a normal weight underline.  That result can be achieved if the cursor does not touch the overlapping overlays.  Once the cursor has touched the overlapping overlays, however, the underline takes on a *bold* visual attribute.  This improper *bold* attribute may extend for the entire length of the overlay, depending upon which direction the cursor is moving and other overlays that may be present.

I was not able to correct this situation by setting priorities.  In my various tests, setting priorities only served to choose one overlay over the other -- i.e., setting priorities do not permit the overlays to co-exist in harmony.

The thread that I opened on Stackoverflow contains some screen shots and a recipe to reproduce the error.  It is not necessary to use flyspell or hl-line-mode to reproduce the error, that was simply the example I chose because it is the one where I always see the error.  Perhaps the reason why the initial test by @Drew may not have yielded the same result is that his cursor was not touching "mal-normal" -- had his cursor touched that section of the buffer, the same result as I experienced may have occurred.  I also use OSX, but it may not be an OS specific issue.

http://stackoverflow.com/questions/24313953/overlays-how-to-prevent-bold-faces-from-trumping-non-bold-faces

Here is the recipe -- just adjust the path to the `ispell-program-name`:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; GNU Emacs 24.4.50.1 (x86_64-apple-darwin10.8.0,
;; NS appkit-1038.36 Version 10.6.8 (Build 10K549)) of 2014-06-01 on MP.local

(set-face-attribute 'default nil
  :background "black" :foreground "white" :font "Courier" :height 180)

(tool-bar-mode -1)

(require 'ispell)

(require 'flyspell)

(setq-default ispell-program-name
    "/Users/HOME/.0.data/.0.emacs/elpa/bin/aspell")

(custom-set-faces
  '(flyspell-incorrect ((t (:foreground "yellow" :weight bold ))))
  '(highlight ((t (:underline "red" :weight normal)))))

(defun zoom ()
(interactive)
  (setq buffer-face-mode-face `(:height 575))
  (buffer-face-mode 1))

(defun test-number-one ()
(interactive)
  (switch-to-buffer (get-buffer-create "test-number-ONE"))
  (zoom)
  (turn-on-flyspell)
  (setq flyspell-mark-duplications-flag nil)
  (setq flyspell-duplicate-distance 0)
  (hl-line-mode 1)
  (insert
    "This is `test-number-one`."
    "\n"
    "\n"
    "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ"
    "\n"
    "\n"
    "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ"))

(defun test-number-two ()
(interactive)
  (switch-to-buffer (get-buffer-create "test-number-TWO"))
  (zoom)
  (hl-line-mode 1)
  (insert
    "This is `test-number-two`."
    "\n"
    "\n"
    "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ"
    "\n"
    "\n"
    "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ"))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Thanks,

Keith

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

In GNU Emacs 24.4.50.1 (x86_64-apple-darwin10.8.0, NS appkit-1038.36 Version 10.6.8 (Build 10K549))
 of 2014-06-01 on MP.local
Repository revision: 117215 [email-masked]
Windowing system distributor `Apple', version 10.3.1038
Configured using:
 `configure --with-ns'

Configured features:
ACL LIBXML2 ZLIB

Important settings:
  locale-coding-system: utf-8-unix

Major mode: Fundamental

Minor modes in effect:
  bc-mode: t
  as-mode: t
  ds-mode: t
  ml-mode: t
  sb-mode: t
  sd-mode: t
  tb-mode: t

Recent input:
<escape> x r e p o r t - e m a c s - b u g <return>

Recent messages:
[k]ill or [s]ave draft?
Loading msgdb for +/Users/HOME/.0.data/.0.emacs/.0.mail/msgdb/imap/mail.lawlist.com/lawlist/INBOX.Drafts/spool...done
Saving file /Users/HOME/.0.data/.0.emacs/.scratch...
Wrote /Users/HOME/.0.data/.0.emacs/.scratch
*beep*
user-error: End of history; no default available
*beep*
funcall-interactively: End of buffer
*beep*
funcall-interactively: End of buffer

Load-path shadows:
/Users/HOME/.0.data/.0.emacs/.0.flim/md4 hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/md4
/Users/HOME/.0.data/.0.emacs/.0.flim/hex-util hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/hex-util
/Users/HOME/.0.data/.0.emacs/.0.flim/sasl hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/net/sasl
/Users/HOME/.0.data/.0.emacs/.0.flim/sasl-ntlm hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/net/sasl-ntlm
/Users/HOME/.0.data/.0.emacs/.0.flim/sasl-digest hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/net/sasl-digest
/Users/HOME/.0.data/.0.emacs/.0.flim/sasl-cram hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/net/sasl-cram
/Users/HOME/.0.data/.0.emacs/.0.flim/ntlm hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/net/ntlm
/Users/HOME/.0.data/.0.emacs/.0.flim/hmac-md5 hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/net/hmac-md5
/Users/HOME/.0.data/.0.emacs/.0.flim/hmac-def hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/net/hmac-def
/Users/HOME/.0.data/.0.emacs/.0.wl/rfc2368 hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/mail/rfc2368
/Users/HOME/.0.data/.0.emacs/.0.wl/utf7 hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/gnus/utf7
/Users/HOME/.0.data/.0.emacs/.0.simi/smime hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/gnus/smime
/Users/HOME/.0.data/.0.emacs/.0.simi/pgg hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/obsolete/pgg
/Users/HOME/.0.data/.0.emacs/.0.simi/pgg-pgp5 hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/obsolete/pgg-pgp5
/Users/HOME/.0.data/.0.emacs/.0.simi/pgg-pgp hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/obsolete/pgg-pgp
/Users/HOME/.0.data/.0.emacs/.0.simi/pgg-parse hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/obsolete/pgg-parse
/Users/HOME/.0.data/.0.emacs/.0.simi/pgg-gpg hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/obsolete/pgg-gpg
/Users/HOME/.0.data/.0.emacs/.0.simi/pgg-def hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/obsolete/pgg-def

Features:
(shadow emacsbug modb-legacy disp-table wl-mime mime-edit pgg-parse
pccl pccl-20 signature mime-setup mail-mime-setup semi-setup mime-pgp
pgg-def mime-play filename mime-image modb-standard elmo-imap4
bbdb-autoloads lawlist-wl wl-demo wl-draft eword-encode wl-template
sendmail elmo-net elmo-cache elmo-map elmo-dop wl-news wl-address
wl-thread wl-folder wl wl-e21 wl-spam wl-action wl-summary wl-refile
wl-util pp elmo-flag elmo-localdir wl-message elmo-mime mmelmo-buffer
mmelmo-imap mime-view mime-conf calist semi-def mmimap mime-parse
mmbuffer mmgeneric elmo-filter elmo-multi elmo-spam elsp-header
elsp-generic elmo elmo-signal wl-highlight wl-vars wl-version
elmo-msgdb modb modb-generic modb-entity luna mime elmo-util emu
invisible inv-23 poem poem-e20 poem-e20_3 eword-decode std11 elmo-date
elmo-vars elmo-version w3m-load mime-w3m w3m browse-url doc-view
jka-compr image-mode w3m-hist w3m-fb bookmark-w3m w3m-ems w3m-ccl ccl
w3m-favicon w3m-image w3m-proc w3m-util savehist lawlist-vr-hr
lawlist-whitespace lawlist-github conf-mode log-edit add-log find-lisp
package esh-var esh-io esh-cmd esh-opt esh-ext esh-proc esh-arg eldoc
esh-groups eshell esh-module esh-mode esh-util dired-x view tramp
tramp-compat tramp-loaddefs trampver server grep epa epg epg-config
diff-mode autorevert filenotify log-view pcvs-util ido time-stamp
vc-git vc vc-dispatcher ediff-merg ediff-wind ediff-diff ediff-mult
ediff-help ediff-init ediff-util ediff rx ert ewoc debug eieio-base
lawlist-calculator ps-print ps-def lpr lawlist-flyspell bbdb timezone
find-func dired-aux lawlist-yasnippet help-mode multiple-cursors
mc-separate-operations rectangular-region-mode mc-mark-more thingatpt
mc-cycle-cursors mc-edit-lines multiple-cursors-core rect saveplace
lawlist-tex-mode pcase compile shell pcomplete comint ansi-color ring
skeleton compare-w lawlist-text-mode lawlist-desktop frameset
lawlist-tabbar lawlist-org lawlist-calendar edmacro kmacro derived
lawlist-toodledo advice url-http url-auth url-gw url url-proxy
url-privacy url-expand url-methods url-history url-cookie url-domsuf
url-util url-parse auth-source eieio byte-opt bytecomp byte-compile
cconv eieio-core password-cache url-vars mailcap json xml noutline
outline easy-mmode gnus-sum gnus-group gnus-undo gnus-start gnus-cloud
nnimap nnmail mail-source tls utf7 mel path-util mime-def alist
mcharset mcs-20 mcs-e20 pcustom pces pces-e20 pces-20 broken poe pym
static apel-ver product netrc nnoo parse-time gnus-spec gnus-int
gnus-range message cl-macs dired format-spec rfc822 mml easymenu
mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047
rfc2045 ietf-drums mailabbrev gmm-utils mailheader gnus-win gnus
gnus-ems nnheader gnus-util mail-utils mm-util help-fns mail-prsvr
wid-edit cl gv cl-loaddefs cl-lib time-date tooltip electric uniquify
ediff-hook vc-hooks lisp-float-type mwheel ns-win tool-bar dnd fontset
image regexp-opt fringe tabulated-list newcomment lisp-mode prog-mode
register page menu-bar rfn-eshadow timer select scroll-bar mouse
jit-lock font-lock syntax facemenu font-core frame cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev
minibuffer 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 make-network-process
cocoa ns multi-tty emacs)

Memory information:
((conses 16 790310 62895)
 (symbols 48 55846 0)
 (miscs 40 104 214)
 (strings 32 114174 15282)
 (string-bytes 1 3819186)
 (vectors 16 39852)
 (vector-slots 8 711550 28300)
 (floats 8 962 268)
 (intervals 56 3712 88)
 (buffers 960 13))