emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r111196: * lisp/hilit-chg.el (highlig


From: Stefan Monnier
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r111196: * lisp/hilit-chg.el (highlight-save-buffer-state): Delete.
Date: Tue, 11 Dec 2012 13:51:27 -0500
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 111196
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Tue 2012-12-11 13:51:27 -0500
message:
  * lisp/hilit-chg.el (highlight-save-buffer-state): Delete.
  Use with-silent-modifications instead.
  (hilit-chg-set-face-on-change): Only fixup the text that's modified.
modified:
  lisp/ChangeLog
  lisp/hilit-chg.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2012-12-11 18:49:25 +0000
+++ b/lisp/ChangeLog    2012-12-11 18:51:27 +0000
@@ -1,5 +1,9 @@
 2012-12-11  Stefan Monnier  <address@hidden>
 
+       * hilit-chg.el (highlight-save-buffer-state): Delete.
+       Use with-silent-modifications instead.
+       (hilit-chg-set-face-on-change): Only fixup the text that's modified.
+
        * button.el: Handle buttons in display text-properties.
        (button--area-button-p, button--area-button-string):
        Use (STRING . STRING-POS) representation instead of just STRING.

=== modified file 'lisp/hilit-chg.el'
--- a/lisp/hilit-chg.el 2012-12-07 05:00:04 +0000
+++ b/lisp/hilit-chg.el 2012-12-11 18:51:27 +0000
@@ -523,28 +523,12 @@
   (remove-overlays beg end 'hilit-chg t)
   (hilit-chg-display-changes beg end))
 
-;; Inspired by font-lock.  Something like this should be moved to subr.el.
-(defmacro highlight-save-buffer-state (&rest body)
-  "Bind variables according to VARLIST and eval BODY restoring buffer state."
-  (declare (indent 0) (debug t))
-  (let ((modified (make-symbol "modified")))
-    `(let* ((,modified (buffer-modified-p))
-            (inhibit-modification-hooks t)
-            deactivate-mark
-            ;; So we don't check the file's mtime.
-            buffer-file-name
-            buffer-file-truename)
-       (progn
-         ,@body)
-       (unless ,modified
-         (restore-buffer-modified-p nil)))))
-
 ;;;###autoload
 (defun highlight-changes-remove-highlight (beg end)
   "Remove the change face from the region between BEG and END.
 This allows you to manually remove highlighting from uninteresting changes."
   (interactive "r")
-  (highlight-save-buffer-state
+  (with-silent-modifications
     (remove-text-properties beg end '(hilit-chg nil))
     (hilit-chg-fixup beg end)))
 
@@ -568,40 +552,40 @@
          (if (and highlight-changes-mode
                   highlight-changes-visible-mode)
              (hilit-chg-fixup beg end))
-        (highlight-save-buffer-state
-         (if (and (= beg end) (> leng-before 0))
-             ;; deletion
-             (progn
-               ;; The eolp and bolp tests are a kludge!  But they prevent
-               ;; rather nasty looking displays when deleting text at the end
-               ;; of line, such as normal corrections as one is typing and
-               ;; immediately makes a correction, and when deleting first
-               ;; character of a line.
-               ;; (if (= leng-before 1)
-               ;;     (if (eolp)
-               ;;         (setq beg-decr 0 end-incr 0)
-               ;;       (if (bolp)
-               ;;      (setq beg-decr 0))))
-               ;; (setq beg (max (- beg beg-decr) (point-min)))
-               (setq end (min (+ end end-incr) (point-max)))
-               (setq type 'hilit-chg-delete))
-           ;; Not a deletion.
-           ;; Most of the time the following is not necessary, but
-           ;; if the current text was marked as a deletion then
-           ;; the old overlay is still in effect.  So if the user adds some
-           ;; text where she earlier deleted text, we have to remove the
-           ;; deletion marking, and replace it explicitly with a `changed'
-           ;; marking, otherwise its highlighting would disappear.
-           (if (eq (get-text-property end 'hilit-chg) 'hilit-chg-delete)
-               (save-restriction
-                 (widen)
-                 (put-text-property end (+ end 1) 'hilit-chg 'hilit-chg)
-                 (if highlight-changes-visible-mode
-                     (hilit-chg-fixup beg (+ end 1))))))
-         (unless no-property-change
-           (put-text-property beg end 'hilit-chg type))
-         (if (or highlight-changes-visible-mode no-property-change)
-             (hilit-chg-make-ov type beg end)))))))
+        (with-silent-modifications
+          (if (and (= beg end) (> leng-before 0))
+              ;; deletion
+              (progn
+                ;; The eolp and bolp tests are a kludge!  But they prevent
+                ;; rather nasty looking displays when deleting text at the end
+                ;; of line, such as normal corrections as one is typing and
+                ;; immediately makes a correction, and when deleting first
+                ;; character of a line.
+                ;; (if (= leng-before 1)
+                ;;     (if (eolp)
+                ;;         (setq beg-decr 0 end-incr 0)
+                ;;       (if (bolp)
+                ;;     (setq beg-decr 0))))
+                ;; (setq beg (max (- beg beg-decr) (point-min)))
+                (setq end (min (+ end end-incr) (point-max)))
+                (setq type 'hilit-chg-delete))
+            ;; Not a deletion.
+            ;; Most of the time the following is not necessary, but
+            ;; if the current text was marked as a deletion then
+            ;; the old overlay is still in effect.  So if the user adds some
+            ;; text where she earlier deleted text, we have to remove the
+            ;; deletion marking, and replace it explicitly with a `changed'
+            ;; marking, otherwise its highlighting would disappear.
+            (if (eq (get-text-property end 'hilit-chg) 'hilit-chg-delete)
+                (save-restriction
+                  (widen)
+                  (put-text-property end (+ end 1) 'hilit-chg 'hilit-chg)
+                  (if highlight-changes-visible-mode
+                      (hilit-chg-fixup end (+ end 1))))))
+          (unless no-property-change
+            (put-text-property beg end 'hilit-chg type))
+          (if (or highlight-changes-visible-mode no-property-change)
+              (hilit-chg-make-ov type beg end)))))))
 
 (defun hilit-chg-update ()
   "Update a buffer's highlight changes when visibility changed."
@@ -635,7 +619,7 @@
       (message "Cannot remove highlighting from read-only mode buffer %s"
               (buffer-name))
     (remove-hook 'after-change-functions 'hilit-chg-set-face-on-change t)
-    (highlight-save-buffer-state
+    (with-silent-modifications
       (hilit-chg-hide-changes)
       (hilit-chg-map-changes
        (lambda (_prop start stop)


reply via email to

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