Mercurial > hg > xemacs-beta
comparison lisp/ediff/ediff-util.el @ 181:bfd6434d15b3 r20-3b17
Import from CVS: tag r20-3b17
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:53:19 +0200 |
parents | 2d532a89d707 |
children | 3d6bfa290dbd |
comparison
equal
deleted
inserted
replaced
180:add28d59e586 | 181:bfd6434d15b3 |
---|---|
258 (if (stringp file-C) | 258 (if (stringp file-C) |
259 (setq file-C | 259 (setq file-C |
260 (ediff-convert-standard-filename (expand-file-name file-C)))) | 260 (ediff-convert-standard-filename (expand-file-name file-C)))) |
261 (let* ((control-buffer-name | 261 (let* ((control-buffer-name |
262 (ediff-unique-buffer-name "*Ediff Control Panel" "*")) | 262 (ediff-unique-buffer-name "*Ediff Control Panel" "*")) |
263 (control-buffer (ediff-eval-in-buffer buffer-A | 263 (control-buffer (ediff-with-current-buffer buffer-A |
264 (get-buffer-create control-buffer-name)))) | 264 (get-buffer-create control-buffer-name)))) |
265 (ediff-eval-in-buffer control-buffer | 265 (ediff-with-current-buffer control-buffer |
266 (ediff-mode) | 266 (ediff-mode) |
267 | 267 |
268 (make-local-variable 'ediff-use-long-help-message) | 268 (make-local-variable 'ediff-use-long-help-message) |
269 (make-local-variable 'ediff-prefer-iconified-control-frame) | 269 (make-local-variable 'ediff-prefer-iconified-control-frame) |
270 (make-local-variable 'ediff-split-window-function) | 270 (make-local-variable 'ediff-split-window-function) |
323 (get-buffer-create | 323 (get-buffer-create |
324 (ediff-unique-buffer-name "*ediff-merge" "*"))) | 324 (ediff-unique-buffer-name "*ediff-merge" "*"))) |
325 (save-excursion | 325 (save-excursion |
326 (set-buffer buffer-C) | 326 (set-buffer buffer-C) |
327 (insert-buffer buf) | 327 (insert-buffer buf) |
328 (funcall (ediff-eval-in-buffer buf major-mode)) | 328 (funcall (ediff-with-current-buffer buf major-mode)) |
329 ;; after Stig@hackvan.com | 329 ;; after Stig@hackvan.com |
330 (add-hook 'local-write-file-hooks 'ediff-set-merge-mode nil t) | 330 (add-hook 'local-write-file-hooks 'ediff-set-merge-mode nil t) |
331 ))) | 331 ))) |
332 (setq buffer-read-only nil | 332 (setq buffer-read-only nil |
333 ediff-buffer-A buffer-A | 333 ediff-buffer-A buffer-A |
352 0)))))) | 352 0)))))) |
353 | 353 |
354 (setq ediff-error-buffer | 354 (setq ediff-error-buffer |
355 (get-buffer-create (ediff-unique-buffer-name "*ediff-errors" "*"))) | 355 (get-buffer-create (ediff-unique-buffer-name "*ediff-errors" "*"))) |
356 | 356 |
357 (ediff-eval-in-buffer buffer-A (ediff-strip-mode-line-format)) | 357 (ediff-with-current-buffer buffer-A (ediff-strip-mode-line-format)) |
358 (ediff-eval-in-buffer buffer-B (ediff-strip-mode-line-format)) | 358 (ediff-with-current-buffer buffer-B (ediff-strip-mode-line-format)) |
359 (if ediff-3way-job | 359 (if ediff-3way-job |
360 (ediff-eval-in-buffer buffer-C (ediff-strip-mode-line-format))) | 360 (ediff-with-current-buffer buffer-C (ediff-strip-mode-line-format))) |
361 (if (ediff-buffer-live-p ediff-ancestor-buffer) | 361 (if (ediff-buffer-live-p ediff-ancestor-buffer) |
362 (ediff-eval-in-buffer ediff-ancestor-buffer | 362 (ediff-with-current-buffer ediff-ancestor-buffer |
363 (ediff-strip-mode-line-format))) | 363 (ediff-strip-mode-line-format))) |
364 | 364 |
365 (ediff-save-protected-variables) ; save variables to be restored on exit | 365 (ediff-save-protected-variables) ; save variables to be restored on exit |
366 | 366 |
367 ;; ediff-setup-diff-regions-function must be set after setup | 367 ;; ediff-setup-diff-regions-function must be set after setup |
390 | 390 |
391 ;; set up ediff-narrow-bounds, if not set | 391 ;; set up ediff-narrow-bounds, if not set |
392 (or ediff-narrow-bounds | 392 (or ediff-narrow-bounds |
393 (setq ediff-narrow-bounds ediff-wide-bounds)) | 393 (setq ediff-narrow-bounds ediff-wide-bounds)) |
394 | 394 |
395 ;; All these must be inside ediff-eval-in-buffer control-buffer, | 395 ;; All these must be inside ediff-with-current-buffer control-buffer, |
396 ;; since these vars are local to control-buffer | 396 ;; since these vars are local to control-buffer |
397 ;; These won't run if there are errors in diff | 397 ;; These won't run if there are errors in diff |
398 (ediff-eval-in-buffer ediff-buffer-A | 398 (ediff-with-current-buffer ediff-buffer-A |
399 (ediff-nuke-selective-display) | 399 (ediff-nuke-selective-display) |
400 (run-hooks 'ediff-prepare-buffer-hook) | 400 (run-hooks 'ediff-prepare-buffer-hook) |
401 (if (ediff-eval-in-buffer control-buffer ediff-merge-job) | 401 (if (ediff-with-current-buffer control-buffer ediff-merge-job) |
402 (setq buffer-read-only t)) | 402 (setq buffer-read-only t)) |
403 ;; add control-buffer to the list of sessions--no longer used, but may | 403 ;; add control-buffer to the list of sessions--no longer used, but may |
404 ;; be used again in the future | 404 ;; be used again in the future |
405 (or (memq control-buffer ediff-this-buffer-ediff-sessions) | 405 (or (memq control-buffer ediff-this-buffer-ediff-sessions) |
406 (setq ediff-this-buffer-ediff-sessions | 406 (setq ediff-this-buffer-ediff-sessions |
407 (cons control-buffer ediff-this-buffer-ediff-sessions))) | 407 (cons control-buffer ediff-this-buffer-ediff-sessions))) |
408 (if ediff-make-buffers-readonly-at-startup | 408 (if ediff-make-buffers-readonly-at-startup |
409 (setq buffer-read-only t)) | 409 (setq buffer-read-only t)) |
410 ) | 410 ) |
411 | 411 |
412 (ediff-eval-in-buffer ediff-buffer-B | 412 (ediff-with-current-buffer ediff-buffer-B |
413 (ediff-nuke-selective-display) | 413 (ediff-nuke-selective-display) |
414 (run-hooks 'ediff-prepare-buffer-hook) | 414 (run-hooks 'ediff-prepare-buffer-hook) |
415 (if (ediff-eval-in-buffer control-buffer ediff-merge-job) | 415 (if (ediff-with-current-buffer control-buffer ediff-merge-job) |
416 (setq buffer-read-only t)) | 416 (setq buffer-read-only t)) |
417 ;; add control-buffer to the list of sessions | 417 ;; add control-buffer to the list of sessions |
418 (or (memq control-buffer ediff-this-buffer-ediff-sessions) | 418 (or (memq control-buffer ediff-this-buffer-ediff-sessions) |
419 (setq ediff-this-buffer-ediff-sessions | 419 (setq ediff-this-buffer-ediff-sessions |
420 (cons control-buffer ediff-this-buffer-ediff-sessions))) | 420 (cons control-buffer ediff-this-buffer-ediff-sessions))) |
421 (if ediff-make-buffers-readonly-at-startup | 421 (if ediff-make-buffers-readonly-at-startup |
422 (setq buffer-read-only t)) | 422 (setq buffer-read-only t)) |
423 ) | 423 ) |
424 | 424 |
425 (if ediff-3way-job | 425 (if ediff-3way-job |
426 (ediff-eval-in-buffer ediff-buffer-C | 426 (ediff-with-current-buffer ediff-buffer-C |
427 (ediff-nuke-selective-display) | 427 (ediff-nuke-selective-display) |
428 (run-hooks 'ediff-prepare-buffer-hook) | 428 (run-hooks 'ediff-prepare-buffer-hook) |
429 ;; add control-buffer to the list of sessions | 429 ;; add control-buffer to the list of sessions |
430 (or (memq control-buffer ediff-this-buffer-ediff-sessions) | 430 (or (memq control-buffer ediff-this-buffer-ediff-sessions) |
431 (setq ediff-this-buffer-ediff-sessions | 431 (setq ediff-this-buffer-ediff-sessions |
434 (if ediff-make-buffers-readonly-at-startup | 434 (if ediff-make-buffers-readonly-at-startup |
435 (setq buffer-read-only t)) | 435 (setq buffer-read-only t)) |
436 )) | 436 )) |
437 | 437 |
438 (if (ediff-buffer-live-p ediff-ancestor-buffer) | 438 (if (ediff-buffer-live-p ediff-ancestor-buffer) |
439 (ediff-eval-in-buffer ediff-ancestor-buffer | 439 (ediff-with-current-buffer ediff-ancestor-buffer |
440 (ediff-nuke-selective-display) | 440 (ediff-nuke-selective-display) |
441 (setq buffer-read-only t) | 441 (setq buffer-read-only t) |
442 (run-hooks 'ediff-prepare-buffer-hook) | 442 (run-hooks 'ediff-prepare-buffer-hook) |
443 (or (memq control-buffer ediff-this-buffer-ediff-sessions) | 443 (or (memq control-buffer ediff-this-buffer-ediff-sessions) |
444 (setq ediff-this-buffer-ediff-sessions | 444 (setq ediff-this-buffer-ediff-sessions |
546 to these buffers are not saved at this point---the user can do this later, | 546 to these buffers are not saved at this point---the user can do this later, |
547 if necessary." | 547 if necessary." |
548 (interactive) | 548 (interactive) |
549 (ediff-barf-if-not-control-buffer) | 549 (ediff-barf-if-not-control-buffer) |
550 (if (and (ediff-buffer-live-p ediff-ancestor-buffer) | 550 (if (and (ediff-buffer-live-p ediff-ancestor-buffer) |
551 (not (y-or-n-p "Recompute differences during merge, really? "))) | 551 (not |
552 (error "God forbid!")) | 552 (y-or-n-p |
553 "Ancestor buffer will not be used. Recompute diffs anyway? "))) | |
554 (error "Recomputation of differences canceled")) | |
553 | 555 |
554 (let ((point-A (ediff-eval-in-buffer ediff-buffer-A (point))) | 556 (let ((point-A (ediff-with-current-buffer ediff-buffer-A (point))) |
555 ;;(point-B (ediff-eval-in-buffer ediff-buffer-B (point))) | 557 ;;(point-B (ediff-with-current-buffer ediff-buffer-B (point))) |
556 (tmp-buffer (get-buffer-create ediff-tmp-buffer)) | 558 (tmp-buffer (get-buffer-create ediff-tmp-buffer)) |
557 (buf-A-file-name | 559 (buf-A-file-name (buffer-file-name ediff-buffer-A)) |
558 (file-name-nondirectory (or (buffer-file-name ediff-buffer-A) | 560 (buf-B-file-name (buffer-file-name ediff-buffer-B)) |
559 (buffer-name ediff-buffer-A) | 561 ;; (null ediff-buffer-C) is no problem, as we later check if |
560 ))) | 562 ;; ediff-buffer-C is alive |
561 (buf-B-file-name | 563 (buf-C-file-name (buffer-file-name ediff-buffer-C)) |
562 (file-name-nondirectory (or (buffer-file-name ediff-buffer-B) | |
563 (buffer-name ediff-buffer-B) | |
564 ))) | |
565 (buf-C-file-name | |
566 (file-name-nondirectory (or (buffer-file-name ediff-buffer-C) | |
567 ;; if (null ediff-buffer-C), there is | |
568 ;; no danger, since we later check if | |
569 ;; ediff-buffer-C is alive | |
570 (buffer-name ediff-buffer-C) | |
571 ))) | |
572 (overl-A (ediff-get-value-according-to-buffer-type | 564 (overl-A (ediff-get-value-according-to-buffer-type |
573 'A ediff-narrow-bounds)) | 565 'A ediff-narrow-bounds)) |
574 (overl-B (ediff-get-value-according-to-buffer-type | 566 (overl-B (ediff-get-value-according-to-buffer-type |
575 'B ediff-narrow-bounds)) | 567 'B ediff-narrow-bounds)) |
576 (overl-C (ediff-get-value-according-to-buffer-type | 568 (overl-C (ediff-get-value-according-to-buffer-type |
577 'C ediff-narrow-bounds)) | 569 'C ediff-narrow-bounds)) |
578 beg-A end-A beg-B end-B beg-C end-C | 570 beg-A end-A beg-B end-B beg-C end-C |
579 file-A file-B file-C) | 571 file-A file-B file-C) |
572 | |
573 (if (stringp buf-A-file-name) | |
574 (setq buf-A-file-name (file-name-nondirectory buf-A-file-name))) | |
575 (if (stringp buf-B-file-name) | |
576 (setq buf-B-file-name (file-name-nondirectory buf-B-file-name))) | |
577 (if (stringp buf-C-file-name) | |
578 (setq buf-C-file-name (file-name-nondirectory buf-C-file-name))) | |
579 | |
580 (ediff-unselect-and-select-difference -1) | 580 (ediff-unselect-and-select-difference -1) |
581 | 581 |
582 (setq beg-A (ediff-overlay-start overl-A) | 582 (setq beg-A (ediff-overlay-start overl-A) |
583 beg-B (ediff-overlay-start overl-B) | 583 beg-B (ediff-overlay-start overl-B) |
584 beg-C (ediff-overlay-start overl-C) | 584 beg-C (ediff-overlay-start overl-C) |
657 (keep-variants ediff-keep-variants) | 657 (keep-variants ediff-keep-variants) |
658 (ancestor-buf ediff-ancestor-buffer) | 658 (ancestor-buf ediff-ancestor-buffer) |
659 (ancestor-job ediff-merge-with-ancestor-job) | 659 (ancestor-job ediff-merge-with-ancestor-job) |
660 (merge ediff-merge-job) | 660 (merge ediff-merge-job) |
661 (comparison ediff-3way-comparison-job)) | 661 (comparison ediff-3way-comparison-job)) |
662 (ediff-eval-in-buffer bufA | 662 (ediff-with-current-buffer bufA |
663 (revert-buffer t noconfirm)) | 663 (revert-buffer t noconfirm)) |
664 (ediff-eval-in-buffer bufB | 664 (ediff-with-current-buffer bufB |
665 (revert-buffer t noconfirm)) | 665 (revert-buffer t noconfirm)) |
666 ;; this should only be executed in a 3way comparison, not in merge | 666 ;; this should only be executed in a 3way comparison, not in merge |
667 (if comparison | 667 (if comparison |
668 (ediff-eval-in-buffer bufC | 668 (ediff-with-current-buffer bufC |
669 (revert-buffer t noconfirm))) | 669 (revert-buffer t noconfirm))) |
670 (if merge | 670 (if merge |
671 (progn | 671 (progn |
672 (set-buffer ctl-buf) | 672 (set-buffer ctl-buf) |
673 ;; the argument says whether to reverse the meaning of | 673 ;; the argument says whether to reverse the meaning of |
751 (ediff-recenter-one-window 'A) | 751 (ediff-recenter-one-window 'A) |
752 (ediff-recenter-one-window 'B) | 752 (ediff-recenter-one-window 'B) |
753 (if ediff-3way-job | 753 (if ediff-3way-job |
754 (ediff-recenter-one-window 'C)) | 754 (ediff-recenter-one-window 'C)) |
755 | 755 |
756 (ediff-eval-in-buffer control-buf | 756 (ediff-with-current-buffer control-buf |
757 (ediff-recenter-ancestor) ; check if ancestor is alive | 757 (ediff-recenter-ancestor) ; check if ancestor is alive |
758 | 758 |
759 (if (and (ediff-multiframe-setup-p) | 759 (if (and (ediff-multiframe-setup-p) |
760 (not ediff-use-long-help-message) | 760 (not ediff-use-long-help-message) |
761 (not (ediff-frame-iconified-p ediff-control-frame))) | 761 (not (ediff-frame-iconified-p ediff-control-frame))) |
764 control-frame | 764 control-frame |
765 (eq this-command 'ediff-quit)))) | 765 (eq this-command 'ediff-quit)))) |
766 )) | 766 )) |
767 | 767 |
768 (ediff-restore-highlighting) | 768 (ediff-restore-highlighting) |
769 (ediff-eval-in-buffer control-buf (ediff-refresh-mode-lines)) | 769 (ediff-with-current-buffer control-buf (ediff-refresh-mode-lines)) |
770 )) | 770 )) |
771 | 771 |
772 ;; this function returns to the window it was called from | 772 ;; this function returns to the window it was called from |
773 ;; (which was the control window) | 773 ;; (which was the control window) |
774 (defun ediff-recenter-one-window (buf-type) | 774 (defun ediff-recenter-one-window (buf-type) |
778 (shift (ediff-overlay-start | 778 (shift (ediff-overlay-start |
779 (ediff-get-value-according-to-buffer-type | 779 (ediff-get-value-according-to-buffer-type |
780 buf-type ediff-narrow-bounds))) | 780 buf-type ediff-narrow-bounds))) |
781 (job-name ediff-job-name) | 781 (job-name ediff-job-name) |
782 (control-buf ediff-control-buffer) | 782 (control-buf ediff-control-buffer) |
783 (window-name (intern (format "ediff-window-%S" buf-type))) | 783 (window-name (ediff-get-symbol-from-alist |
784 buf-type ediff-window-alist)) | |
784 (window (if (window-live-p (symbol-value window-name)) | 785 (window (if (window-live-p (symbol-value window-name)) |
785 (symbol-value window-name)))) | 786 (symbol-value window-name)))) |
786 | 787 |
787 (if (and window ediff-windows-job) | 788 (if (and window ediff-windows-job) |
788 (set-window-start window shift)) | 789 (set-window-start window shift)) |
806 (ediff-valid-difference-p)) | 807 (ediff-valid-difference-p)) |
807 (let ((window (ediff-get-visible-buffer-window ediff-ancestor-buffer)) | 808 (let ((window (ediff-get-visible-buffer-window ediff-ancestor-buffer)) |
808 (ctl-wind (selected-window)) | 809 (ctl-wind (selected-window)) |
809 (job-name ediff-job-name) | 810 (job-name ediff-job-name) |
810 (ctl-buf ediff-control-buffer)) | 811 (ctl-buf ediff-control-buffer)) |
811 (ediff-eval-in-buffer ediff-ancestor-buffer | 812 (ediff-with-current-buffer ediff-ancestor-buffer |
812 (goto-char (ediff-get-diff-posn 'Ancestor 'beg nil ctl-buf)) | 813 (goto-char (ediff-get-diff-posn 'Ancestor 'beg nil ctl-buf)) |
813 (if window | 814 (if window |
814 (progn | 815 (progn |
815 (select-window window) | 816 (select-window window) |
816 (ediff-position-region | 817 (ediff-position-region |
958 (buf-type (ediff-char-to-buftype last-command-char))) | 959 (buf-type (ediff-char-to-buftype last-command-char))) |
959 (or buf (ediff-recenter)) | 960 (or buf (ediff-recenter)) |
960 (or buf | 961 (or buf |
961 (setq buf (ediff-get-buffer buf-type))) | 962 (setq buf (ediff-get-buffer buf-type))) |
962 | 963 |
963 (ediff-eval-in-buffer buf ; eval in buf A/B/C | 964 (ediff-with-current-buffer buf ; eval in buf A/B/C |
964 (let* ((file (buffer-file-name buf)) | 965 (let* ((file (buffer-file-name buf)) |
965 (file-writable (and file | 966 (file-writable (and file |
966 (file-exists-p file) | 967 (file-exists-p file) |
967 (file-writable-p file))) | 968 (file-writable-p file))) |
968 (toggle-ro-cmd (cond (ediff-toggle-read-only-function) | 969 (toggle-ro-cmd (cond (ediff-toggle-read-only-function) |
988 ;; if we checked the file out, we should also change the | 989 ;; if we checked the file out, we should also change the |
989 ;; original state of buffer-read-only to nil. If we don't | 990 ;; original state of buffer-read-only to nil. If we don't |
990 ;; do this, the mode line will show %%, since the file was | 991 ;; do this, the mode line will show %%, since the file was |
991 ;; RO before ediff started, so the user will think the file | 992 ;; RO before ediff started, so the user will think the file |
992 ;; is checked in. | 993 ;; is checked in. |
993 (ediff-eval-in-buffer ctl-buf | 994 (ediff-with-current-buffer ctl-buf |
994 (ediff-change-saved-variable | 995 (ediff-change-saved-variable |
995 'buffer-read-only nil buf-type))) | 996 'buffer-read-only nil buf-type))) |
996 (t | 997 (t |
997 (setq toggle-ro-cmd 'toggle-read-only) | 998 (setq toggle-ro-cmd 'toggle-read-only) |
998 (beep 1) (beep 1) | 999 (beep 1) (beep 1) |
1025 (or (beep 1) t) | 1026 (or (beep 1) t) |
1026 (y-or-n-p | 1027 (y-or-n-p |
1027 (format | 1028 (format |
1028 "File %s is under version control. Check it out? " | 1029 "File %s is under version control. Check it out? " |
1029 (ediff-abbreviate-file-name file)))) | 1030 (ediff-abbreviate-file-name file)))) |
1030 (ediff-eval-in-buffer buf | 1031 (ediff-with-current-buffer buf |
1031 (command-execute checkout-function))))) | 1032 (command-execute checkout-function))))) |
1032 | 1033 |
1033 | 1034 |
1034 ;; This is a simple-minded check for whether a file is under version control. | 1035 ;; This is a simple-minded check for whether a file is under version control. |
1035 ;; If file,v exists but file doesn't, this file is considered to be not checked | 1036 ;; If file,v exists but file doesn't, this file is considered to be not checked |
1176 (if ediff-emacs-p "" "X"))) | 1177 (if ediff-emacs-p "" "X"))) |
1177 (ediff-recenter 'no-rehighlight) ; make sure buffs are displayed in windows | 1178 (ediff-recenter 'no-rehighlight) ; make sure buffs are displayed in windows |
1178 (let ((ctl-buf ediff-control-buffer)) | 1179 (let ((ctl-buf ediff-control-buffer)) |
1179 (setq ediff-wide-display-p (not ediff-wide-display-p)) | 1180 (setq ediff-wide-display-p (not ediff-wide-display-p)) |
1180 (if (not ediff-wide-display-p) | 1181 (if (not ediff-wide-display-p) |
1181 (ediff-eval-in-buffer ctl-buf | 1182 (ediff-with-current-buffer ctl-buf |
1182 (modify-frame-parameters | 1183 (modify-frame-parameters |
1183 ediff-wide-display-frame ediff-wide-display-orig-parameters) | 1184 ediff-wide-display-frame ediff-wide-display-orig-parameters) |
1184 ;;(sit-for (if ediff-xemacs-p 0.4 0)) | 1185 ;;(sit-for (if ediff-xemacs-p 0.4 0)) |
1185 ;; restore control buf, since ctl window may have been deleted | 1186 ;; restore control buf, since ctl window may have been deleted |
1186 ;; during resizing | 1187 ;; during resizing |
1188 (setq ediff-wide-display-orig-parameters nil | 1189 (setq ediff-wide-display-orig-parameters nil |
1189 ediff-window-B nil) ; force update of window config | 1190 ediff-window-B nil) ; force update of window config |
1190 (ediff-recenter 'no-rehighlight)) | 1191 (ediff-recenter 'no-rehighlight)) |
1191 (funcall ediff-make-wide-display-function) | 1192 (funcall ediff-make-wide-display-function) |
1192 ;;(sit-for (if ediff-xemacs-p 0.4 0)) | 1193 ;;(sit-for (if ediff-xemacs-p 0.4 0)) |
1193 (ediff-eval-in-buffer ctl-buf | 1194 (ediff-with-current-buffer ctl-buf |
1194 (setq ediff-window-B nil) ; force update of window config | 1195 (setq ediff-window-B nil) ; force update of window config |
1195 (ediff-recenter 'no-rehighlight))))) | 1196 (ediff-recenter 'no-rehighlight))))) |
1196 | 1197 |
1197 ;;;###autoload | 1198 ;;;###autoload |
1198 (defun ediff-toggle-multiframe () | 1199 (defun ediff-toggle-multiframe () |
1214 | 1215 |
1215 ;; change default | 1216 ;; change default |
1216 (setq-default ediff-window-setup-function window-setup-func) | 1217 (setq-default ediff-window-setup-function window-setup-func) |
1217 ;; change in all active ediff sessions | 1218 ;; change in all active ediff sessions |
1218 (mapcar (function (lambda(buf) | 1219 (mapcar (function (lambda(buf) |
1219 (ediff-eval-in-buffer buf | 1220 (ediff-with-current-buffer buf |
1220 (setq ediff-window-setup-function window-setup-func | 1221 (setq ediff-window-setup-function window-setup-func |
1221 ediff-window-B nil)))) | 1222 ediff-window-B nil)))) |
1222 ediff-session-registry) | 1223 ediff-session-registry) |
1223 (if (ediff-in-control-buffer-p) | 1224 (if (ediff-in-control-buffer-p) |
1224 (ediff-recenter 'no-rehighlight)))) | 1225 (ediff-recenter 'no-rehighlight)))) |
1239 (ediff-kill-bottom-toolbar)) | 1240 (ediff-kill-bottom-toolbar)) |
1240 ;; do this only after killing the toolbar | 1241 ;; do this only after killing the toolbar |
1241 (setq ediff-use-toolbar-p (not ediff-use-toolbar-p)) | 1242 (setq ediff-use-toolbar-p (not ediff-use-toolbar-p)) |
1242 | 1243 |
1243 (mapcar (function (lambda(buf) | 1244 (mapcar (function (lambda(buf) |
1244 (ediff-eval-in-buffer buf | 1245 (ediff-with-current-buffer buf |
1245 ;; force redisplay | 1246 ;; force redisplay |
1246 (setq ediff-window-config-saved "") | 1247 (setq ediff-window-config-saved "") |
1247 ))) | 1248 ))) |
1248 ediff-session-registry) | 1249 ediff-session-registry) |
1249 (if (ediff-in-control-buffer-p) | 1250 (if (ediff-in-control-buffer-p) |
1329 (overl-B (ediff-get-value-according-to-buffer-type | 1330 (overl-B (ediff-get-value-according-to-buffer-type |
1330 'B ediff-visible-bounds)) | 1331 'B ediff-visible-bounds)) |
1331 (overl-C (ediff-get-value-according-to-buffer-type | 1332 (overl-C (ediff-get-value-according-to-buffer-type |
1332 'C ediff-visible-bounds)) | 1333 'C ediff-visible-bounds)) |
1333 ) | 1334 ) |
1334 (ediff-eval-in-buffer ediff-buffer-A | 1335 (ediff-with-current-buffer ediff-buffer-A |
1335 (narrow-to-region | 1336 (narrow-to-region |
1336 (ediff-overlay-start overl-A) (ediff-overlay-end overl-A))) | 1337 (ediff-overlay-start overl-A) (ediff-overlay-end overl-A))) |
1337 (ediff-eval-in-buffer ediff-buffer-B | 1338 (ediff-with-current-buffer ediff-buffer-B |
1338 (narrow-to-region | 1339 (narrow-to-region |
1339 (ediff-overlay-start overl-B) (ediff-overlay-end overl-B))) | 1340 (ediff-overlay-start overl-B) (ediff-overlay-end overl-B))) |
1340 | 1341 |
1341 (if ediff-3way-job | 1342 (if ediff-3way-job |
1342 (ediff-eval-in-buffer ediff-buffer-C | 1343 (ediff-with-current-buffer ediff-buffer-C |
1343 (narrow-to-region | 1344 (narrow-to-region |
1344 (ediff-overlay-start overl-C) (ediff-overlay-end overl-C)))) | 1345 (ediff-overlay-start overl-C) (ediff-overlay-end overl-C)))) |
1345 ))) | 1346 ))) |
1346 | 1347 |
1347 | 1348 |
1520 | 1521 |
1521 ;; get number of lines from window start to region end | 1522 ;; get number of lines from window start to region end |
1522 (defun ediff-get-lines-to-region-end (buf-type &optional n ctl-buf) | 1523 (defun ediff-get-lines-to-region-end (buf-type &optional n ctl-buf) |
1523 (or n (setq n ediff-current-difference)) | 1524 (or n (setq n ediff-current-difference)) |
1524 (or ctl-buf (setq ctl-buf ediff-control-buffer)) | 1525 (or ctl-buf (setq ctl-buf ediff-control-buffer)) |
1525 (ediff-eval-in-buffer ctl-buf | 1526 (ediff-with-current-buffer ctl-buf |
1526 (let* ((buf (ediff-get-buffer buf-type)) | 1527 (let* ((buf (ediff-get-buffer buf-type)) |
1527 (wind (eval (intern (format "ediff-window-%S" buf-type)))) | 1528 (wind (eval (ediff-get-symbol-from-alist |
1529 buf-type ediff-window-alist))) | |
1528 (beg (window-start wind)) | 1530 (beg (window-start wind)) |
1529 (end (ediff-get-diff-posn buf-type 'end)) | 1531 (end (ediff-get-diff-posn buf-type 'end)) |
1530 lines) | 1532 lines) |
1531 (ediff-eval-in-buffer buf | 1533 (ediff-with-current-buffer buf |
1532 (if (< beg end) | 1534 (if (< beg end) |
1533 (setq lines (count-lines beg end)) | 1535 (setq lines (count-lines beg end)) |
1534 (setq lines 0)) | 1536 (setq lines 0)) |
1535 lines | 1537 lines |
1536 )))) | 1538 )))) |
1537 | 1539 |
1538 ;; get number of lines from window end to region start | 1540 ;; get number of lines from window end to region start |
1539 (defun ediff-get-lines-to-region-start (buf-type &optional n ctl-buf) | 1541 (defun ediff-get-lines-to-region-start (buf-type &optional n ctl-buf) |
1540 (or n (setq n ediff-current-difference)) | 1542 (or n (setq n ediff-current-difference)) |
1541 (or ctl-buf (setq ctl-buf ediff-control-buffer)) | 1543 (or ctl-buf (setq ctl-buf ediff-control-buffer)) |
1542 (ediff-eval-in-buffer ctl-buf | 1544 (ediff-with-current-buffer ctl-buf |
1543 (let* ((buf (ediff-get-buffer buf-type)) | 1545 (let* ((buf (ediff-get-buffer buf-type)) |
1544 (wind (eval (intern (format "ediff-window-%S" buf-type)))) | 1546 (wind (eval (ediff-get-symbol-from-alist |
1547 buf-type ediff-window-alist))) | |
1545 (end (window-end wind)) | 1548 (end (window-end wind)) |
1546 (beg (ediff-get-diff-posn buf-type 'beg))) | 1549 (beg (ediff-get-diff-posn buf-type 'beg))) |
1547 (ediff-eval-in-buffer buf | 1550 (ediff-with-current-buffer buf |
1548 (if (< beg end) (count-lines beg end) 0)) | 1551 (if (< beg end) (count-lines beg end) 0)) |
1549 ))) | 1552 ))) |
1550 | 1553 |
1551 | 1554 |
1552 ;; region size coefficient is a coefficient by which to adjust scrolling | 1555 ;; region size coefficient is a coefficient by which to adjust scrolling |
1555 ;; that it won't happen that one diff region is scrolled off while the other is | 1558 ;; that it won't happen that one diff region is scrolled off while the other is |
1556 ;; still seen. | 1559 ;; still seen. |
1557 ;; | 1560 ;; |
1558 ;; If the difference region is invalid, the coefficient is 1 | 1561 ;; If the difference region is invalid, the coefficient is 1 |
1559 (defun ediff-get-region-size-coefficient (buf-type op &optional n ctl-buf) | 1562 (defun ediff-get-region-size-coefficient (buf-type op &optional n ctl-buf) |
1560 (ediff-eval-in-buffer (or ctl-buf ediff-control-buffer) | 1563 (ediff-with-current-buffer (or ctl-buf ediff-control-buffer) |
1561 (if (ediff-valid-difference-p n) | 1564 (if (ediff-valid-difference-p n) |
1562 (let* ((func (cond ((eq op 'scroll-down) | 1565 (let* ((func (cond ((eq op 'scroll-down) |
1563 'ediff-get-lines-to-region-start) | 1566 'ediff-get-lines-to-region-start) |
1564 ((eq op 'scroll-up) | 1567 ((eq op 'scroll-up) |
1565 'ediff-get-lines-to-region-end) | 1568 'ediff-get-lines-to-region-end) |
1682 in the specified buffer." | 1685 in the specified buffer." |
1683 (interactive "P") | 1686 (interactive "P") |
1684 (ediff-barf-if-not-control-buffer) | 1687 (ediff-barf-if-not-control-buffer) |
1685 (let* ((buf-type (ediff-char-to-buftype last-command-char)) | 1688 (let* ((buf-type (ediff-char-to-buftype last-command-char)) |
1686 (buffer (ediff-get-buffer buf-type)) | 1689 (buffer (ediff-get-buffer buf-type)) |
1687 (pt (ediff-eval-in-buffer buffer (point))) | 1690 (pt (ediff-with-current-buffer buffer (point))) |
1688 (diff-no (ediff-diff-at-point buf-type nil (if arg 'after))) | 1691 (diff-no (ediff-diff-at-point buf-type nil (if arg 'after))) |
1689 (past-last-diff (< ediff-number-of-differences diff-no)) | 1692 (past-last-diff (< ediff-number-of-differences diff-no)) |
1690 (beg (if past-last-diff | 1693 (beg (if past-last-diff |
1691 (ediff-eval-in-buffer buffer (point-max)) | 1694 (ediff-with-current-buffer buffer (point-max)) |
1692 (ediff-get-diff-posn buf-type 'beg (1- diff-no)))) | 1695 (ediff-get-diff-posn buf-type 'beg (1- diff-no)))) |
1693 ctl-wind wind-A wind-B wind-C | 1696 ctl-wind wind-A wind-B wind-C |
1694 shift) | 1697 shift) |
1695 (if past-last-diff | 1698 (if past-last-diff |
1696 (ediff-jump-to-difference -1) | 1699 (ediff-jump-to-difference -1) |
1699 wind-A ediff-window-A | 1702 wind-A ediff-window-A |
1700 wind-B ediff-window-B | 1703 wind-B ediff-window-B |
1701 wind-C ediff-window-C) | 1704 wind-C ediff-window-C) |
1702 (if arg | 1705 (if arg |
1703 (progn | 1706 (progn |
1704 (ediff-eval-in-buffer buffer | 1707 (ediff-with-current-buffer buffer |
1705 (setq shift (- beg pt))) | 1708 (setq shift (- beg pt))) |
1706 (select-window wind-A) | 1709 (select-window wind-A) |
1707 (if past-last-diff (goto-char (point-max))) | 1710 (if past-last-diff (goto-char (point-max))) |
1708 (condition-case nil | 1711 (condition-case nil |
1709 (backward-char shift) ; noerror, if beginning of buffer | 1712 (backward-char shift) ; noerror, if beginning of buffer |
1743 (prev-beg 0) | 1746 (prev-beg 0) |
1744 (prev-end 0) | 1747 (prev-end 0) |
1745 (beg 0) | 1748 (beg 0) |
1746 (end 0)) | 1749 (end 0)) |
1747 | 1750 |
1748 (ediff-eval-in-buffer buffer | 1751 (ediff-with-current-buffer buffer |
1749 (setq pos (or pos (point))) | 1752 (setq pos (or pos (point))) |
1750 (while (and (or (< pos prev-beg) (> pos beg)) | 1753 (while (and (or (< pos prev-beg) (> pos beg)) |
1751 (< diff-no max-dif-num)) | 1754 (< diff-no max-dif-num)) |
1752 (setq diff-no (1+ diff-no)) | 1755 (setq diff-no (1+ diff-no)) |
1753 (setq prev-beg beg | 1756 (setq prev-beg beg |
1871 (setq saved-p nil) ; don't copy identical buffers | 1874 (setq saved-p nil) ; don't copy identical buffers |
1872 ;; seems ok to copy | 1875 ;; seems ok to copy |
1873 (if (or batch-invocation (ediff-test-save-region n to-buf-type)) | 1876 (if (or batch-invocation (ediff-test-save-region n to-buf-type)) |
1874 (condition-case conds | 1877 (condition-case conds |
1875 (progn | 1878 (progn |
1876 (ediff-eval-in-buffer to-buf | 1879 (ediff-with-current-buffer to-buf |
1877 ;; to prevent flags from interfering if buffer is writable | 1880 ;; to prevent flags from interfering if buffer is writable |
1878 (let ((inhibit-read-only (null buffer-read-only))) | 1881 (let ((inhibit-read-only (null buffer-read-only))) |
1879 | 1882 |
1880 (goto-char reg-to-delete-end) | 1883 (goto-char reg-to-delete-end) |
1881 (insert reg-to-copy) | 1884 (insert reg-to-copy) |
1975 | 1978 |
1976 (setq reg-beg (ediff-get-diff-posn buf-type 'beg n ediff-control-buffer)) | 1979 (setq reg-beg (ediff-get-diff-posn buf-type 'beg n ediff-control-buffer)) |
1977 (setq reg-end (ediff-get-diff-posn buf-type 'end n ediff-control-buffer)) | 1980 (setq reg-end (ediff-get-diff-posn buf-type 'end n ediff-control-buffer)) |
1978 | 1981 |
1979 (condition-case conds | 1982 (condition-case conds |
1980 (ediff-eval-in-buffer buf | 1983 (ediff-with-current-buffer buf |
1981 (let ((inhibit-read-only (null buffer-read-only))) | 1984 (let ((inhibit-read-only (null buffer-read-only))) |
1982 | 1985 |
1983 (goto-char reg-end) | 1986 (goto-char reg-end) |
1984 (insert saved-diff) | 1987 (insert saved-diff) |
1985 | 1988 |
2157 (if (ediff-valid-difference-p n) | 2160 (if (ediff-valid-difference-p n) |
2158 (let* ((ctl-buf ediff-control-buffer) | 2161 (let* ((ctl-buf ediff-control-buffer) |
2159 (regex-A ediff-regexp-focus-A) | 2162 (regex-A ediff-regexp-focus-A) |
2160 (regex-B ediff-regexp-focus-B) | 2163 (regex-B ediff-regexp-focus-B) |
2161 (regex-C ediff-regexp-focus-C) | 2164 (regex-C ediff-regexp-focus-C) |
2162 (reg-A-match (ediff-eval-in-buffer ediff-buffer-A | 2165 (reg-A-match (ediff-with-current-buffer ediff-buffer-A |
2163 (save-restriction | 2166 (save-restriction |
2164 (narrow-to-region | 2167 (narrow-to-region |
2165 (ediff-get-diff-posn 'A 'beg n ctl-buf) | 2168 (ediff-get-diff-posn 'A 'beg n ctl-buf) |
2166 (ediff-get-diff-posn 'A 'end n ctl-buf)) | 2169 (ediff-get-diff-posn 'A 'end n ctl-buf)) |
2167 (goto-char (point-min)) | 2170 (goto-char (point-min)) |
2168 (re-search-forward regex-A nil t)))) | 2171 (re-search-forward regex-A nil t)))) |
2169 (reg-B-match (ediff-eval-in-buffer ediff-buffer-B | 2172 (reg-B-match (ediff-with-current-buffer ediff-buffer-B |
2170 (save-restriction | 2173 (save-restriction |
2171 (narrow-to-region | 2174 (narrow-to-region |
2172 (ediff-get-diff-posn 'B 'beg n ctl-buf) | 2175 (ediff-get-diff-posn 'B 'beg n ctl-buf) |
2173 (ediff-get-diff-posn 'B 'end n ctl-buf)) | 2176 (ediff-get-diff-posn 'B 'end n ctl-buf)) |
2174 (re-search-forward regex-B nil t)))) | 2177 (re-search-forward regex-B nil t)))) |
2175 (reg-C-match (if ediff-3way-comparison-job | 2178 (reg-C-match (if ediff-3way-comparison-job |
2176 (ediff-eval-in-buffer ediff-buffer-C | 2179 (ediff-with-current-buffer ediff-buffer-C |
2177 (save-restriction | 2180 (save-restriction |
2178 (narrow-to-region | 2181 (narrow-to-region |
2179 (ediff-get-diff-posn 'C 'beg n ctl-buf) | 2182 (ediff-get-diff-posn 'C 'beg n ctl-buf) |
2180 (ediff-get-diff-posn 'C 'end n ctl-buf)) | 2183 (ediff-get-diff-posn 'C 'end n ctl-buf)) |
2181 (re-search-forward regex-C nil t)))))) | 2184 (re-search-forward regex-C nil t)))))) |
2198 (if (ediff-valid-difference-p n) | 2201 (if (ediff-valid-difference-p n) |
2199 (let* ((ctl-buf ediff-control-buffer) | 2202 (let* ((ctl-buf ediff-control-buffer) |
2200 (regex-A ediff-regexp-hide-A) | 2203 (regex-A ediff-regexp-hide-A) |
2201 (regex-B ediff-regexp-hide-B) | 2204 (regex-B ediff-regexp-hide-B) |
2202 (regex-C ediff-regexp-hide-C) | 2205 (regex-C ediff-regexp-hide-C) |
2203 (reg-A-match (ediff-eval-in-buffer ediff-buffer-A | 2206 (reg-A-match (ediff-with-current-buffer ediff-buffer-A |
2204 (save-restriction | 2207 (save-restriction |
2205 (narrow-to-region | 2208 (narrow-to-region |
2206 (ediff-get-diff-posn 'A 'beg n ctl-buf) | 2209 (ediff-get-diff-posn 'A 'beg n ctl-buf) |
2207 (ediff-get-diff-posn 'A 'end n ctl-buf)) | 2210 (ediff-get-diff-posn 'A 'end n ctl-buf)) |
2208 (goto-char (point-min)) | 2211 (goto-char (point-min)) |
2209 (re-search-forward regex-A nil t)))) | 2212 (re-search-forward regex-A nil t)))) |
2210 (reg-B-match (ediff-eval-in-buffer ediff-buffer-B | 2213 (reg-B-match (ediff-with-current-buffer ediff-buffer-B |
2211 (save-restriction | 2214 (save-restriction |
2212 (narrow-to-region | 2215 (narrow-to-region |
2213 (ediff-get-diff-posn 'B 'beg n ctl-buf) | 2216 (ediff-get-diff-posn 'B 'beg n ctl-buf) |
2214 (ediff-get-diff-posn 'B 'end n ctl-buf)) | 2217 (ediff-get-diff-posn 'B 'end n ctl-buf)) |
2215 (goto-char (point-min)) | 2218 (goto-char (point-min)) |
2216 (re-search-forward regex-B nil t)))) | 2219 (re-search-forward regex-B nil t)))) |
2217 (reg-C-match (if ediff-3way-comparison-job | 2220 (reg-C-match (if ediff-3way-comparison-job |
2218 (ediff-eval-in-buffer ediff-buffer-C | 2221 (ediff-with-current-buffer ediff-buffer-C |
2219 (save-restriction | 2222 (save-restriction |
2220 (narrow-to-region | 2223 (narrow-to-region |
2221 (ediff-get-diff-posn 'C 'beg n ctl-buf) | 2224 (ediff-get-diff-posn 'C 'beg n ctl-buf) |
2222 (ediff-get-diff-posn 'C 'end n ctl-buf)) | 2225 (ediff-get-diff-posn 'C 'end n ctl-buf)) |
2223 (goto-char (point-min)) | 2226 (goto-char (point-min)) |
2293 (window-frame ediff-window-A)) | 2296 (window-frame ediff-window-A)) |
2294 ((window-live-p ediff-window-B) | 2297 ((window-live-p ediff-window-B) |
2295 (window-frame ediff-window-B)) | 2298 (window-frame ediff-window-B)) |
2296 (t (next-frame)))))) | 2299 (t (next-frame)))))) |
2297 (condition-case nil | 2300 (condition-case nil |
2298 (ediff-eval-in-buffer ediff-buffer-A | 2301 (ediff-with-current-buffer ediff-buffer-A |
2299 (setq ediff-this-buffer-ediff-sessions | 2302 (setq ediff-this-buffer-ediff-sessions |
2300 (delq control-buffer ediff-this-buffer-ediff-sessions)) | 2303 (delq control-buffer ediff-this-buffer-ediff-sessions)) |
2301 (kill-local-variable 'mode-line-buffer-identification) | 2304 (kill-local-variable 'mode-line-buffer-identification) |
2302 (kill-local-variable 'mode-line-format) | 2305 (kill-local-variable 'mode-line-format) |
2303 ) | 2306 ) |
2304 (error)) | 2307 (error)) |
2305 | 2308 |
2306 (condition-case nil | 2309 (condition-case nil |
2307 (ediff-eval-in-buffer ediff-buffer-B | 2310 (ediff-with-current-buffer ediff-buffer-B |
2308 (setq ediff-this-buffer-ediff-sessions | 2311 (setq ediff-this-buffer-ediff-sessions |
2309 (delq control-buffer ediff-this-buffer-ediff-sessions)) | 2312 (delq control-buffer ediff-this-buffer-ediff-sessions)) |
2310 (kill-local-variable 'mode-line-buffer-identification) | 2313 (kill-local-variable 'mode-line-buffer-identification) |
2311 (kill-local-variable 'mode-line-format) | 2314 (kill-local-variable 'mode-line-format) |
2312 ) | 2315 ) |
2313 (error)) | 2316 (error)) |
2314 | 2317 |
2315 (condition-case nil | 2318 (condition-case nil |
2316 (ediff-eval-in-buffer ediff-buffer-C | 2319 (ediff-with-current-buffer ediff-buffer-C |
2317 (setq ediff-this-buffer-ediff-sessions | 2320 (setq ediff-this-buffer-ediff-sessions |
2318 (delq control-buffer ediff-this-buffer-ediff-sessions)) | 2321 (delq control-buffer ediff-this-buffer-ediff-sessions)) |
2319 (kill-local-variable 'mode-line-buffer-identification) | 2322 (kill-local-variable 'mode-line-buffer-identification) |
2320 (kill-local-variable 'mode-line-format) | 2323 (kill-local-variable 'mode-line-format) |
2321 ) | 2324 ) |
2322 (error)) | 2325 (error)) |
2323 | 2326 |
2324 (condition-case nil | 2327 (condition-case nil |
2325 (ediff-eval-in-buffer ediff-ancestor-buffer | 2328 (ediff-with-current-buffer ediff-ancestor-buffer |
2326 (setq ediff-this-buffer-ediff-sessions | 2329 (setq ediff-this-buffer-ediff-sessions |
2327 (delq control-buffer ediff-this-buffer-ediff-sessions)) | 2330 (delq control-buffer ediff-this-buffer-ediff-sessions)) |
2328 (kill-local-variable 'mode-line-buffer-identification) | 2331 (kill-local-variable 'mode-line-buffer-identification) |
2329 (kill-local-variable 'mode-line-format) | 2332 (kill-local-variable 'mode-line-format) |
2330 ) | 2333 ) |
2492 (setq merge-store-file | 2495 (setq merge-store-file |
2493 (read-file-name "Save the merge buffer in file: ")) | 2496 (read-file-name "Save the merge buffer in file: ")) |
2494 (ediff-write-merge-buffer-and-maybe-kill | 2497 (ediff-write-merge-buffer-and-maybe-kill |
2495 ediff-buffer-C merge-store-file nil save-and-continue)) | 2498 ediff-buffer-C merge-store-file nil save-and-continue)) |
2496 ((and (ediff-buffer-live-p ediff-meta-buffer) | 2499 ((and (ediff-buffer-live-p ediff-meta-buffer) |
2497 (ediff-eval-in-buffer ediff-meta-buffer | 2500 (ediff-with-current-buffer ediff-meta-buffer |
2498 (ediff-merge-metajob))) | 2501 (ediff-merge-metajob))) |
2499 ;; This case shouldn't occur, as the parent metajob must pass on | 2502 ;; This case shouldn't occur, as the parent metajob must pass on |
2500 ;; a file name, ediff-merge-store-file, where to save the result | 2503 ;; a file name, ediff-merge-store-file, where to save the result |
2501 ;; of the merge. | 2504 ;; of the merge. |
2502 ;; Ask where to save anyway--will decide what to do here later. | 2505 ;; Ask where to save anyway--will decide what to do here later. |
2509 ;; write merge buffer. If the optional argument save-and-continue is non-nil, | 2512 ;; write merge buffer. If the optional argument save-and-continue is non-nil, |
2510 ;; then don't kill the merge buffer | 2513 ;; then don't kill the merge buffer |
2511 (defun ediff-write-merge-buffer-and-maybe-kill (buf file | 2514 (defun ediff-write-merge-buffer-and-maybe-kill (buf file |
2512 &optional | 2515 &optional |
2513 show-file save-and-continue) | 2516 show-file save-and-continue) |
2514 (ediff-eval-in-buffer buf | 2517 (ediff-with-current-buffer buf |
2515 (if (or (not (file-exists-p file)) | 2518 (if (or (not (file-exists-p file)) |
2516 (y-or-n-p (format "File %s exists, overwrite? " file))) | 2519 (y-or-n-p (format "File %s exists, overwrite? " file))) |
2517 (progn | 2520 (progn |
2518 (write-region (point-min) (point-max) file) | 2521 (write-region (point-min) (point-max) file) |
2519 (if show-file | 2522 (if show-file |
2603 (ediff-skip-unsuitable-frames)) | 2606 (ediff-skip-unsuitable-frames)) |
2604 (with-output-to-temp-buffer ediff-msg-buffer | 2607 (with-output-to-temp-buffer ediff-msg-buffer |
2605 (raise-frame (selected-frame)) | 2608 (raise-frame (selected-frame)) |
2606 (princ (ediff-version)) | 2609 (princ (ediff-version)) |
2607 (princ "\n\n") | 2610 (princ "\n\n") |
2608 (ediff-eval-in-buffer ediff-buffer-A | 2611 (ediff-with-current-buffer ediff-buffer-A |
2609 (if buffer-file-name | 2612 (if buffer-file-name |
2610 (princ | 2613 (princ |
2611 (format "File A = %S\n" buffer-file-name)) | 2614 (format "File A = %S\n" buffer-file-name)) |
2612 (princ | 2615 (princ |
2613 (format "Buffer A = %S\n" (buffer-name))))) | 2616 (format "Buffer A = %S\n" (buffer-name))))) |
2614 (ediff-eval-in-buffer ediff-buffer-B | 2617 (ediff-with-current-buffer ediff-buffer-B |
2615 (if buffer-file-name | 2618 (if buffer-file-name |
2616 (princ | 2619 (princ |
2617 (format "File B = %S\n" buffer-file-name)) | 2620 (format "File B = %S\n" buffer-file-name)) |
2618 (princ | 2621 (princ |
2619 (format "Buffer B = %S\n" (buffer-name))))) | 2622 (format "Buffer B = %S\n" (buffer-name))))) |
2620 (if ediff-3way-job | 2623 (if ediff-3way-job |
2621 (ediff-eval-in-buffer ediff-buffer-C | 2624 (ediff-with-current-buffer ediff-buffer-C |
2622 (if buffer-file-name | 2625 (if buffer-file-name |
2623 (princ | 2626 (princ |
2624 (format "File C = %S\n" buffer-file-name)) | 2627 (format "File C = %S\n" buffer-file-name)) |
2625 (princ | 2628 (princ |
2626 (format "Buffer C = %S\n" (buffer-name)))))) | 2629 (format "Buffer C = %S\n" (buffer-name)))))) |
2633 (if (ediff-buffer-live-p ediff-diff-buffer) | 2636 (if (ediff-buffer-live-p ediff-diff-buffer) |
2634 (concat "\tin buffer " | 2637 (concat "\tin buffer " |
2635 (buffer-name ediff-diff-buffer)) | 2638 (buffer-name ediff-diff-buffer)) |
2636 " is not available"))) | 2639 " is not available"))) |
2637 | 2640 |
2638 (let* ((A-line (ediff-eval-in-buffer ediff-buffer-A | 2641 (let* ((A-line (ediff-with-current-buffer ediff-buffer-A |
2639 (1+ (count-lines (point-min) (point))))) | 2642 (1+ (count-lines (point-min) (point))))) |
2640 (B-line (ediff-eval-in-buffer ediff-buffer-B | 2643 (B-line (ediff-with-current-buffer ediff-buffer-B |
2641 (1+ (count-lines (point-min) (point))))) | 2644 (1+ (count-lines (point-min) (point))))) |
2642 C-line) | 2645 C-line) |
2643 (princ (format "\Buffer A's point is on line %d\n" A-line)) | 2646 (princ (format "\Buffer A's point is on line %d\n" A-line)) |
2644 (princ (format "Buffer B's point is on line %d\n" B-line)) | 2647 (princ (format "Buffer B's point is on line %d\n" B-line)) |
2645 (if ediff-3way-job | 2648 (if ediff-3way-job |
2646 (progn | 2649 (progn |
2647 (setq C-line (ediff-eval-in-buffer ediff-buffer-C | 2650 (setq C-line (ediff-with-current-buffer ediff-buffer-C |
2648 (1+ (count-lines (point-min) (point))))) | 2651 (1+ (count-lines (point-min) (point))))) |
2649 (princ (format "Buffer C's point is on line %d\n" C-line))))) | 2652 (princ (format "Buffer C's point is on line %d\n" C-line))))) |
2650 | 2653 |
2651 (princ (format "\nCurrent difference number = %S\n" | 2654 (princ (format "\nCurrent difference number = %S\n" |
2652 (cond ((< ediff-current-difference 0) 'start) | 2655 (cond ((< ediff-current-difference 0) 'start) |
2778 (or (eq flag 'unselect-only) | 2781 (or (eq flag 'unselect-only) |
2779 (ediff-select-difference n)) | 2782 (ediff-select-difference n)) |
2780 (setq ediff-current-difference n) | 2783 (setq ediff-current-difference n) |
2781 ) ; end protected section | 2784 ) ; end protected section |
2782 | 2785 |
2783 (ediff-eval-in-buffer control-buf (ediff-refresh-mode-lines)) | 2786 (ediff-with-current-buffer control-buf (ediff-refresh-mode-lines)) |
2784 ))) | 2787 ))) |
2785 | 2788 |
2786 | 2789 |
2787 (defun ediff-read-file-name (prompt default-dir default-file) | 2790 (defun ediff-read-file-name (prompt default-dir default-file) |
2788 ; This is a modified version of a similar function in `emerge.el'. | 2791 ; This is a modified version of a similar function in `emerge.el'. |
2859 ;; If a file with the orig name exists, add some random stuff | 2862 ;; If a file with the orig name exists, add some random stuff |
2860 ;; to it. | 2863 ;; to it. |
2861 (t (make-temp-name f)))) | 2864 (t (make-temp-name f)))) |
2862 | 2865 |
2863 ;; create the file | 2866 ;; create the file |
2864 (ediff-eval-in-buffer buff | 2867 (ediff-with-current-buffer buff |
2865 (write-region (if start start (point-min)) | 2868 (write-region (if start start (point-min)) |
2866 (if end end (point-max)) | 2869 (if end end (point-max)) |
2867 f | 2870 f |
2868 nil ; don't append---erase | 2871 nil ; don't append---erase |
2869 'no-message) | 2872 'no-message) |
2924 Without an argument, it saves customized diff argument, if available | 2927 Without an argument, it saves customized diff argument, if available |
2925 \(and plain output, if customized output was not generated\)." | 2928 \(and plain output, if customized output was not generated\)." |
2926 (interactive "P") | 2929 (interactive "P") |
2927 (ediff-barf-if-not-control-buffer) | 2930 (ediff-barf-if-not-control-buffer) |
2928 (ediff-compute-custom-diffs-maybe) | 2931 (ediff-compute-custom-diffs-maybe) |
2929 (ediff-eval-in-buffer | 2932 (ediff-with-current-buffer |
2930 (cond ((memq last-command-char '(?a ?b ?c)) | 2933 (cond ((memq last-command-char '(?a ?b ?c)) |
2931 (ediff-get-buffer | 2934 (ediff-get-buffer |
2932 (ediff-char-to-buftype last-command-char))) | 2935 (ediff-char-to-buftype last-command-char))) |
2933 ((eq last-command-char ?d) | 2936 ((eq last-command-char ?d) |
2934 (message "Saving diff output ...") | 2937 (message "Saving diff output ...") |
2981 (beep) | 2984 (beep) |
2982 (message "Output from `diff' not found") | 2985 (message "Output from `diff' not found") |
2983 nil)))) | 2986 nil)))) |
2984 (if buf | 2987 (if buf |
2985 (progn | 2988 (progn |
2986 (ediff-eval-in-buffer buf | 2989 (ediff-with-current-buffer buf |
2987 (goto-char (point-min))) | 2990 (goto-char (point-min))) |
2988 (switch-to-buffer buf) | 2991 (switch-to-buffer buf) |
2989 (raise-frame (selected-frame))))) | 2992 (raise-frame (selected-frame))))) |
2990 (if (frame-live-p ediff-control-frame) | 2993 (if (frame-live-p ediff-control-frame) |
2991 (ediff-reset-mouse ediff-control-frame)) | 2994 (ediff-reset-mouse ediff-control-frame)) |
3030 ((ediff-3way-comparison-job) | 3033 ((ediff-3way-comparison-job) |
3031 (while (cond ((memq answer possibilities) | 3034 (while (cond ((memq answer possibilities) |
3032 (setq possibilities (delq answer possibilities)) | 3035 (setq possibilities (delq answer possibilities)) |
3033 (setq bufA | 3036 (setq bufA |
3034 (eval | 3037 (eval |
3035 (intern (format "ediff-buffer-%c" answer)))) | 3038 (ediff-get-symbol-from-alist |
3039 answer ediff-buffer-alist))) | |
3036 nil) | 3040 nil) |
3037 ((equal answer "")) | 3041 ((equal answer "")) |
3038 (t (beep 1) | 3042 (t (beep 1) |
3039 (message | 3043 (message |
3040 "Valid values are %s" | 3044 "Valid values are %s" |
3048 (setq answer "") ; silence error msg | 3052 (setq answer "") ; silence error msg |
3049 (while (cond ((memq answer possibilities) | 3053 (while (cond ((memq answer possibilities) |
3050 (setq possibilities (delq answer possibilities)) | 3054 (setq possibilities (delq answer possibilities)) |
3051 (setq bufB | 3055 (setq bufB |
3052 (eval | 3056 (eval |
3053 (intern (format "ediff-buffer-%c" answer)))) | 3057 (ediff-get-symbol-from-alist |
3058 answer ediff-buffer-alist))) | |
3054 nil) | 3059 nil) |
3055 ((equal answer "")) | 3060 ((equal answer "")) |
3056 (t (beep 1) | 3061 (t (beep 1) |
3057 (message | 3062 (message |
3058 "Valid values are %s" | 3063 "Valid values are %s" |
3066 (t ; 2way comparison | 3071 (t ; 2way comparison |
3067 (setq bufA ediff-buffer-A | 3072 (setq bufA ediff-buffer-A |
3068 bufB ediff-buffer-B | 3073 bufB ediff-buffer-B |
3069 possibilities nil))) | 3074 possibilities nil))) |
3070 | 3075 |
3071 (ediff-eval-in-buffer bufA | 3076 (ediff-with-current-buffer bufA |
3072 (or (mark t) | 3077 (or (mark t) |
3073 (error "You forgot to specify a region in buffer %s" (buffer-name))) | 3078 (error "You forgot to specify a region in buffer %s" (buffer-name))) |
3074 (setq begA (region-beginning) | 3079 (setq begA (region-beginning) |
3075 endA (region-end)) | 3080 endA (region-end)) |
3076 (goto-char begA) | 3081 (goto-char begA) |
3078 (setq begA (point)) | 3083 (setq begA (point)) |
3079 (goto-char endA) | 3084 (goto-char endA) |
3080 (end-of-line) | 3085 (end-of-line) |
3081 (or (eobp) (forward-char)) ; include the newline char | 3086 (or (eobp) (forward-char)) ; include the newline char |
3082 (setq endA (point))) | 3087 (setq endA (point))) |
3083 (ediff-eval-in-buffer bufB | 3088 (ediff-with-current-buffer bufB |
3084 (or (mark t) | 3089 (or (mark t) |
3085 (error "You forgot to specify a region in buffer %s" (buffer-name))) | 3090 (error "You forgot to specify a region in buffer %s" (buffer-name))) |
3086 (setq begB (region-beginning) | 3091 (setq begB (region-beginning) |
3087 endB (region-end)) | 3092 endB (region-end)) |
3088 (goto-char begB) | 3093 (goto-char begB) |
3095 | 3100 |
3096 (ediff-unselect-and-select-difference | 3101 (ediff-unselect-and-select-difference |
3097 ediff-current-difference 'unselect-only) | 3102 ediff-current-difference 'unselect-only) |
3098 (ediff-paint-background-regions 'unhighlight) | 3103 (ediff-paint-background-regions 'unhighlight) |
3099 | 3104 |
3100 (ediff-eval-in-buffer bufA | 3105 (ediff-with-current-buffer bufA |
3101 (goto-char begA) | 3106 (goto-char begA) |
3102 (set-mark endA) | 3107 (set-mark endA) |
3103 (narrow-to-region begA endA) | 3108 (narrow-to-region begA endA) |
3104 ;; (ediff-activate-mark) | 3109 ;; (ediff-activate-mark) |
3105 ) | 3110 ) |
3106 ;; (sit-for 0) | 3111 ;; (sit-for 0) |
3107 (ediff-eval-in-buffer bufB | 3112 (ediff-with-current-buffer bufB |
3108 (goto-char begB) | 3113 (goto-char begB) |
3109 (set-mark endB) | 3114 (set-mark endB) |
3110 (narrow-to-region begB endB) | 3115 (narrow-to-region begB endB) |
3111 ;; (ediff-activate-mark) | 3116 ;; (ediff-activate-mark) |
3112 ) | 3117 ) |
3114 | 3119 |
3115 ;; At this point, possibilities contains either the window char A/B/C | 3120 ;; At this point, possibilities contains either the window char A/B/C |
3116 ;; that was not selected, or it is nil. We delete the window that is not | 3121 ;; that was not selected, or it is nil. We delete the window that is not |
3117 ;; selected. | 3122 ;; selected. |
3118 (if possibilities | 3123 (if possibilities |
3119 (ediff-eval-in-buffer ctl-buf | 3124 (ediff-with-current-buffer ctl-buf |
3120 (let* ((wind-to-delete (eval | 3125 (let* ((wind-to-delete (eval |
3121 (intern | 3126 (ediff-get-symbol-from-alist |
3122 (format | 3127 (car possibilities) |
3123 "ediff-window-%c" (car possibilities))))) | 3128 ediff-window-alist))) |
3124 (frame (window-frame wind-to-delete))) | 3129 (frame (window-frame wind-to-delete))) |
3125 (delete-window wind-to-delete) | 3130 (delete-window wind-to-delete) |
3126 (select-frame frame) | 3131 (select-frame frame) |
3127 (balance-windows)))) | 3132 (balance-windows)))) |
3128 (or (y-or-n-p | 3133 (or (y-or-n-p |
3129 "Please check regions selected for comparison. Continue? ") | 3134 "Please check regions selected for comparison. Continue? ") |
3130 (setq quit-now t)) | 3135 (setq quit-now t)) |
3131 | 3136 |
3132 (ediff-eval-in-buffer bufA | 3137 (ediff-with-current-buffer bufA |
3133 (widen)) | 3138 (widen)) |
3134 (ediff-eval-in-buffer bufB | 3139 (ediff-with-current-buffer bufB |
3135 (widen)) | 3140 (widen)) |
3136 (if quit-now | 3141 (if quit-now |
3137 (ediff-eval-in-buffer ctl-buf | 3142 (ediff-with-current-buffer ctl-buf |
3138 (ediff-recenter) | 3143 (ediff-recenter) |
3139 (sit-for 0) | 3144 (sit-for 0) |
3140 (error "All right. Make up your mind and come back..."))) | 3145 (error "All right. Make up your mind and come back..."))) |
3141 | 3146 |
3142 (ediff-regions-internal | 3147 (ediff-regions-internal |
3149 )) | 3154 )) |
3150 | 3155 |
3151 | 3156 |
3152 | 3157 |
3153 (defun ediff-remove-flags-from-buffer (buffer overlay) | 3158 (defun ediff-remove-flags-from-buffer (buffer overlay) |
3154 (ediff-eval-in-buffer buffer | 3159 (ediff-with-current-buffer buffer |
3155 (let ((inhibit-read-only t)) | 3160 (let ((inhibit-read-only t)) |
3156 (if ediff-xemacs-p | 3161 (if ediff-xemacs-p |
3157 (ediff-overlay-put overlay 'begin-glyph nil) | 3162 (ediff-overlay-put overlay 'begin-glyph nil) |
3158 (ediff-overlay-put overlay 'before-string nil)) | 3163 (ediff-overlay-put overlay 'before-string nil)) |
3159 | 3164 |
3163 ))) | 3168 ))) |
3164 | 3169 |
3165 | 3170 |
3166 | 3171 |
3167 (defun ediff-place-flags-in-buffer (buf-type buffer ctl-buffer diff) | 3172 (defun ediff-place-flags-in-buffer (buf-type buffer ctl-buffer diff) |
3168 (ediff-eval-in-buffer buffer | 3173 (ediff-with-current-buffer buffer |
3169 (ediff-place-flags-in-buffer1 buf-type ctl-buffer diff))) | 3174 (ediff-place-flags-in-buffer1 buf-type ctl-buffer diff))) |
3170 | 3175 |
3171 | 3176 |
3172 (defun ediff-place-flags-in-buffer1 (buf-type ctl-buffer diff-no) | 3177 (defun ediff-place-flags-in-buffer1 (buf-type ctl-buffer diff-no) |
3173 (let* ((curr-overl (ediff-eval-in-buffer ctl-buffer | 3178 (let* ((curr-overl (ediff-with-current-buffer ctl-buffer |
3174 (ediff-get-diff-overlay diff-no buf-type))) | 3179 (ediff-get-diff-overlay diff-no buf-type))) |
3175 (before (ediff-get-diff-posn buf-type 'beg diff-no ctl-buffer)) | 3180 (before (ediff-get-diff-posn buf-type 'beg diff-no ctl-buffer)) |
3176 after beg-of-line flag) | 3181 after beg-of-line flag) |
3177 | 3182 |
3178 ;; insert flag before the difference | 3183 ;; insert flag before the difference |
3179 (goto-char before) | 3184 (goto-char before) |
3180 (setq beg-of-line (bolp)) | 3185 (setq beg-of-line (bolp)) |
3181 | 3186 |
3182 (setq flag (ediff-eval-in-buffer ctl-buffer | 3187 (setq flag (ediff-with-current-buffer ctl-buffer |
3183 (if (eq ediff-highlighting-style 'ascii) | 3188 (if (eq ediff-highlighting-style 'ascii) |
3184 (if beg-of-line | 3189 (if beg-of-line |
3185 ediff-before-flag-bol ediff-before-flag-mol)))) | 3190 ediff-before-flag-bol ediff-before-flag-mol)))) |
3186 | 3191 |
3187 ;; insert the flag itself | 3192 ;; insert the flag itself |
3193 ;; `after' must be set here, after the before-flag was inserted | 3198 ;; `after' must be set here, after the before-flag was inserted |
3194 (setq after (ediff-get-diff-posn buf-type 'end diff-no ctl-buffer)) | 3199 (setq after (ediff-get-diff-posn buf-type 'end diff-no ctl-buffer)) |
3195 (goto-char after) | 3200 (goto-char after) |
3196 (setq beg-of-line (bolp)) | 3201 (setq beg-of-line (bolp)) |
3197 | 3202 |
3198 (setq flag (ediff-eval-in-buffer ctl-buffer | 3203 (setq flag (ediff-with-current-buffer ctl-buffer |
3199 (if (eq ediff-highlighting-style 'ascii) | 3204 (if (eq ediff-highlighting-style 'ascii) |
3200 (if beg-of-line | 3205 (if beg-of-line |
3201 ediff-after-flag-eol ediff-after-flag-mol)))) | 3206 ediff-after-flag-eol ediff-after-flag-mol)))) |
3202 | 3207 |
3203 ;; insert the flag itself | 3208 ;; insert the flag itself |
3220 (defun ediff-get-diff-posn (buf-type pos &optional n control-buf) | 3225 (defun ediff-get-diff-posn (buf-type pos &optional n control-buf) |
3221 (let (diff-overlay) | 3226 (let (diff-overlay) |
3222 (or control-buf | 3227 (or control-buf |
3223 (setq control-buf (current-buffer))) | 3228 (setq control-buf (current-buffer))) |
3224 | 3229 |
3225 (ediff-eval-in-buffer control-buf | 3230 (ediff-with-current-buffer control-buf |
3226 (or n (setq n ediff-current-difference)) | 3231 (or n (setq n ediff-current-difference)) |
3227 (if (or (< n 0) (>= n ediff-number-of-differences)) | 3232 (if (or (< n 0) (>= n ediff-number-of-differences)) |
3228 (if (> ediff-number-of-differences 0) | 3233 (if (> ediff-number-of-differences 0) |
3229 (error ediff-BAD-DIFF-NUMBER | 3234 (error ediff-BAD-DIFF-NUMBER |
3230 this-command (1+ n) ediff-number-of-differences) | 3235 this-command (1+ n) ediff-number-of-differences) |
3239 | 3244 |
3240 | 3245 |
3241 ;; Restore highlighting to what it should be according to ediff-use-faces, | 3246 ;; Restore highlighting to what it should be according to ediff-use-faces, |
3242 ;; ediff-highlighting-style, and ediff-highlight-all-diffs variables. | 3247 ;; ediff-highlighting-style, and ediff-highlight-all-diffs variables. |
3243 (defun ediff-restore-highlighting (&optional ctl-buf) | 3248 (defun ediff-restore-highlighting (&optional ctl-buf) |
3244 (ediff-eval-in-buffer (or ctl-buf (current-buffer)) | 3249 (ediff-with-current-buffer (or ctl-buf (current-buffer)) |
3245 (if (and (ediff-has-face-support-p) | 3250 (if (and (ediff-has-face-support-p) |
3246 ediff-use-faces | 3251 ediff-use-faces |
3247 ediff-highlight-all-diffs) | 3252 ediff-highlight-all-diffs) |
3248 (ediff-paint-background-regions)) | 3253 (ediff-paint-background-regions)) |
3249 (ediff-select-difference ediff-current-difference))) | 3254 (ediff-select-difference ediff-current-difference))) |
3279 ;; If BUFF is not a live buffer, then return nil; otherwise, return the | 3284 ;; If BUFF is not a live buffer, then return nil; otherwise, return the |
3280 ;; newly created overlay. | 3285 ;; newly created overlay. |
3281 (defun ediff-make-bullet-proof-overlay (beg end buff) | 3286 (defun ediff-make-bullet-proof-overlay (beg end buff) |
3282 (if (ediff-buffer-live-p buff) | 3287 (if (ediff-buffer-live-p buff) |
3283 (let (overl) | 3288 (let (overl) |
3284 (ediff-eval-in-buffer buff | 3289 (ediff-with-current-buffer buff |
3285 (or (number-or-marker-p beg) | 3290 (or (number-or-marker-p beg) |
3286 (setq beg (eval beg))) | 3291 (setq beg (eval beg))) |
3287 (or (number-or-marker-p end) | 3292 (or (number-or-marker-p end) |
3288 (setq end (eval end))) | 3293 (setq end (eval end))) |
3289 (setq overl | 3294 (setq overl |
3352 (while (get-buffer (format "%s<%d>%s" prefix n suffix)) | 3357 (while (get-buffer (format "%s<%d>%s" prefix n suffix)) |
3353 (setq n (1+ n))) | 3358 (setq n (1+ n))) |
3354 (format "%s<%d>%s" prefix n suffix)))) | 3359 (format "%s<%d>%s" prefix n suffix)))) |
3355 | 3360 |
3356 | 3361 |
3357 ;; splits at a white space, returns a list | |
3358 (defun ediff-split-string (string) | |
3359 (let ((start 0) | |
3360 (result '()) | |
3361 substr) | |
3362 (while (string-match "[ \t]+" string start) | |
3363 (let ((match (string-match "[ \t]+" string start))) | |
3364 (setq substr (substring string start match)) | |
3365 (if (> (length substr) 0) | |
3366 (setq result (cons substr result))) | |
3367 (setq start (match-end 0)))) | |
3368 (setq substr (substring string start nil)) | |
3369 (if (> (length substr) 0) | |
3370 (setq result (cons substr result))) | |
3371 (nreverse result))) | |
3372 | |
3373 (defun ediff-submit-report () | 3362 (defun ediff-submit-report () |
3374 "Submit bug report on Ediff." | 3363 "Submit bug report on Ediff." |
3375 (interactive) | 3364 (interactive) |
3376 (ediff-barf-if-not-control-buffer) | 3365 (ediff-barf-if-not-control-buffer) |
3377 (let ((reporter-prompt-for-summary-p t) | 3366 (let ((reporter-prompt-for-summary-p t) |
3457 'delete-other-windows | 3446 'delete-other-windows |
3458 salutation)) | 3447 salutation)) |
3459 (bury-buffer) | 3448 (bury-buffer) |
3460 (beep 1)(message "Bug report aborted") | 3449 (beep 1)(message "Bug report aborted") |
3461 (if (ediff-buffer-live-p ctl-buf) | 3450 (if (ediff-buffer-live-p ctl-buf) |
3462 (ediff-eval-in-buffer ctl-buf | 3451 (ediff-with-current-buffer ctl-buf |
3463 (ediff-recenter 'no-rehighlight)))) | 3452 (ediff-recenter 'no-rehighlight)))) |
3464 )) | 3453 )) |
3465 | 3454 |
3466 | 3455 |
3467 (defun ediff-deactivate-mark () | 3456 (defun ediff-deactivate-mark () |
3509 (set (car vars) (cdr (assoc (car vars) assoc-list))) | 3498 (set (car vars) (cdr (assoc (car vars) assoc-list))) |
3510 (setq vars (cdr vars)))) | 3499 (setq vars (cdr vars)))) |
3511 | 3500 |
3512 (defun ediff-change-saved-variable (var value buf-type) | 3501 (defun ediff-change-saved-variable (var value buf-type) |
3513 (let* ((assoc-list | 3502 (let* ((assoc-list |
3514 (symbol-value (intern | 3503 (symbol-value (ediff-get-symbol-from-alist |
3515 (concat "ediff-buffer-values-orig-" | 3504 buf-type |
3516 (symbol-name buf-type))))) | 3505 ediff-buffer-values-orig-alist))) |
3517 (assoc-elt (assoc var assoc-list))) | 3506 (assoc-elt (assoc var assoc-list))) |
3518 (if assoc-elt | 3507 (if assoc-elt |
3519 (setcdr assoc-elt value)))) | 3508 (setcdr assoc-elt value)))) |
3520 | 3509 |
3521 | 3510 |
3522 ;; must execute in control buf | 3511 ;; must execute in control buf |
3523 (defun ediff-save-protected-variables () | 3512 (defun ediff-save-protected-variables () |
3524 (setq ediff-buffer-values-orig-A | 3513 (setq ediff-buffer-values-orig-A |
3525 (ediff-eval-in-buffer ediff-buffer-A | 3514 (ediff-with-current-buffer ediff-buffer-A |
3526 (ediff-save-variables ediff-protected-variables))) | 3515 (ediff-save-variables ediff-protected-variables))) |
3527 (setq ediff-buffer-values-orig-B | 3516 (setq ediff-buffer-values-orig-B |
3528 (ediff-eval-in-buffer ediff-buffer-B | 3517 (ediff-with-current-buffer ediff-buffer-B |
3529 (ediff-save-variables ediff-protected-variables))) | 3518 (ediff-save-variables ediff-protected-variables))) |
3530 (if ediff-3way-comparison-job | 3519 (if ediff-3way-comparison-job |
3531 (setq ediff-buffer-values-orig-C | 3520 (setq ediff-buffer-values-orig-C |
3532 (ediff-eval-in-buffer ediff-buffer-C | 3521 (ediff-with-current-buffer ediff-buffer-C |
3533 (ediff-save-variables ediff-protected-variables)))) | 3522 (ediff-save-variables ediff-protected-variables)))) |
3534 (if (ediff-buffer-live-p ediff-ancestor-buffer) | 3523 (if (ediff-buffer-live-p ediff-ancestor-buffer) |
3535 (setq ediff-buffer-values-orig-Ancestor | 3524 (setq ediff-buffer-values-orig-Ancestor |
3536 (ediff-eval-in-buffer ediff-ancestor-buffer | 3525 (ediff-with-current-buffer ediff-ancestor-buffer |
3537 (ediff-save-variables ediff-protected-variables))))) | 3526 (ediff-save-variables ediff-protected-variables))))) |
3538 | 3527 |
3539 ;; must execute in control buf | 3528 ;; must execute in control buf |
3540 (defun ediff-restore-protected-variables () | 3529 (defun ediff-restore-protected-variables () |
3541 (let ((values-A ediff-buffer-values-orig-A) | 3530 (let ((values-A ediff-buffer-values-orig-A) |
3542 (values-B ediff-buffer-values-orig-B) | 3531 (values-B ediff-buffer-values-orig-B) |
3543 (values-C ediff-buffer-values-orig-C) | 3532 (values-C ediff-buffer-values-orig-C) |
3544 (values-Ancestor ediff-buffer-values-orig-Ancestor)) | 3533 (values-Ancestor ediff-buffer-values-orig-Ancestor)) |
3545 (ediff-eval-in-buffer ediff-buffer-A | 3534 (ediff-with-current-buffer ediff-buffer-A |
3546 (ediff-restore-variables ediff-protected-variables values-A)) | 3535 (ediff-restore-variables ediff-protected-variables values-A)) |
3547 (ediff-eval-in-buffer ediff-buffer-B | 3536 (ediff-with-current-buffer ediff-buffer-B |
3548 (ediff-restore-variables ediff-protected-variables values-B)) | 3537 (ediff-restore-variables ediff-protected-variables values-B)) |
3549 (if ediff-3way-comparison-job | 3538 (if ediff-3way-comparison-job |
3550 (ediff-eval-in-buffer ediff-buffer-C | 3539 (ediff-with-current-buffer ediff-buffer-C |
3551 (ediff-restore-variables ediff-protected-variables values-C))) | 3540 (ediff-restore-variables ediff-protected-variables values-C))) |
3552 (if (ediff-buffer-live-p ediff-ancestor-buffer) | 3541 (if (ediff-buffer-live-p ediff-ancestor-buffer) |
3553 (ediff-eval-in-buffer ediff-ancestor-buffer | 3542 (ediff-with-current-buffer ediff-ancestor-buffer |
3554 (ediff-restore-variables ediff-protected-variables values-Ancestor))) | 3543 (ediff-restore-variables ediff-protected-variables values-Ancestor))) |
3555 )) | 3544 )) |
3556 | 3545 |
3557 ;; save BUFFER in FILE. used in hooks. | 3546 ;; save BUFFER in FILE. used in hooks. |
3558 (defun ediff-save-buffer-in-file (buffer file) | 3547 (defun ediff-save-buffer-in-file (buffer file) |
3559 (ediff-eval-in-buffer buffer | 3548 (ediff-with-current-buffer buffer |
3560 (write-file file))) | 3549 (write-file file))) |
3561 | 3550 |
3562 | 3551 |
3563 ;;; Debug | 3552 ;;; Debug |
3564 | 3553 |
3696 (run-hooks 'ediff-load-hook) | 3685 (run-hooks 'ediff-load-hook) |
3697 | 3686 |
3698 | 3687 |
3699 ;;; Local Variables: | 3688 ;;; Local Variables: |
3700 ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun) | 3689 ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun) |
3701 ;;; eval: (put 'ediff-eval-in-buffer 'lisp-indent-hook 1) | 3690 ;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1) |
3702 ;;; eval: (put 'ediff-eval-in-buffer 'edebug-form-spec '(form body)) | 3691 ;;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body)) |
3703 ;;; End: | 3692 ;;; End: |
3704 | 3693 |
3705 ;;; ediff-util.el ends here | 3694 ;;; ediff-util.el ends here |