From: rsharman@pobox.com
Cc: nickrob@snap.net.nz, emacs-devel@gnu.org, rsharman@pobox.com
Subject: Re: highlight-changes-mode
Date: Mon, 11 Dec 2006 22:16:43 -0500 [thread overview]
Message-ID: <17790.7963.202286.387900@cube.homenetwork> (raw)
In-Reply-To: <E1GtZd1-00040b-K6@fencepost.gnu.org>
[-- Attachment #1: message body text --]
[-- Type: text/plain, Size: 37 bytes --]
Here are the changes to hilit-chg.el
[-- Attachment #2: lisp/hilit-chg.el.cdif --]
[-- Type: application/octet-stream, Size: 46576 bytes --]
*** hilit-chg.el.orig Thu Feb 9 16:00:54 2006
--- hilit-chg.el Mon Dec 11 21:13:17 2006
***************
*** 26,85 ****
;;; Commentary:
;; A minor mode: "Highlight Changes mode".
- ;;
! ;; Highlight Changes mode has 2 submodes: active and passive.
! ;; When active, changes to the buffer are displayed in a different face.
! ;; When passive, any existing displayed changes are saved and new ones
! ;; recorded but are not displayed differently.
! ;; Why active and passive? Having the changes visible can be handy when you
! ;; want the information but very distracting otherwise. So, you can keep
! ;; Highlight Changes mode in passive state while you make your changes, toggle
! ;; it on to active mode to see them, then toggle it back off to avoid
! ;; distraction.
! ;;
! ;; When active, changes are displayed in the `highlight-changes' face.
! ;; When text is deleted, the following character is displayed in the
! ;; `highlight-changes-delete' face.
! ;;
;;
;; You can "age" different sets of changes by using
;; `highlight-changes-rotate-faces'. This rotates through a series
;; of different faces, so you can distinguish "new" changes from "older"
;; changes. You can customize these "rotated" faces in two ways. You can
;; either explicitly define each face by customizing
;; `highlight-changes-face-list'. If, however, the faces differ from
! ;; the `highlight-changes' face only in the foreground color, you can simply set
! ;; `highlight-changes-colors'. If `highlight-changes-face-list' is nil when
;; the faces are required they will be constructed from
! ;; `highlight-changes-colors'.
! ;;
! ;;
! ;; When a Highlight Changes mode is on (either active or passive) you can go
! ;; to the next or previous change with `highlight-changes-next-change' and
! ;; `highlight-changes-previous-change'.
! ;;
! ;;
! ;; You can also use the command highlight-compare-with-file to show changes
! ;; in this file compared with another file (typically the previous version
! ;; of the file). The command highlight-compare-buffers can be used to
! ;; compare two buffers.
! ;;
! ;;
! ;; There are currently three hooks run by `highlight-changes-mode':
;; `highlight-changes-enable-hook' - is run when Highlight Changes mode
! ;; is initially enabled for a buffer.
;; `highlight-changes-disable-hook' - is run when Highlight Changes mode
! ;; is turned off.
! ;; `highlight-changes-toggle-hook' - is run each time `highlight-changes-mode'
! ;; is called. Typically this is when
! ;; toggling between active and passive
! ;; modes. The variable
! ;; `highlight-changes-mode' contains the new
! ;; state (`active' or `passive'.)
! ;;
! ;;
! ;;
;; Example usage:
;; (defun my-highlight-changes-enable-hook ()
;; (add-hook 'write-file-functions 'highlight-changes-rotate-faces nil t)
--- 26,73 ----
;;; Commentary:
;; A minor mode: "Highlight Changes mode".
! ;; When Highlight Changes mode is enabled changes to the buffer are
! ;; recorded with a text property. Normally these ranges of text are
! ;; displayed in a distinctive face. However, sometimes it is
! ;; desirable to temporarily not see these changes. Rather than
! ;; disabling Highlight Changes mode (thus removing the text property)
! ;; use the command highlight-changes-toggle-visibility.
!
! ;; Two faces are supported: one for changed or inserted text and
! ;; another for the first character after text has been deleted.
!
! ;; When Highlight Changes mode is on (even if changes are not visible)
! ;; you can go to the next or previous change with
! ;; `highlight-changes-next-change' or `highlight-changes-previous-change'.
!
! ;; Command highlight-compare-with-file shows changes in this file
! ;; compared with another file (by default the previous version of the
! ;; file).
;;
+ ;; The command highlight-compare-buffers compares two buffers by
+ ;; highlighting their differences.
+
;; You can "age" different sets of changes by using
;; `highlight-changes-rotate-faces'. This rotates through a series
;; of different faces, so you can distinguish "new" changes from "older"
;; changes. You can customize these "rotated" faces in two ways. You can
;; either explicitly define each face by customizing
;; `highlight-changes-face-list'. If, however, the faces differ from
! ;; `highlight-changes-face' only in the foreground color, you can simply set
! ;; `highlight-changes-colours'. If `highlight-changes-face-list' is nil when
;; the faces are required they will be constructed from
! ;; `highlight-changes-colours'.
!
! ;; You can automatically rotate faces when the buffer is saved;
! ;; see function `highlight-changes-rotate-faces' for how to do this.
!
! ;; There are two hooks used by `highlight-changes-mode':
;; `highlight-changes-enable-hook' - is run when Highlight Changes mode
! ;; is enabled for a buffer.
;; `highlight-changes-disable-hook' - is run when Highlight Changes mode
! ;; is disabled for a buffer.
!
;; Example usage:
;; (defun my-highlight-changes-enable-hook ()
;; (add-hook 'write-file-functions 'highlight-changes-rotate-faces nil t)
***************
*** 94,142 ****
;; 'my-highlight-changes-disable-hook)
! ;; Explicit vs. Implicit
! ;;
;; Normally, Highlight Changes mode is turned on explicitly in a buffer.
! ;;
;; If you prefer to have it automatically invoked you can do it as
;; follows.
! ;;
;; 1. Most modes have a major-hook, typically called MODE-hook. You
;; can use `add-hook' to call `highlight-changes-mode'.
! ;;
;; Example:
;; (add-hook 'c-mode-hook 'highlight-changes-mode)
! ;;
! ;; If you want to make it start up in passive mode (regardless of the
! ;; setting of highlight-changes-initial-state):
! ;; (add-hook 'emacs-lisp-mode-hook
! ;; (lambda ()
! ;; (highlight-changes-mode 'passive)))
! ;;
;; However, this cannot be done for Fundamental mode for there is no
;; such hook.
! ;;
! ;; 2. You can use the function `global-highlight-changes'
! ;;
;; This function, which is fashioned after the way `global-font-lock' works,
;; toggles on or off global Highlight Changes mode. When activated, it turns
;; on Highlight Changes mode in all "suitable" existing buffers and will turn
;; it on in new "suitable" buffers to be created.
! ;;
;; A buffer's "suitability" is determined by variable
! ;; `highlight-changes-global-modes', as follows. If the variable is
;; * nil -- then no buffers are suitable;
;; * a function -- this function is called and the result is used. As
;; an example, if the value is `buffer-file-name' then all buffers
;; who are visiting files are suitable, but others (like dired
;; buffers) are not;
! ;; * a list -- then the buffer is suitable iff its mode is in the
! ;; list, except if the first element is `not', in which case the test
;; is reversed (i.e. it is a list of unsuitable modes).
;; * Otherwise, the buffer is suitable if its name does not begin with
;; ` ' or `*' and if `buffer-file-name' returns true.
! ;;
--- 82,127 ----
;; 'my-highlight-changes-disable-hook)
!
! ;; Automatically enabling Highlight Changes mode
!
;; Normally, Highlight Changes mode is turned on explicitly in a buffer.
!
;; If you prefer to have it automatically invoked you can do it as
;; follows.
!
;; 1. Most modes have a major-hook, typically called MODE-hook. You
;; can use `add-hook' to call `highlight-changes-mode'.
!
;; Example:
;; (add-hook 'c-mode-hook 'highlight-changes-mode)
!
;; However, this cannot be done for Fundamental mode for there is no
;; such hook.
!
! ;; 2. You can use the function `global-highlight-changes-mode'
!
;; This function, which is fashioned after the way `global-font-lock' works,
;; toggles on or off global Highlight Changes mode. When activated, it turns
;; on Highlight Changes mode in all "suitable" existing buffers and will turn
;; it on in new "suitable" buffers to be created.
!
;; A buffer's "suitability" is determined by variable
! ;; `highlight-changes-global-modes' as follows. If this variable is
;; * nil -- then no buffers are suitable;
;; * a function -- this function is called and the result is used. As
;; an example, if the value is `buffer-file-name' then all buffers
;; who are visiting files are suitable, but others (like dired
;; buffers) are not;
! ;; * a list -- then the buffer is suitable if and only if its mode is in the
! ;; list, unless the first element is `not' in which case the test
;; is reversed (i.e. it is a list of unsuitable modes).
;; * Otherwise, the buffer is suitable if its name does not begin with
;; ` ' or `*' and if `buffer-file-name' returns true.
!
! ;; To enable it for future sessions put this in your ~/.emacs file:
! ;; (global-highlight-changes-mode t)
***************
*** 144,160 ****
;; (global-set-key '[C-right] 'highlight-changes-next-change)
;; (global-set-key '[C-left] 'highlight-changes-previous-change)
;;
! ;; Other interactive functions (which could be bound if desired):
;; highlight-changes-mode
;; highlight-changes-remove-highlight
- ;; highlight-changes-rotate-faces
;; highlight-compare-with-file
;; highlight-compare-buffers
!
! ;;
! ;; You can automatically rotate faces when the buffer is saved;
! ;; see function `highlight-changes-rotate-faces' for how to do this.
! ;;
;;; Bugs:
--- 129,141 ----
;; (global-set-key '[C-right] 'highlight-changes-next-change)
;; (global-set-key '[C-left] 'highlight-changes-previous-change)
;;
! ;; Other interactive functions (that could be bound if desired):
;; highlight-changes-mode
+ ;; highlight-changes-toggle-visibility
;; highlight-changes-remove-highlight
;; highlight-compare-with-file
;; highlight-compare-buffers
! ;; highlight-changes-rotate-faces
;;; Bugs:
***************
*** 168,178 ****
;; - having different faces for deletion and non-deletion: is it
;; really worth the hassle?
- ;; - should have better hooks: when should they be run?
;; - highlight-compare-with-file should allow RCS files - e.g. nice to be
;; able to say show changes compared with version 2.1.
- ;; - Maybe we should have compare-with-buffer as well. (When I tried
- ;; a while back I ran into a problem with ediff-buffers-internal.)
;;; History:
--- 149,156 ----
***************
*** 190,198 ****
;; - Changed to use overlays
;; August 98
;; - renamed to Highlight Changes mode.
! ;; Dec 2003
! ;; - Use require for ediff stuff
;; - Added highlight-compare-buffers
;;; Code:
--- 168,181 ----
;; - Changed to use overlays
;; August 98
;; - renamed to Highlight Changes mode.
! ;; Nov 2006
! ;; - Made highlight-changes-mode like other modes (toggle on/off)
! ;; - Added new command highlight-changes-toggle-visibility to replace the
! ;; previous active/passive aspect of highlight-changes-mode.
! ;; - Removed highlight-changes-toggle-hook
;; - Added highlight-compare-buffers
+ ;; - Put back eval-and-compile inadvertently dropped
+
;;; Code:
***************
*** 254,298 ****
:group 'highlight-changes)
(define-obsolete-variable-alias 'highlight-changes-colours
! 'highlight-changes-colors "22.1")
! ;; If you invoke highlight-changes-mode with no argument, should it start in
! ;; active or passive mode?
! ;;
! (defcustom highlight-changes-initial-state 'active
! "*What state (active or passive) Highlight Changes mode should start in.
! This is used when `highlight-changes-mode' is called with no argument.
! This variable must be set to one of the symbols `active' or `passive'."
! :type '(choice (const :tag "Active" active)
! (const :tag "Passive" passive))
! :group 'highlight-changes)
- (defcustom highlight-changes-global-initial-state 'passive
- "*What state global Highlight Changes mode should start in.
- This is used if `global-highlight-changes' is called with no argument.
- This variable must be set to either `active' or `passive'."
- :type '(choice (const :tag "Active" active)
- (const :tag "Passive" passive))
- :group 'highlight-changes)
! ;; The strings displayed in the mode-line for the minor mode:
! (defcustom highlight-changes-active-string " +Chg"
! "*The string used when Highlight Changes mode is in the active state.
This should be set to nil if no indication is desired, or to
a string with a leading space."
:type '(choice string
(const :tag "None" nil))
:group 'highlight-changes)
! (defcustom highlight-changes-passive-string " -Chg"
! "*The string used when Highlight Changes mode is in the passive state.
This should be set to nil if no indication is desired, or to
a string with a leading space."
:type '(choice string
(const :tag "None" nil))
:group 'highlight-changes)
(defcustom highlight-changes-global-modes t
"*Determine whether a buffer is suitable for global Highlight Changes mode.
--- 237,278 ----
:group 'highlight-changes)
(define-obsolete-variable-alias 'highlight-changes-colours
! 'highlight-changes-colors "22.1")
+ (make-obsolete-variable 'highlight-changes-global-changes-existing-buffers
+ "global-highlight-changes-mode
+ affects all buffers now. See variables `highlight-changes-global-modes' and
+ `highlight-changes-mode-turn-off-fn'." "22.1")
! ;; highlight-changes-initial-state has been removed
! ;; highlight-changes-global-initial-state has been removed
! ;; These are the strings displayed in the mode-line for the minor mode:
!
! (defcustom highlight-changes-visible-string " +Chg"
! "*The string used when in Highlight Changes mode and changes are visible.
This should be set to nil if no indication is desired, or to
a string with a leading space."
:type '(choice string
(const :tag "None" nil))
:group 'highlight-changes)
! (define-obsolete-variable-alias 'highlight-changes-active-string
! 'highlight-changes-visible-string "22.1")
!
! (defcustom highlight-changes-invisible-string " -Chg"
! "*The string used when in Highlight Changes mode and changes are hidden.
This should be set to nil if no indication is desired, or to
a string with a leading space."
:type '(choice string
(const :tag "None" nil))
:group 'highlight-changes)
+ (define-obsolete-variable-alias 'highlight-changes-passive-string
+ 'highlight-changes-invisible-string "22.1")
+
+
(defcustom highlight-changes-global-modes t
"*Determine whether a buffer is suitable for global Highlight Changes mode.
***************
*** 306,316 ****
A value of t means the buffer is suitable if it is visiting a file and
its name does not begin with ` ' or `*'.
! A value of nil means no buffers are suitable for `global-highlight-changes'
\(effectively disabling the mode).
Example:
! (c-mode c++-mode)
means that Highlight Changes mode is turned on for buffers in C and C++
modes only."
:type '(choice
--- 286,296 ----
A value of t means the buffer is suitable if it is visiting a file and
its name does not begin with ` ' or `*'.
! A value of nil means no buffers are suitable for `global-highlight-changes-mode'
\(effectively disabling the mode).
Example:
! (c-mode c++-mode)
means that Highlight Changes mode is turned on for buffers in C and C++
modes only."
:type '(choice
***************
*** 325,341 ****
)
:group 'highlight-changes)
- (defvar global-highlight-changes nil)
-
- (defcustom highlight-changes-global-changes-existing-buffers nil
- "*If non-nil, toggling global Highlight Changes mode affects existing buffers.
- Normally, `global-highlight-changes' affects only new buffers (to be
- created). However, if `highlight-changes-global-changes-existing-buffers'
- is non-nil, then turning on `global-highlight-changes' will turn on
- Highlight Changes mode in suitable buffers, and turning the mode off will
- remove it from existing buffers."
- :type 'boolean
- :group 'highlight-changes)
(defun hilit-chg-cust-fix-changes-face-list (w wc &optional event)
;; When customization function `highlight-changes-face-list' inserts a new
--- 305,310 ----
***************
*** 398,403 ****
--- 367,384 ----
)
:group 'highlight-changes)
+ (defvar highlight-changes-visible-p t
+ "*This controls the appearance of changes when Highlight Changes mode is on.
+ If non-nil, the changes are displayed using distinctive faces.
+
+ This variable is buffer-local when set.
+
+ Do not set this variable directly. Instead, use
+ \\[highlight-changes-toggle-visibility] to change this variable in a
+ buffer, or use the Lisp function `setq-default' to change the default
+ value that is used for new buffers visited when Global Highlight Changes
+ mode is active.")
+
;; ========================================================================
;; These shouldn't be changed!
***************
*** 405,429 ****
(defvar highlight-changes-mode nil)
(defvar hilit-chg-list nil)
(defvar hilit-chg-string " ??")
! (or (assq 'highlight-changes-mode minor-mode-alist)
! (setq minor-mode-alist
! (cons '(highlight-changes-mode hilit-chg-string) minor-mode-alist)
! ))
(make-variable-buffer-local 'highlight-changes-mode)
(make-variable-buffer-local 'hilit-chg-string)
- (require 'ediff-init)
- (require 'ediff-util)
-
;;; Functions...
! (defun hilit-chg-map-changes (func &optional start-position end-position)
! "Call function FUNC for each region used by Highlight Changes mode."
! ;; if start-position is nil, (point-min) is used
! ;; if end-position is nil, (point-max) is used
! ;; FUNC is called with 3 params: property start stop
(let ((start (or start-position (point-min)))
(limit (or end-position (point-max)))
prop end)
--- 386,406 ----
(defvar highlight-changes-mode nil)
(defvar hilit-chg-list nil)
(defvar hilit-chg-string " ??")
!
!
(make-variable-buffer-local 'highlight-changes-mode)
+ (make-variable-buffer-local 'highlight-changes-visible-p)
(make-variable-buffer-local 'hilit-chg-string)
;;; Functions...
! (defun hilit-chg-map-changes (func &optional start-position end-position)
! "Call function FUNC for each region used by Highlight Changes mode.
! If START-POSITION is nil, (point-min) is used.
! If END-POSITION is nil, (point-max) is used.
! FUNC is called with 3 params: PROPERTY START STOP."
(let ((start (or start-position (point-min)))
(limit (or end-position (point-max)))
prop end)
***************
*** 438,445 ****
(defun hilit-chg-display-changes (&optional beg end)
"Display face information for Highlight Changes mode.
! An overlay containing a change face is added from the information
! in the text property of type `hilit-chg'.
This is the opposite of `hilit-chg-hide-changes'."
(hilit-chg-map-changes 'hilit-chg-make-ov beg end))
--- 415,422 ----
(defun hilit-chg-display-changes (&optional beg end)
"Display face information for Highlight Changes mode.
! An overlay from BEG to END containing a change face is added from the
! information in the text property of type `hilit-chg'.
This is the opposite of `hilit-chg-hide-changes'."
(hilit-chg-map-changes 'hilit-chg-make-ov beg end))
***************
*** 448,455 ****
(defun hilit-chg-make-ov (prop start end)
(or prop
(error "hilit-chg-make-ov: prop is nil"))
! ;; for the region make change overlays corresponding to
! ;; the text property 'hilit-chg
(let ((ov (make-overlay start end))
face)
(if (eq prop 'hilit-chg-delete)
--- 425,432 ----
(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
! ;; and the text property 'hilit-chg.
(let ((ov (make-overlay start end))
face)
(if (eq prop 'hilit-chg-delete)
***************
*** 457,463 ****
(setq face (nth 1 (member prop hilit-chg-list))))
(if face
(progn
! ;; We must mark the face, that is the purpose of the overlay
(overlay-put ov 'face face)
;; I don't think we need to set evaporate since we should
;; be controlling them!
--- 434,440 ----
(setq face (nth 1 (member prop hilit-chg-list))))
(if face
(progn
! ;; We must mark the face, that is the purpose of the overlay.
(overlay-put ov 'face face)
;; I don't think we need to set evaporate since we should
;; be controlling them!
***************
*** 476,489 ****
This is the opposite of `hilit-chg-display-changes'."
(let ((start (or beg (point-min)))
! (limit (or end (point-max)))
! p ov)
! (setq p (overlays-in start limit))
! (while p
;; don't delete the overlay if it isn't ours!
! (if (overlay-get (car p) 'hilit-chg)
! (delete-overlay (car p)))
! (setq p (cdr p)))))
(defun hilit-chg-fixup (beg end)
"Fix change overlays in region between BEG and END.
--- 453,464 ----
This is the opposite of `hilit-chg-display-changes'."
(let ((start (or beg (point-min)))
! (limit (or end (point-max))))
! (dolist (p (overlays-in start limit))
;; don't delete the overlay if it isn't ours!
! (if (overlay-get p 'hilit-chg)
! (delete-overlay p)))))
!
(defun hilit-chg-fixup (beg end)
"Fix change overlays in region between BEG and END.
***************
*** 492,500 ****
the text properties of type `hilit-chg'."
;; Remove or alter overlays in region beg..end
(let (ov-start ov-end props q)
- ;; temp for debugging:
- ;; (or (eq highlight-changes-mode 'active)
- ;; (error "hilit-chg-fixup called but Highlight Changes mode not active"))
(dolist (ov (overlays-in beg end))
;; Don't alter overlays that are not ours.
(when (overlay-get ov 'hilit-chg)
--- 467,472 ----
***************
*** 541,547 ****
(type 'hilit-chg)
old)
(if undo-in-progress
! (if (eq highlight-changes-mode 'active)
(hilit-chg-fixup beg end))
(if (and (= beg end) (> leng-before 0))
;; deletion
--- 513,520 ----
(type 'hilit-chg)
old)
(if undo-in-progress
! (if (and highlight-changes-mode
! highlight-changes-visible-p)
(hilit-chg-fixup beg end))
(if (and (= beg end) (> leng-before 0))
;; deletion
***************
*** 569,686 ****
(progn
(remove-text-properties end (+ end 1) '(hilit-chg nil))
(put-text-property end (+ end 1) 'hilit-chg 'hilit-chg)
! (if (eq highlight-changes-mode 'active)
(hilit-chg-fixup beg (+ end 1))))))
(unless no-property-change
(put-text-property beg end 'hilit-chg type))
! (if (or (eq highlight-changes-mode 'active) no-property-change)
(hilit-chg-make-ov type beg end))))))
! (defun hilit-chg-set (value)
"Turn on Highlight Changes mode for this buffer."
- (setq highlight-changes-mode value)
(remove-hook 'after-change-functions 'hilit-chg-set-face-on-change t)
(hilit-chg-make-list)
! (if (eq highlight-changes-mode 'active)
(progn
! (setq hilit-chg-string highlight-changes-active-string)
(or buffer-read-only
(hilit-chg-display-changes)))
! ;; mode is passive
! (setq hilit-chg-string highlight-changes-passive-string)
(or buffer-read-only
(hilit-chg-hide-changes)))
(force-mode-line-update)
! (add-hook 'after-change-functions 'hilit-chg-set-face-on-change nil t))
(defun hilit-chg-clear ()
"Remove Highlight Changes mode for this buffer.
This removes all saved change information."
(if buffer-read-only
;; We print the buffer name because this function could be called
! ;; on many buffers from `global-highlight-changes'.
(message "Cannot remove highlighting from read-only mode buffer %s"
(buffer-name))
- (remove-hook 'after-change-functions 'hilit-chg-set-face-on-change t)
(let ((after-change-functions nil))
(hilit-chg-hide-changes)
(hilit-chg-map-changes
'(lambda (prop start stop)
(remove-text-properties start stop '(hilit-chg nil))))
! )
! (setq highlight-changes-mode nil)
! (force-mode-line-update)
! ;; If we type: C-u -1 M-x highlight-changes-mode
! ;; we want to turn it off, but hilit-chg-post-command-hook
! ;; runs and that turns it back on!
! (remove-hook 'post-command-hook 'hilit-chg-post-command-hook)))
;;;###autoload
! (defun highlight-changes-mode (&optional arg)
! "Toggle (or initially set) Highlight Changes mode.
! Without an argument:
! If Highlight Changes mode is not enabled, then enable it (in either active
! or passive state as determined by the variable
! `highlight-changes-initial-state'); otherwise, toggle between active
! and passive state.
!
! With an argument ARG:
! If ARG is positive, set state to active;
! If ARG is zero, set state to passive;
! If ARG is negative, disable Highlight Changes mode completely.
!
! Active state - means changes are shown in a distinctive face.
! Passive state - means changes are kept and new ones recorded but are
! not displayed in a different face.
! Functions:
\\[highlight-changes-next-change] - move point to beginning of next change
\\[highlight-changes-previous-change] - move to beginning of previous change
- \\[highlight-compare-with-file] - mark text as changed by comparing this
- buffer with the contents of a file
\\[highlight-changes-remove-highlight] - remove the change face from the region
! \\[highlight-changes-rotate-faces] - rotate different \"ages\" of changes \
! through
! various faces
Hook variables:
! `highlight-changes-enable-hook' - when enabling Highlight Changes mode
! `highlight-changes-toggle-hook' - when entering active or passive state
! `highlight-changes-disable-hook' - when turning off Highlight Changes mode"
! (interactive "P")
(if (or (display-color-p)
(and (fboundp 'x-display-grayscale-p) (x-display-grayscale-p)))
! (let ((was-on highlight-changes-mode)
! (new-highlight-changes-mode
! (cond
! ((null arg)
! ;; no arg => toggle (or set to active initially)
! (if highlight-changes-mode
! (if (eq highlight-changes-mode 'active) 'passive 'active)
! highlight-changes-initial-state))
! ;; an argument is given
! ((eq arg 'active)
! 'active)
! ((eq arg 'passive)
! 'passive)
! ((> (prefix-numeric-value arg) 0)
! 'active)
! ((< (prefix-numeric-value arg) 0)
! nil)
! (t
! 'passive))))
! (if new-highlight-changes-mode
! ;; mode is turned on -- but may be passive
! (progn
! (hilit-chg-set new-highlight-changes-mode)
! (or was-on
! ;; run highlight-changes-enable-hook once
! (run-hooks 'highlight-changes-enable-hook))
! (run-hooks 'highlight-changes-toggle-hook))
! ;; mode is turned off
! (run-hooks 'highlight-changes-disable-hook)
! (hilit-chg-clear)))
(message "Highlight Changes mode requires color or grayscale display")))
;;;###autoload
--- 542,629 ----
(progn
(remove-text-properties end (+ end 1) '(hilit-chg nil))
(put-text-property end (+ end 1) 'hilit-chg 'hilit-chg)
! (if highlight-changes-visible-p
(hilit-chg-fixup beg (+ end 1))))))
(unless no-property-change
(put-text-property beg end 'hilit-chg type))
! (if (or highlight-changes-visible-p no-property-change)
(hilit-chg-make-ov type beg end))))))
! (defun hilit-chg-set ()
"Turn on Highlight Changes mode for this buffer."
(remove-hook 'after-change-functions 'hilit-chg-set-face-on-change t)
(hilit-chg-make-list)
! (setq highlight-changes-mode t)
! (if highlight-changes-visible-p
! ;; changes are visible
(progn
! (setq hilit-chg-string highlight-changes-visible-string)
(or buffer-read-only
(hilit-chg-display-changes)))
! ;; changes are invisible
! (setq hilit-chg-string highlight-changes-invisible-string)
(or buffer-read-only
(hilit-chg-hide-changes)))
(force-mode-line-update)
! ;; (make-local-hook 'after-change-functions)
! (add-hook 'after-change-functions 'hilit-chg-set-face-on-change nil t)
! (run-hooks 'highlight-changes-enable-hook))
(defun hilit-chg-clear ()
"Remove Highlight Changes mode for this buffer.
This removes all saved change information."
(if buffer-read-only
;; We print the buffer name because this function could be called
! ;; on many buffers from `global-highlight-changes-mode'.
(message "Cannot remove highlighting from read-only mode buffer %s"
(buffer-name))
(let ((after-change-functions nil))
(hilit-chg-hide-changes)
(hilit-chg-map-changes
'(lambda (prop start stop)
(remove-text-properties start stop '(hilit-chg nil))))
! ))
! (remove-hook 'after-change-functions 'hilit-chg-set-face-on-change t)
! (setq highlight-changes-mode nil)
! (force-mode-line-update)
! (run-hooks 'highlight-changes-disable-hook))
;;;###autoload
! (define-minor-mode highlight-changes-mode
! "Toggle Highlight Changes mode.
! 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-toggle-visibility] 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
\\[highlight-changes-previous-change] - move to beginning of previous change
\\[highlight-changes-remove-highlight] - remove the change face from the region
! \\[highlight-changes-rotate-faces] - rotate different \"ages\" of changes
! through various faces.
! \\[highlight-compare-with-file] - mark text as changed by comparing this
! buffer with the contents of a file
! \\[highlight-compare-buffers] highlights differences between two buffers.
Hook variables:
! `highlight-changes-enable-hook': called when enabling Highlight Changes mode.
! `highlight-changes-disable-hook': called when disabling Highlight Changes mode."
! nil ;; init-value
! hilit-chg-string ;; lighter
! nil ;; keymap
(if (or (display-color-p)
(and (fboundp 'x-display-grayscale-p) (x-display-grayscale-p)))
! (if highlight-changes-mode
! ;; it is being turned on
! ;; the hook has been moved into hilit-chg-set
! ;; (run-hooks 'highlight-changes-enable-hook))
! (hilit-chg-set)
! ;; mode is turned off
! (hilit-chg-clear))
(message "Highlight Changes mode requires color or grayscale display")))
;;;###autoload
***************
*** 725,730 ****
--- 668,699 ----
(message "no previous change")))
(message "This buffer is not in Highlight Changes mode.")))
+
+ ;;;###autoload
+ (defun highlight-changes-toggle-visibility (&optional arg)
+ "Toggle whether changes are visible in Highlight Changes modes.
+ While the changes are still kept (and new ones recorded) as long as
+ Highlight Changes modes is on, their distinctive display can be
+ toggled on and off using this command. With ARG, enable the
+ distinctive display if and only if the arg is positive.
+
+ Set variable `highlight-changes-visible-p' if you want to change the default
+ behaviour.
+
+ This command turns on highlight-changes mode."
+ (interactive "P")
+ (let ((old-value highlight-changes-visible-p))
+ (setq highlight-changes-visible-p
+ (if (null arg)
+ (not highlight-changes-visible-p)
+ (> (prefix-numeric-value arg) 0)))
+ (unless (eq old-value highlight-changes-visible-p)
+ (message "changes will now be %s"
+ (if highlight-changes-visible-p "visible" "invisible"))
+ (hilit-chg-set))
+ ))
+
+
;; ========================================================================
(defun hilit-chg-make-list (&optional force)
***************
*** 775,781 ****
;;;###autoload
(defun highlight-changes-rotate-faces ()
! "Rotate the faces used by Highlight Changes mode.
Current changes are displayed in the face described by the first element
of `highlight-changes-face-list', one level older changes are shown in
--- 744,750 ----
;;;###autoload
(defun highlight-changes-rotate-faces ()
! "Rotate the faces if in Highlight Changes mode and the changes are visible.
Current changes are displayed in the face described by the first element
of `highlight-changes-face-list', one level older changes are shown in
***************
*** 788,796 ****
\(add-hook 'write-file-functions 'highlight-changes-rotate-faces nil t)"
(interactive)
! ;; If not in active mode do nothing but don't complain because this
! ;; may be bound to a hook.
! (if (eq highlight-changes-mode 'active)
(let ((after-change-functions nil))
;; ensure hilit-chg-list is made and up to date
(hilit-chg-make-list)
--- 757,764 ----
\(add-hook 'write-file-functions 'highlight-changes-rotate-faces nil t)"
(interactive)
! (if (and highlight-changes-mode
! highlight-changes-visible-p)
(let ((after-change-functions nil))
;; ensure hilit-chg-list is made and up to date
(hilit-chg-make-list)
***************
*** 798,808 ****
(hilit-chg-hide-changes)
;; for each change text property, increment it
(hilit-chg-map-changes 'hilit-chg-bump-change)
! ;; and display them all if active
! (if (eq highlight-changes-mode 'active)
! (hilit-chg-display-changes))))
! ;; This always returns nil so it is safe to use in write-file-functions
! nil)
;; ========================================================================
;; Comparing buffers/files
--- 766,776 ----
(hilit-chg-hide-changes)
;; for each change text property, increment it
(hilit-chg-map-changes 'hilit-chg-bump-change)
! ;; and display them.
! (hilit-chg-display-changes)
! ))
! ;; This always returns nil so it is safe to use in write-file-functions
! nil)
;; ========================================================================
;; Comparing buffers/files
***************
*** 813,818 ****
--- 781,788 ----
"Get differences between two buffers and set highlight changes.
Both buffers are done unless optional parameter MARKUP-A-ONLY
is non-nil."
+ (eval-and-compile
+ (require 'ediff-util))
(save-window-excursion
(let* (change-info
change-a change-b
***************
*** 841,849 ****
(or file-b
(setq temp-b (setq file-b (ediff-make-temp-file buf-b nil))))
(set-buffer buf-a)
! (highlight-changes-mode 'active)
(or markup-a-only (with-current-buffer buf-b
! (highlight-changes-mode 'active)))
(setq change-info (hilit-chg-get-diff-info buf-a file-a buf-b file-b))
--- 811,819 ----
(or file-b
(setq temp-b (setq file-b (ediff-make-temp-file buf-b nil))))
(set-buffer buf-a)
! (highlight-changes-mode 1)
(or markup-a-only (with-current-buffer buf-b
! (highlight-changes-mode 1)))
(setq change-info (hilit-chg-get-diff-info buf-a file-a buf-b file-b))
***************
*** 917,936 ****
If the buffer is read-only, differences will be highlighted but no property
changes are made, so \\[highlight-changes-next-change] and
\\[highlight-changes-previous-change] will not work."
! (interactive (list
! (read-file-name
! "File to compare with? " ;; prompt
! "" ;; directory
! nil ;; default
! 'yes ;; must exist
! (let ((f (buffer-file-name (current-buffer))))
! (if f
! (progn
! (setq f (make-backup-file-name f))
! (or (file-exists-p f)
! (setq f nil)))
! )
! f))))
(let* ((buf-a (current-buffer))
(file-a (buffer-file-name))
(existing-buf (get-file-buffer file-b))
--- 887,909 ----
If the buffer is read-only, differences will be highlighted but no property
changes are made, so \\[highlight-changes-next-change] and
\\[highlight-changes-previous-change] will not work."
! (interactive
! (let ((file buffer-file-name)
! (file-name nil)
! (file-dir nil))
! (and file
! (setq file-name (file-name-nondirectory file)
! file-dir (file-name-directory file)))
! (setq file-name (make-backup-file-name file-name))
! (unless (file-exists-p file-name)
! (setq file-name nil))
! (list (read-file-name
! "Find alternate file: " ;; prompt
! file-dir ;; directory
! nil ;; default
! nil ;; existing
! file-name) ;; initial
! )))
(let* ((buf-a (current-buffer))
(file-a (buffer-file-name))
(existing-buf (get-file-buffer file-b))
***************
*** 998,1122 ****
;; No point in returning a value, since this is a hook function.
))
! ;; ======================= automatic stuff ==============
!
! ;; Global Highlight Changes mode is modeled after Global Font-lock mode.
! ;; Three hooks are used to gain control. When Global Changes Mode is
! ;; enabled, `find-file-hook' and `change-major-mode-hook' are set.
! ;; `find-file-hook' is called when visiting a file, the new mode is
! ;; known at this time.
! ;; `change-major-mode-hook' is called when a buffer is changing mode.
! ;; This could be because of finding a file in which case
! ;; `find-file-hook' has already been called and has done its work.
! ;; However, it also catches the case where a new mode is being set by
! ;; the user. However, it is called from `kill-all-variables' and at
! ;; this time the mode is the old mode, which is not what we want.
! ;; So, our function temporarily sets `post-command-hook' which will
! ;; be called after the buffer has been completely set up (with the new
! ;; mode). It then removes the `post-command-hook'.
! ;; One other wrinkle - every M-x command runs the `change-major-mode-hook'
! ;; so we ignore this by examining the buffer name.
!
!
! (defun hilit-chg-major-mode-hook ()
! (add-hook 'post-command-hook 'hilit-chg-post-command-hook))
!
! (defun hilit-chg-post-command-hook ()
! ;; This is called after changing a major mode, but also after each
! ;; M-x command, in which case the current buffer is a minibuffer.
! ;; In that case, do not act on it here, but don't turn it off
! ;; either, we will get called here again soon-after.
! ;; Also, don't enable it for other special buffers.
! (if (string-match "^[ *]" (buffer-name))
! nil ;; (message "ignoring this post-command-hook")
! (remove-hook 'post-command-hook 'hilit-chg-post-command-hook)
! ;; The following check isn't necessary, since
! ;; hilit-chg-turn-on-maybe makes this check too.
! (or highlight-changes-mode ;; don't turn it on if it already is
! (hilit-chg-turn-on-maybe highlight-changes-global-initial-state))))
!
! (defun hilit-chg-check-global ()
! ;; This is called from the find file hook.
! (hilit-chg-turn-on-maybe highlight-changes-global-initial-state))
!
;;;###autoload
! (defun global-highlight-changes (&optional arg)
! "Turn on or off global Highlight Changes mode.
!
! When called interactively:
! - if no prefix, toggle global Highlight Changes mode on or off
! - if called with a positive prefix (or just C-u) turn it on in active mode
! - if called with a zero prefix turn it on in passive mode
! - if called with a negative prefix turn it off
!
! When called from a program:
! - if ARG is nil or omitted, turn it off
! - if ARG is `active', turn it on in active mode
! - if ARG is `passive', turn it on in passive mode
! - otherwise just turn it on
!
! When global Highlight Changes mode is enabled, Highlight Changes mode is turned
! on for future \"suitable\" buffers (and for \"suitable\" existing buffers if
! variable `highlight-changes-global-changes-existing-buffers' is non-nil).
! \"Suitability\" is determined by variable `highlight-changes-global-modes'."
!
! (interactive
! (list
! (cond
! ((null current-prefix-arg)
! ;; no arg => toggle it on/off
! (setq global-highlight-changes (not global-highlight-changes)))
! ;; positive interactive arg - turn it on as active
! ((> (prefix-numeric-value current-prefix-arg) 0)
! (setq global-highlight-changes t)
! 'active)
! ;; zero interactive arg - turn it on as passive
! ((= (prefix-numeric-value current-prefix-arg) 0)
! (setq global-highlight-changes t)
! 'passive)
! ;; negative interactive arg - turn it off
! (t
! (setq global-highlight-changes nil)
! nil))))
!
! (if arg
! (progn
! (if (eq arg 'active)
! (setq highlight-changes-global-initial-state 'active)
! (if (eq arg 'passive)
! (setq highlight-changes-global-initial-state 'passive)))
! (setq global-highlight-changes t)
! (message "Turning ON Global Highlight Changes mode in %s state"
! highlight-changes-global-initial-state)
! ;; FIXME: Not sure what this was intended to do. --Stef
! ;; (add-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook)
! (add-hook 'find-file-hook 'hilit-chg-check-global)
! (if highlight-changes-global-changes-existing-buffers
! (hilit-chg-update-all-buffers
! highlight-changes-global-initial-state)))
!
! (message "Turning OFF global Highlight Changes mode")
! ;; FIXME: Not sure what this was intended to do. --Stef
! ;; (remove-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook)
! (remove-hook 'post-command-hook 'hilit-chg-post-command-hook)
! (remove-hook 'find-file-hook 'hilit-chg-check-global)
! (if highlight-changes-global-changes-existing-buffers
! (hilit-chg-update-all-buffers nil))))
!
!
! (defun hilit-chg-turn-on-maybe (value)
! "Turn on Highlight Changes mode if it is appropriate for this buffer.
!
! A buffer is appropriate for Highlight Changes mode if all these are true:
! - the buffer is not a special buffer (one whose name begins with
! `*' or ` '),
! - the buffer's mode is suitable as per variable
! `highlight-changes-global-modes',
! - Highlight Changes mode is not already on for this buffer.
!
! This function is called from `hilit-chg-update-all-buffers' or
! from `global-highlight-changes' when turning on global Highlight Changes mode."
(or highlight-changes-mode ; do nothing if already on
(if
(cond
--- 971,1012 ----
;; No point in returning a value, since this is a hook function.
))
! ;; ======================= global-highlight-changes-mode ==============
;;;###autoload
! (define-global-minor-mode global-highlight-changes-mode highlight-changes-mode
! highlight-changes-mode-turn-on
! :turn-off highlight-changes-mode-turn-off)
!
! (define-obsolete-function-alias 'global-highlight-changes
! 'global-highlight-changes-mode "22.1")
!
! (defvar highlight-changes-mode-turn-off-fn nil
! "*If non-nil, its value is a function to maybe turn off highlight changes mode.
! It is called by global-highlight-changes-mode when that mode is turned off.
! It will be called for each buffer that is in highlight changes mode.
!
! To turn highlight changes mode off for that buffer it should call
! (highlight-changes-mode -1)
! To leave the buffer in highlight changes mode it need do nothing.
!
! Example: to have it leave all buffers in highlight changes mode:
! (defun nop ())
! (setq highlight-changes-mode-turn-off-fn 'nop)
! or using an anonymous function:
! (setq highlight-changes-mode-turn-off-fn '(lambda nil))")
!
! (defun highlight-changes-mode-turn-off ()
! "Turn off Highlight Changes mode in all buffers.
! If variable `highlight-changes-mode-turn-off-fn' is non-nil then that function
! is called; otherwise highlight-changes-mode is turned off directly."
! (if highlight-changes-mode-turn-off-fn
! (funcall highlight-changes-mode-turn-off-fn)
! (highlight-changes-mode -1)))
!
! (defun highlight-changes-mode-turn-on ()
! "See if highlight-changes-mode should be turned on for this buffer.
! This is called when global-highlight-changes-mode is turned on."
(or highlight-changes-mode ; do nothing if already on
(if
(cond
***************
*** 1132,1159 ****
(and
(not (string-match "^[ *]" (buffer-name)))
(buffer-file-name))))
! (progn
! (hilit-chg-set value)
! (run-hooks 'highlight-changes-enable-hook)))))
!
!
! (defun hilit-chg-turn-off-maybe ()
! (if highlight-changes-mode
! (progn
! (run-hooks 'highlight-changes-disable-hook)
! (hilit-chg-clear))))
!
- (defun hilit-chg-update-all-buffers (value)
- (mapc
- (function (lambda (buffer)
- (with-current-buffer buffer
- (if value
- (hilit-chg-turn-on-maybe value)
- (hilit-chg-turn-off-maybe))
- )))
- (buffer-list))
- nil)
;;;; Desktop support.
--- 1022,1030 ----
(and
(not (string-match "^[ *]" (buffer-name)))
(buffer-file-name))))
! (highlight-changes-mode 1))
! ))
;;;; Desktop support.
***************
*** 1163,1169 ****
(or (cdr (assq 'highlight-changes-mode desktop-buffer-locals)) 1)))
(add-to-list 'desktop-minor-mode-handlers
! '(highlight-changes-mode . hilit-chg-desktop-restore))
(add-to-list 'desktop-locals-to-save 'highlight-changes-mode)
--- 1034,1040 ----
(or (cdr (assq 'highlight-changes-mode desktop-buffer-locals)) 1)))
(add-to-list 'desktop-minor-mode-handlers
! '(highlight-changes-mode . hilit-chg-desktop-restore))
(add-to-list 'desktop-locals-to-save 'highlight-changes-mode)
***************
*** 1174,1183 ****
;; (interactive)
;; (message "--- hilit-chg-debug-show ---")
;; (hilit-chg-map-changes '(lambda (prop start end)
! ;; (message "%d-%d: %s" start end prop)
! ;; )
! ;; beg end
! ;; ))
;;
;; ================== end of debug ===============
--- 1045,1054 ----
;; (interactive)
;; (message "--- hilit-chg-debug-show ---")
;; (hilit-chg-map-changes '(lambda (prop start end)
! ;; (message "%d-%d: %s" start end prop)
! ;; )
! ;; beg end
! ;; ))
;;
;; ================== end of debug ===============
[-- Attachment #3: message body text --]
[-- Type: text/plain, Size: 51 bytes --]
they need this change to emacs-lisp/easy-mmode.el
[-- Attachment #4: lisp/emacs-lisp/easy-mmode.el.cdif --]
[-- Type: application/octet-stream, Size: 4574 bytes --]
*** easy-mmode.el.orig Thu Aug 31 19:14:26 2006
--- easy-mmode.el Wed Dec 6 20:46:14 2006
***************
*** 279,290 ****
and that should try to turn MODE on if applicable for that buffer.
KEYS is a list of CL-style keyword arguments. As the minor mode
defined by this function is always global, any :global keyword is
! ignored. Other keywords have the same meaning as in `define-minor-mode',
! which see. In particular, :group specifies the custom group.
! The most useful keywords are those that are passed on to the
! `defcustom'. It normally makes no sense to pass the :lighter
! or :keymap keywords to `define-global-minor-mode', since these
! are usually passed to the buffer-local version of the minor mode.
If MODE's set-up depends on the major mode in effect when it was
enabled, then disabling and reenabling MODE should make MODE work
--- 279,294 ----
and that should try to turn MODE on if applicable for that buffer.
KEYS is a list of CL-style keyword arguments. As the minor mode
defined by this function is always global, any :global keyword is
! ignored. The turn-off keyword allows a function to be called to
! conditionally turn off the mode in a buffer similar to TURN-ON; if
! omitted then the mode is unconditinoally turned off. Other
! keywords have the same meaning as in `define-minor-mode', which
! see. In particular,
! :group specifies the custom group. The most useful keywords are
! those that are passed on to the `defcustom'. It normally makes no
! sense to pass the :lighter or :keymap keywords to
! `define-global-minor-mode', since these are usually passed to the
! buffer-local version of the minor mode.
If MODE's set-up depends on the major mode in effect when it was
enabled, then disabling and reenabling MODE should make MODE work
***************
*** 304,309 ****
--- 308,314 ----
(intern (concat global-mode-name "-check-buffers")))
(MODE-cmhh (intern (concat global-mode-name "-cmhh")))
(MODE-major-mode (intern (concat (symbol-name mode) "-major-mode")))
+ (turn-off nil)
keyw)
;; Check keys.
***************
*** 312,317 ****
--- 317,323 ----
(case keyw
(:group (setq group (nconc group (list :group (pop keys)))))
(:global (setq keys (cdr keys)))
+ (:turn-off (setq turn-off (pop keys)))
(t (push keyw extra-keywords) (push (pop keys) extra-keywords))))
(unless group
***************
*** 320,335 ****
`(:group ',(intern (replace-regexp-in-string
"-mode\\'" "" (symbol-name mode))))))
`(progn
(defvar ,MODE-major-mode nil)
(make-variable-buffer-local ',MODE-major-mode)
;; The actual global minor-mode
(define-minor-mode ,global-mode
! ,(format "Toggle %s in every buffer.
With prefix ARG, turn %s on if and only if ARG is positive.
%s is actually not turned on in every buffer but only in those
! in which `%s' turns it on."
! pretty-name pretty-global-name pretty-name turn-on)
:global t ,@group ,@(nreverse extra-keywords)
;; Setup hook to handle future mode changes and new buffers.
--- 326,348 ----
`(:group ',(intern (replace-regexp-in-string
"-mode\\'" "" (symbol-name mode))))))
+ (or turn-off
+ (setq turn-off `(,mode -1)))
`(progn
(defvar ,MODE-major-mode nil)
(make-variable-buffer-local ',MODE-major-mode)
;; The actual global minor-mode
(define-minor-mode ,global-mode
! ,(concat (format
! "Toggle %s in every buffer.
With prefix ARG, turn %s on if and only if ARG is positive.
%s is actually not turned on in every buffer but only in those
! in which `%s' turns it on"
! pretty-name pretty-global-name pretty-name turn-on)
! (if turn-off
! (format
! ", and is only turned off in those buffers where `%s' does so." turn-off)
! "."))
:global t ,@group ,@(nreverse extra-keywords)
;; Setup hook to handle future mode changes and new buffers.
***************
*** 346,352 ****
;; Go through existing buffers.
(dolist (buf (buffer-list))
(with-current-buffer buf
! (if ,global-mode (,turn-on) (when ,mode (,mode -1))))))
;; Autoloading define-global-minor-mode autoloads everything
;; up-to-here.
--- 359,365 ----
;; Go through existing buffers.
(dolist (buf (buffer-list))
(with-current-buffer buf
! (if ,global-mode (,turn-on) (when ,mode (,turn-off))))))
;; Autoloading define-global-minor-mode autoloads everything
;; up-to-here.
[-- Attachment #5: message body text --]
[-- Type: text/plain, Size: 638 bytes --]
and here are the Changelog entries:
2006-12-11 Richard Sharman <rsharman@pobox.com>
* easy-mmode.el (define-global-minor-mode): added keyword `turn-off'.
* hilit-chg.el (highlight-changes-mode): be more consistent with
other minor modes, this function now just toggles. Removed
variable highlight-changes-toggle-hook.
(highlight-changes-toggle-visibility): new function to allow
toggling on/off the visibility of changes (previously done in
highlight-changes-mode).
(global-highlight-changes-mode): renamed from global-highlight-changes,
be more consistent with other modes.
(highlight-compare-buffers): new function.
[-- Attachment #6: Type: text/plain, Size: 142 bytes --]
_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel
next prev parent reply other threads:[~2006-12-12 3:16 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <17721.60660.980363.609046@kahikatea.snap.net.nz>
2006-10-23 5:11 ` highlight-changes-mode Richard Stallman
2006-10-23 18:39 ` highlight-changes-mode Richard Stallman
2006-10-24 0:16 ` highlight-changes-mode rsharman
2006-10-24 17:43 ` highlight-changes-mode Richard Stallman
2006-11-27 1:57 ` highlight-changes-mode rsharman
2006-11-27 6:43 ` highlight-changes-mode Nick Roberts
2006-11-28 2:15 ` highlight-changes-mode rsharman
2006-12-06 6:25 ` highlight-changes-mode rsharman
2006-12-06 6:37 ` highlight-changes-mode rsharman
2006-12-06 18:44 ` highlight-changes-mode Richard Stallman
2006-12-06 19:58 ` highlight-changes-mode Drew Adams
2006-12-07 21:02 ` highlight-changes-mode Richard Stallman
2006-12-07 21:13 ` highlight-changes-mode Drew Adams
2006-12-09 18:55 ` global minor modes that can be overridden locally? [was: highlight-changes-mode] Drew Adams
2006-12-11 1:06 ` Richard Stallman
2006-12-11 1:16 ` Lennart Borgman
2006-12-11 1:45 ` Drew Adams
2006-12-11 1:52 ` Lennart Borgman
2006-12-11 1:58 ` Drew Adams
2006-12-12 2:57 ` Richard Stallman
2006-12-12 3:27 ` Lennart Borgman
2006-12-12 21:45 ` Richard Stallman
2006-12-12 23:02 ` Lennart Borgman
2006-12-12 4:06 ` Drew Adams
2006-12-12 4:25 ` global minor modes that can be overridden locally? Miles Bader
2006-12-12 5:00 ` Drew Adams
2006-12-29 16:25 ` Drew Adams
2006-12-29 22:15 ` Stefan Monnier
2006-12-29 22:40 ` Drew Adams
2006-12-30 6:24 ` Richard Stallman
2006-12-30 8:25 ` Drew Adams
2006-12-31 1:46 ` Richard Stallman
2006-12-30 22:43 ` Kim F. Storm
2006-12-30 23:27 ` Lennart Borgman (gmail)
2006-12-30 6:23 ` Richard Stallman
2006-12-12 11:08 ` Juanma Barranquero
2006-12-12 11:15 ` Miles Bader
2006-12-12 11:25 ` Juanma Barranquero
2006-12-12 11:33 ` Miles Bader
2006-12-12 11:59 ` Juanma Barranquero
2006-12-11 1:40 ` global minor modes that can be overridden locally? [was:highlight-changes-mode] Drew Adams
2006-12-12 2:58 ` Richard Stallman
2006-12-12 4:08 ` global minor modes that can be overridden locally?[was:highlight-changes-mode] Drew Adams
2006-12-12 21:45 ` Richard Stallman
2006-12-06 23:39 ` highlight-changes-mode rsharman
2006-12-07 21:03 ` highlight-changes-mode Richard Stallman
2006-12-09 19:40 ` highlight-changes-mode rsharman
2006-12-11 1:06 ` highlight-changes-mode Richard Stallman
2006-12-11 9:15 ` highlight-changes-mode Kim F. Storm
2006-12-12 2:58 ` highlight-changes-mode Richard Stallman
2006-12-12 3:16 ` rsharman [this message]
2006-12-12 21:45 ` highlight-changes-mode Richard Stallman
2006-12-12 23:33 ` highlight-changes-mode rsharman
2006-12-14 5:29 ` highlight-changes-mode Richard Stallman
2006-11-27 15:38 ` highlight-changes-mode Richard Stallman
2006-11-28 2:04 ` highlight-changes-mode rsharman
2006-12-05 2:42 ` highlight-changes-mode rsharman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=17790.7963.202286.387900@cube.homenetwork \
--to=rsharman@pobox.com \
--cc=emacs-devel@gnu.org \
--cc=nickrob@snap.net.nz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).