Subject: bug#14134: closed (Re: bug#14134: 24.3; Delphi Mode Doesn't Work With Highlight Changes Mode)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 25 Apr 2013 16:24:02 +0000

Your bug report

#14134: 24.3; Delphi Mode Doesn't Work With Highlight Changes Mode

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
14134: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=14134
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#14134: 24.3; Delphi Mode Doesn't Work With Highlight Changes Mode
From: Stefan Monnier <[email-masked]>
To: Erik Knowles <[email-masked]>
Cc: [email-masked]
Date: Thu, 25 Apr 2013 12:17:49 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

This should be all fixed now: I changed opascal-mode to use
syntax-propertize and font-lock "in the normal way".

        Stefan

Subject: 24.3; Delphi Mode Doesn't Work With Highlight Changes Mode
From: Erik Knowles <[email-masked]>
To: [email-masked]
Date: Wed, 3 Apr 2013 14:03:36 -0600

Delphi mode's fontification code erases all existing text properties, including those used by highlight
changes mode to mark modified text sections. 

To duplicate:

emacs -Q
<emacs responds with the scratch buffer>
M-x delphi-mode
M-x highlight-changes-mode
<type some text -- the text will be shown with the highlight-changes face>
M-x highlight-changes-visible-mode
<text is shown in the default face>
M-x highlight-changes-visible-mode
<At this point the text will still be shown in the default face instead of the
highlight-changes face>

I've not included a proper patch (intuitively, the "correct" fix would be to rewrite Delphi mode's
fontification code to use overlays) because I'm not experienced enough with Elisp to do a
proper job; however, I've personally worked around the problem by monkey patching 
as follows:

-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

;; Delphi-mode marks literals with special text properties, in the process borking *all*
;; existing properties including the properties used by hilit-chg mode for marking
;; changes even when the "changes visible" flag is off. To avoid this, the mode's
;; "delphi-set-text-properties" function is replaced here with a version that simply
;; removes the specific text properties used by the font lock while leaving all the
;; other properties alone.
;;
;; To do this delphi-set-text-properties simply tracks which faces are used by the Delphi
;; font lock code and only removes those faces
(setq delphi-used-faces (list))
(defun delphi-set-text-properties (from to properties)
  ;; Like `set-text-properties', except we do not consider this to be a buffer
  ;; modification.
  (delphi-save-state 
    (dolist (prop delphi-used-faces) (remove-text-properties from to prop))
    (when properties
      (add-text-properties from to properties)
      (add-to-list 'delphi-used-faces properties) 
    )
  ) 
)                   

-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

In GNU Emacs 24.3.1 (i686-pc-cygwin)
 of 2013-03-11 on fiona
Configured using:
 `configure '--srcdir=/home/kbrown/src/cygemacs/emacs-24.3-1/src/emacs-24.3'
 '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin'
 '--libexecdir=/usr/lib' '--datadir=/usr/share' '--localstatedir=/var' '--sysconfdir=/etc'
 '--datarootdir=/usr/share' '--docdir=/usr/share/doc/emacs' '-C' '--with-x=no' 'CC=gcc'
 'CFLAGS=-ggdb -O2 -pipe
 -fdebug-prefix-map=/home/kbrown/src/cygemacs/emacs-24.3-1/build=/usr/src/debug/emacs-24.3-1
 -fdebug-prefix-map=/home/kbrown/src/cygemacs/emacs-24.3-1/src/emacs-24.3=/usr/src/debug/emacs-24.3-1'
 'LDFLAGS=-L/usr/lib/ncursesw' 'LIBS=' 'CPPFLAGS=-I/usr/include/ncursesw''

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Major mode: Emacs-Lisp

Minor modes in effect:
  flyspell-mode: t
  shell-dirtrack-mode: t
  mouse-wheel-mode: t
  xterm-mouse-mode: t
  global-subword-mode: t
  subword-mode: t
  cua-mode: t
  desktop-save-mode: t
  show-paren-mode: t
  global-highlight-changes-mode: t
  highlight-changes-mode: t
  which-function-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
  line-number-mode: t
  auto-fill-function: do-auto-fill
  transient-mark-mode: t

Load-path shadows:
/home/Erik/.emacs.d/indent hides /usr/share/emacs/24.3/lisp/indent

Features:
(shadow gnus-util mail-extr emacsbug message format-spec rfc822 mml mml-sec mm-decode
mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils server flyspell ispell ido tempbuf
grep-a-lot grep bash-completion shell pcomplete init-terminal-fix saveplace tabbar mwheel
xt-mouse backup-dir backup-each-save pascal-mode+ delphi pascal subword org-install
xterm-title xterm-frobs goto-last-change cua-base sunrise-commander easy-mmode term ehelp
electric sort find-dired esh-var esh-io esh-cmd esh-opt esh-ext esh-proc esh-arg eldoc
esh-groups eshell esh-util esh-module esh-mode disp-table enriched dired-x easymenu
dired-aux dired desktop paren hl-line+ advice help-fns cl-lib advice-preload time-date
hl-line hilit-chg wid-edit which-func imenu edmacro kmacro warnings byte-opt compile
comint regexp-opt ansi-color ring tool-bar bytecomp byte-compile cconv
bash-completion-autoloads cygwin-mount-autoloads dired+-autoloads flymake-cursor-autoloads
flymake-python-pyflakes-autoloads flymake-easy-autoloads grep-a-lot-autoloads
hl-line+-autoloads icicles-autoloads pager-autoloads tabbar-autoloads tidy-autoloads
package ediff-hook vc-hooks lisp-float-type tabulated-list newcomment lisp-mode register
page menu-bar rfn-eshadow timer select 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 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 dbusbind multi-tty
emacs)

- Erik R. Knowles