Mercurial > emacs
comparison lisp/compare-w.el @ 58601:4663989dd34a
(compare-windows-highlight): Attach each overlay
to its window to properly highlight differences while comparing
two windows of the same buffer. Fix arguments.
(compare-windows-sync-default-function): Fix arguments of
`compare-windows-highlight'.
author | Juri Linkov <juri@jurta.org> |
---|---|
date | Sun, 28 Nov 2004 07:56:01 +0000 |
parents | 48114a286f9e |
children | b14224937156 f2ebccfa87d4 |
comparison
equal
deleted
inserted
replaced
58600:dae5b7bb7dac | 58601:4663989dd34a |
---|---|
281 ;; On the first call both matching points are computed, | 281 ;; On the first call both matching points are computed, |
282 ;; and one of them is stored in compare-windows-sync-point | 282 ;; and one of them is stored in compare-windows-sync-point |
283 ;; to be used when this function is called on second window. | 283 ;; to be used when this function is called on second window. |
284 (defun compare-windows-sync-default-function () | 284 (defun compare-windows-sync-default-function () |
285 (if (not compare-windows-sync-point) | 285 (if (not compare-windows-sync-point) |
286 (let* ((w2 (next-window (selected-window))) | 286 (let* ((w1 (selected-window)) |
287 (w2 (next-window w1)) | |
287 (b2 (window-buffer w2)) | 288 (b2 (window-buffer w2)) |
288 (point-max2 (with-current-buffer b2 (point-max))) | 289 (point-max2 (with-current-buffer b2 (point-max))) |
289 (op2 (window-point w2)) | 290 (op2 (window-point w2)) |
290 (op1 (point)) | 291 (op1 (point)) |
291 (region-size compare-windows-sync-string-size) | 292 (region-size compare-windows-sync-string-size) |
324 (setq p1 (1+ p1))))) | 325 (setq p1 (1+ p1))))) |
325 (when p12s | 326 (when p12s |
326 ;; use closest matching points (i.e. points with minimal sum) | 327 ;; use closest matching points (i.e. points with minimal sum) |
327 (setq p12 (cdr (assq (apply 'min (mapcar 'car p12s)) p12s))) | 328 (setq p12 (cdr (assq (apply 'min (mapcar 'car p12s)) p12s))) |
328 (goto-char (car p12)) | 329 (goto-char (car p12)) |
329 (compare-windows-highlight op1 (car p12) op2 (cadr p12) b2)) | 330 (compare-windows-highlight op1 (car p12) (current-buffer) w1 |
331 op2 (cadr p12) b2 w2)) | |
330 (setq compare-windows-sync-point (or (cadr p12) t))) | 332 (setq compare-windows-sync-point (or (cadr p12) t))) |
331 ;; else set point in the second window to the pre-calculated value | 333 ;; else set point in the second window to the pre-calculated value |
332 (if (numberp compare-windows-sync-point) | 334 (if (numberp compare-windows-sync-point) |
333 (goto-char compare-windows-sync-point)) | 335 (goto-char compare-windows-sync-point)) |
334 (setq compare-windows-sync-point nil))) | 336 (setq compare-windows-sync-point nil))) |
335 | 337 |
336 ;; Highlight differences | 338 ;; Highlight differences |
337 (defun compare-windows-highlight (beg1 end1 beg2 end2 buf2) | 339 (defun compare-windows-highlight (beg1 end1 b1 w1 beg2 end2 b2 w2) |
338 (when compare-windows-highlight | 340 (when compare-windows-highlight |
339 (if compare-windows-overlay1 | 341 (if compare-windows-overlay1 |
340 (move-overlay compare-windows-overlay1 beg1 end1 (current-buffer)) | 342 (move-overlay compare-windows-overlay1 beg1 end1 b1) |
341 (setq compare-windows-overlay1 (make-overlay beg1 end1 (current-buffer))) | 343 (setq compare-windows-overlay1 (make-overlay beg1 end1 b1)) |
342 (overlay-put compare-windows-overlay1 'face 'compare-windows-face) | 344 (overlay-put compare-windows-overlay1 'face 'compare-windows-face) |
343 (overlay-put compare-windows-overlay1 'priority 1)) | 345 (overlay-put compare-windows-overlay1 'priority 1)) |
346 (overlay-put compare-windows-overlay1 'window w1) | |
344 (if compare-windows-overlay2 | 347 (if compare-windows-overlay2 |
345 (move-overlay compare-windows-overlay2 beg2 end2 buf2) | 348 (move-overlay compare-windows-overlay2 beg2 end2 b2) |
346 (setq compare-windows-overlay2 (make-overlay beg2 end2 buf2)) | 349 (setq compare-windows-overlay2 (make-overlay beg2 end2 b2)) |
347 (overlay-put compare-windows-overlay2 'face 'compare-windows-face) | 350 (overlay-put compare-windows-overlay2 'face 'compare-windows-face) |
348 (overlay-put compare-windows-overlay2 'priority 1)) | 351 (overlay-put compare-windows-overlay2 'priority 1)) |
352 (overlay-put compare-windows-overlay2 'window w2) | |
349 ;; Remove highlighting before next command is executed | 353 ;; Remove highlighting before next command is executed |
350 (add-hook 'pre-command-hook 'compare-windows-dehighlight))) | 354 (add-hook 'pre-command-hook 'compare-windows-dehighlight))) |
351 | 355 |
352 (defun compare-windows-dehighlight () | 356 (defun compare-windows-dehighlight () |
353 "Remove highlighting created by `compare-windows-highlight'." | 357 "Remove highlighting created by `compare-windows-highlight'." |