changeset 26813:da094b0ffe3c

Fix for when font-lock mode is active. (sh-font-lock-unfontify-region-function): New function.
author Gerd Moellmann <gerd@gnu.org>
date Sun, 12 Dec 1999 13:18:54 +0000
parents 7afb74b5999e
children b6966be704a9
files lisp/progmodes/sh-script.el
diffstat 1 files changed, 14 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/sh-script.el	Sun Dec 12 13:15:07 1999 +0000
+++ b/lisp/progmodes/sh-script.el	Sun Dec 12 13:18:54 1999 +0000
@@ -1247,6 +1247,7 @@
   (make-local-variable 'imenu-generic-expression)
   (make-local-variable 'sh-electric-rparen-needed-here)
   (make-local-variable 'sh-indent-supported-here)
+  (make-local-variable 'font-lock-unfontify-region-function)
   (setq major-mode 'sh-mode
 	mode-name "Shell-script"
 	;; not very clever, but enables wrapping skeletons around regions
@@ -1272,6 +1273,8 @@
 	  nil nil
 	  ((?/ . "w") (?~ . "w") (?. . "w") (?- . "w") (?_ . "w")) nil
 	  (font-lock-syntactic-keywords . sh-font-lock-syntactic-keywords))
+	font-lock-unfontify-region-function 
+		'sh-font-lock-unfontify-region-function
 	skeleton-pair-alist '((?` _ ?`))
 	skeleton-pair-filter 'sh-quoted-p
 	skeleton-further-elements '((< '(- (min sh-indentation
@@ -3195,6 +3198,17 @@
 Otherwise,  we fontify something and font-lock overwrites it."
   )
 
+;; The default font-lock-unfontify-region-function removes 
+;; syntax-table properties,  and so removes our information.
+(defun sh-font-lock-unfontify-region-function (beg end)
+  (let* ((modified (buffer-modified-p)) (buffer-undo-list t)
+	 (inhibit-read-only t) (inhibit-point-motion-hooks t)
+	 before-change-functions after-change-functions
+	 deactivate-mark buffer-file-name buffer-file-truename)
+    (remove-text-properties beg end '(face nil))
+    (when (and (not modified) (buffer-modified-p))
+      (set-buffer-modified-p nil))))
+
 (defun sh-set-char-syntax (where new-prop)
   "Set the character's syntax table property at WHERE to be NEW-PROP."
   (or where