Update copyright notices for 2013.
[bpt/emacs.git] / lisp / hilit-chg.el
index 6591ef4..66440ef 100644 (file)
@@ -1,6 +1,6 @@
 ;;; hilit-chg.el --- minor mode displaying buffer changes with special face
 
-;; Copyright (C) 1998, 2000-201 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2013 Free Software Foundation, Inc.
 
 ;; Author: Richard Sharman <rsharman@pobox.com>
 ;; Keywords: faces
@@ -326,14 +326,15 @@ remove it from existing buffers."
 
 ;;;###autoload
 (define-minor-mode highlight-changes-mode
-  "Toggle Highlight Changes mode.
+  "Toggle highlighting changes in this buffer (Highlight Changes mode).
+With a prefix argument ARG, enable Highlight Changes mode if ARG
+is positive, and disable it otherwise.  If called from Lisp,
+enable the mode if ARG is omitted or nil.
 
-With ARG, turn Highlight Changes mode on if and only if arg is positive.
-
-In Highlight Changes mode changes are recorded with a text property.
-Normally they are displayed in a distinctive face, but command
-\\[highlight-changes-visible-mode] can be used to toggles this
-on and off.
+When Highlight Changes is enabled, changes are marked with a text
+property.  Normally they are displayed in a distinctive face, but
+command \\[highlight-changes-visible-mode] can be used to toggles
+this on and off.
 
 Other functions for buffers in this mode include:
 \\[highlight-changes-next-change] - move point to beginning of next change
@@ -366,14 +367,17 @@ buffer with the contents of a file
 
 ;;;###autoload
 (define-minor-mode highlight-changes-visible-mode
-  "Toggle visiblility of changes when buffer is in Highlight Changes mode.
+  "Toggle visibility of highlighting due to Highlight Changes mode.
+With a prefix argument ARG, enable Highlight Changes Visible mode
+if ARG is positive, and disable it otherwise.  If called from
+Lisp, enable the mode if ARG is omitted or nil.
 
-This mode only has an effect when Highlight Changes mode is on.
-It allows toggling between whether or not the changed text is displayed
+Highlight Changes Visible mode only has an effect when Highlight
+Changes mode is on.  When enabled, the changed text is displayed
 in a distinctive face.
 
 The default value can be customized with variable
-`highlight-changes-visibility-initial-state'
+`highlight-changes-visibility-initial-state'.
 
 This command does not itself set highlight-changes mode."
 
@@ -476,7 +480,7 @@ This is the opposite of `hilit-chg-hide-changes'."
 (defun hilit-chg-make-ov (prop start end)
   (or prop
       (error "hilit-chg-make-ov: prop is nil"))
-  ;; For the region create overlays with a distincive face
+  ;; For the region create overlays with a distinctive face
   ;; and the text property 'hilit-chg.
   (let ((ov (make-overlay start end))
        (face (if (eq prop 'hilit-chg-delete)
@@ -565,37 +569,39 @@ This allows you to manually remove highlighting from uninteresting changes."
                   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 we add some
-            ;; text then remove the deletion marking, but set it to
-         ;; changed otherwise its highlighting disappears.
-         (if (eq (get-text-property end 'hilit-chg) 'hilit-chg-delete)
-             (progn
-               (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)))))))
+         (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)))))))
 
 (defun hilit-chg-update ()
   "Update a buffer's highlight changes when visibility changed."
@@ -1025,9 +1031,8 @@ This is called when `global-highlight-changes-mode' is turned on."
 ;; (defun hilit-chg-debug-show (&optional beg end)
 ;;   (interactive)
 ;;   (message "--- hilit-chg-debug-show ---")
-;;   (hilit-chg-map-changes '(lambda (prop start end)
-;;                           (message "%d-%d: %s" start end prop)
-;;                           )
+;;   (hilit-chg-map-changes (lambda (prop start end)
+;;                          (message "%d-%d: %s" start end prop))
 ;;                        beg end
 ;;                        ))
 ;;