GNU bug report logs -
#14134
24.3; Delphi Mode Doesn't Work With Highlight Changes Mode
Previous Next
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 14134 in the body.
You can then email your comments to 14134 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#14134
; Package
emacs
.
(Wed, 03 Apr 2013 20:17:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Erik Knowles <eknowles <at> geosystemsoftware.com>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Wed, 03 Apr 2013 20:17:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
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
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#14134
; Package
emacs
.
(Wed, 24 Apr 2013 20:53:01 GMT)
Full text and
rfc822 format available.
Message #8 received at 14134 <at> debbugs.gnu.org (full text, mbox):
> Delphi mode's fontification code erases all existing text properties,
> including those used by highlight changes mode to mark modified
> text sections.
I think your "monkey" patch was actually a fairly good idea.
I installed the patch below instead, which seems a bit cleaner.
I don't think this is quite good enough, but it's a step in the
right direction.
Stefan
=== modified file 'lisp/ChangeLog'
--- lisp/ChangeLog 2013-04-24 14:35:59 +0000
+++ lisp/ChangeLog 2013-04-24 20:40:19 +0000
@@ -1,3 +1,11 @@
+2013-04-24 Stefan Monnier <monnier <at> iro.umontreal.ca>
+
+ * progmodes/opascal.el (opascal-set-token-property): Rename from
+ opascal-set-text-properties and only set `token' (bug#14134).
+ (opascal-literal-text-properties): Remove.
+ (opascal-parse-next-literal, opascal-debug-unparse-buffer):
+ Adjust callers.
+
2013-04-24 Reuben Thomas <rrt <at> sc3d.org>
* textmodes/remember.el (remember-handler-functions): Add an
=== modified file 'lisp/progmodes/opascal.el'
--- lisp/progmodes/opascal.el 2013-01-31 01:58:24 +0000
+++ lisp/progmodes/opascal.el 2013-04-24 20:38:48 +0000
@@ -406,11 +406,11 @@
non-OPascal buffer. Set to nil in OPascal buffers. To override, just do:
(let ((opascal--ignore-changes t)) ...)")
-(defun opascal-set-text-properties (from to properties)
+(defun opascal-set-token-property (from to value)
;; Like `set-text-properties', except we do not consider this to be a buffer
;; modification.
(opascal-save-state
- (set-text-properties from to properties)))
+ (put-text-property from to 'token value)))
(defun opascal-literal-kind (p)
;; Returns the literal kind the point p is in (or nil if not in a literal).
@@ -490,13 +490,6 @@
(re-search-forward pattern limit 'goto-limit-on-fail)
(point))))
-(defun opascal-literal-text-properties (kind)
- ;; Creates a list of text properties for the literal kind.
- (if (and (boundp 'font-lock-mode)
- font-lock-mode)
- (list 'token kind 'face (opascal-face-of kind) 'lazy-lock t)
- (list 'token kind)))
-
(defun opascal-parse-next-literal (limit)
;; Searches for the next literal region (i.e. comment or string) and sets the
;; the point to its end (or the limit, if not found). The literal region is
@@ -507,8 +500,7 @@
;; We are completing an incomplete literal.
(let ((kind (opascal-literal-kind (1- search-start))))
(opascal-complete-literal kind limit)
- (opascal-set-text-properties
- search-start (point) (opascal-literal-text-properties kind))))
+ (opascal-set-token-property search-start (point) kind)))
((re-search-forward
"\\(//\\)\\|\\({\\)\\|\\((\\*\\)\\|\\('\\)\\|\\(\"\\)"
@@ -520,13 +512,12 @@
((match-beginning 4) 'string)
((match-beginning 5) 'double-quoted-string)))
(start (match-beginning 0)))
- (opascal-set-text-properties search-start start nil)
+ (opascal-set-token-property search-start start nil)
(opascal-complete-literal kind limit)
- (opascal-set-text-properties
- start (point) (opascal-literal-text-properties kind))))
+ (opascal-set-token-property start (point) kind)))
;; Nothing found. Mark it as a non-literal.
- ((opascal-set-text-properties search-start limit nil)))
+ ((opascal-set-token-property search-start limit nil)))
(opascal-step-progress (point) "Parsing" opascal-parsing-progress-step)))
(defun opascal-literal-token-at (p)
@@ -1570,7 +1561,7 @@
(defun opascal-debug-unparse-buffer ()
(interactive)
- (opascal-set-text-properties (point-min) (point-max) nil))
+ (opascal-set-token-property (point-min) (point-max) nil))
(defun opascal-debug-parse-region (from to)
(interactive "r")
Reply sent
to
Stefan Monnier <monnier <at> iro.umontreal.ca>
:
You have taken responsibility.
(Thu, 25 Apr 2013 16:24:02 GMT)
Full text and
rfc822 format available.
Notification sent
to
Erik Knowles <eknowles <at> geosystemsoftware.com>
:
bug acknowledged by developer.
(Thu, 25 Apr 2013 16:24:02 GMT)
Full text and
rfc822 format available.
Message #13 received at 14134-done <at> debbugs.gnu.org (full text, mbox):
This should be all fixed now: I changed opascal-mode to use
syntax-propertize and font-lock "in the normal way".
Stefan
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Fri, 24 May 2013 11:24:03 GMT)
Full text and
rfc822 format available.
This bug report was last modified 12 years and 29 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.