comparison lisp/compare-w.el @ 69127:a7ce66a8df73

(compare-windows-highlight): Add new value `persistent' and change :type from `boolean' to `choice'. (compare-windows-overlays1, compare-windows-overlays2): New internal variables. (compare-windows-highlight): If compare-windows-highlight is `persistent', add current overlays to compare-windows-overlays[12] instead of adding compare-windows-dehighlight to pre-command-hook. (compare-windows-dehighlight): Delete all overlays from compare-windows-overlays[12].
author Juri Linkov <juri@jurta.org>
date Thu, 23 Feb 2006 21:41:26 +0000
parents 3bd95f4f2941
children 7b77bbd3e40c 34c8b755296d
comparison
equal deleted inserted replaced
69126:0a4cb581dcfa 69127:a7ce66a8df73
115 :type '(list sexp sexp) 115 :type '(list sexp sexp)
116 :group 'compare-w 116 :group 'compare-w
117 :version "22.1") 117 :version "22.1")
118 118
119 (defcustom compare-windows-highlight t 119 (defcustom compare-windows-highlight t
120 "*Non-nil means compare-windows highlights the differences." 120 "*Non-nil means compare-windows highlights the differences.
121 :type 'boolean 121 The value t removes highlighting immediately after invoking a command
122 other than `compare-windows'.
123 The value `persistent' leaves all highlighted differences. You can clear
124 out all highlighting later with the command `compare-windows-dehighlight'."
125 :type '(choice (const :tag "No highlighting" nil)
126 (const :tag "Persistent highlighting" persistent)
127 (other :tag "Highlight until next command" t))
122 :group 'compare-w 128 :group 'compare-w
123 :version "22.1") 129 :version "22.1")
124 130
125 (defface compare-windows 131 (defface compare-windows
126 '((t :inherit lazy-highlight)) 132 '((t :inherit lazy-highlight))
128 :group 'compare-w 134 :group 'compare-w
129 :version "22.1") 135 :version "22.1")
130 136
131 (defvar compare-windows-overlay1 nil) 137 (defvar compare-windows-overlay1 nil)
132 (defvar compare-windows-overlay2 nil) 138 (defvar compare-windows-overlay2 nil)
139 (defvar compare-windows-overlays1 nil)
140 (defvar compare-windows-overlays2 nil)
133 (defvar compare-windows-sync-point nil) 141 (defvar compare-windows-sync-point nil)
134 142
135 ;;;###autoload 143 ;;;###autoload
136 (defun compare-windows (ignore-whitespace) 144 (defun compare-windows (ignore-whitespace)
137 "Compare text in current window with text in next window. 145 "Compare text in current window with text in next window.
349 (move-overlay compare-windows-overlay2 beg2 end2 b2) 357 (move-overlay compare-windows-overlay2 beg2 end2 b2)
350 (setq compare-windows-overlay2 (make-overlay beg2 end2 b2)) 358 (setq compare-windows-overlay2 (make-overlay beg2 end2 b2))
351 (overlay-put compare-windows-overlay2 'face 'compare-windows) 359 (overlay-put compare-windows-overlay2 'face 'compare-windows)
352 (overlay-put compare-windows-overlay2 'priority 1000)) 360 (overlay-put compare-windows-overlay2 'priority 1000))
353 (overlay-put compare-windows-overlay2 'window w2) 361 (overlay-put compare-windows-overlay2 'window w2)
354 ;; Remove highlighting before next command is executed 362 (if (not (eq compare-windows-highlight 'persistent))
355 (add-hook 'pre-command-hook 'compare-windows-dehighlight))) 363 ;; Remove highlighting before next command is executed
364 (add-hook 'pre-command-hook 'compare-windows-dehighlight)
365 (when compare-windows-overlay1
366 (push (copy-overlay compare-windows-overlay1) compare-windows-overlays1)
367 (delete-overlay compare-windows-overlay1))
368 (when compare-windows-overlay2
369 (push (copy-overlay compare-windows-overlay2) compare-windows-overlays2)
370 (delete-overlay compare-windows-overlay2)))))
356 371
357 (defun compare-windows-dehighlight () 372 (defun compare-windows-dehighlight ()
358 "Remove highlighting created by `compare-windows-highlight'." 373 "Remove highlighting created by `compare-windows-highlight'."
359 (interactive) 374 (interactive)
360 (remove-hook 'pre-command-hook 'compare-windows-dehighlight) 375 (remove-hook 'pre-command-hook 'compare-windows-dehighlight)
376 (mapc 'delete-overlay compare-windows-overlays1)
377 (mapc 'delete-overlay compare-windows-overlays2)
361 (and compare-windows-overlay1 (delete-overlay compare-windows-overlay1)) 378 (and compare-windows-overlay1 (delete-overlay compare-windows-overlay1))
362 (and compare-windows-overlay2 (delete-overlay compare-windows-overlay2))) 379 (and compare-windows-overlay2 (delete-overlay compare-windows-overlay2)))
363 380
364 (provide 'compare-w) 381 (provide 'compare-w)
365 382