emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debbugs-tracker] bug#16160: closed ([PATCH] define-derived-mode clobber


From: GNU bug Tracking System
Subject: [debbugs-tracker] bug#16160: closed ([PATCH] define-derived-mode clobbers syntax tables)
Date: Tue, 13 Dec 2016 01:05:02 +0000

Your message dated Mon, 12 Dec 2016 20:04:52 -0500
with message-id <address@hidden>
and subject line Re: bug#16160: [PATCH] define-derived-mode clobbers syntax 
tables
has caused the debbugs.gnu.org bug report #16160,
regarding [PATCH] define-derived-mode clobbers syntax tables
to be marked as done.

(If you believe you have received this mail in error, please contact
address@hidden)


-- 
16160: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16160
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: [PATCH] define-derived-mode clobbers syntax tables Date: Mon, 16 Dec 2013 03:12:43 -0800 User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0
Repro:

1) Visit shell script with comments. See comments fontified properly.
2) M-x find-library sh-script RET
3) M-x eval-buffer
4) Return to shell script buffer
5) C-x C-v RET
6) Observe that comments are no longer fontified as comments.

The define-derived-mode macro in sh-script.el emits code that clobbers sh-mode-syntax-table because we don't have a :syntax-table argument. I think the following patch changes the code to the expected behavior.

~/edev/trunk
$ bzr diff
=== modified file 'lisp/emacs-lisp/derived.el'
--- lisp/emacs-lisp/derived.el  2013-05-27 16:12:52 +0000
+++ lisp/emacs-lisp/derived.el  2013-12-16 11:09:41 +0000
@@ -206,11 +206,11 @@
        ,(if declare-syntax
            `(progn
               (unless (boundp ',syntax)
-                (put ',syntax 'definition-name ',child))
-              (defvar ,syntax (make-syntax-table))
-              (unless (get ',syntax 'variable-documentation)
-                (put ',syntax 'variable-documentation
-                     (purecopy ,(format "Syntax table for `%s'." child))))))
+                (put ',syntax 'definition-name ',child)
+                 (defvar ,syntax (make-syntax-table))
+                 (unless (get ',syntax 'variable-documentation)
+                   (put ',syntax 'variable-documentation
+ (purecopy ,(format "Syntax table for `%s'." child)))))))
        ,(if declare-abbrev
            `(progn
               (put ',abbrev 'definition-name ',child)


That is, we shouldn't touch the syntax table variable at all unless the variable is unbound.



--- End Message ---
--- Begin Message --- Subject: Re: bug#16160: [PATCH] define-derived-mode clobbers syntax tables Date: Mon, 12 Dec 2016 20:04:52 -0500 User-agent: Gnus (www.gnus.org), GNU Emacs (www.gnu.org/software/emacs/)
Version: 26.1

>> The repro steps are incorrect. Try these:
>>
>> 1) emacs -Q
>> 2) visit a shell script
>> 3) M-x find-library sh-script RET
>> 4) C-s define-derived-mode RET
>> 5) C-M-x
>> 6) switch to your shell script buffer
>> 7) C-x C-v
>> 8) Observe that the shell script is fontified incorrectly; the syntax
>> table is now clobbered.

Fixed in 8db7b65 along the suggested lines.

So AIUI the issue is that define-derived-mode expands to 

(defvar ,syntax (make-syntax-table))

Normally this has no effect if ,syntax is already bound.
But M-x eval-defun resets defvars to their default settings...
Hence if you selectively re-evaluate only the mode definition from
sh-script.el, you get the reported problem.

So I changed it to explicitly check if ,syntax is bound.

This will however now make things go wrong in the opposite way for
someone who has been playing around with customizing a syntax table that
was actually defined by define-derived-mode and wants to reset it by
re-evaluating the derived mode definition. But AFAICS there's no way to
fix both scenarios, and the second seems less likely (?) to me than the
one reported here.


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]