diff options
| author | Karl Heuer | 1995-06-09 14:38:56 +0000 |
|---|---|---|
| committer | Karl Heuer | 1995-06-09 14:38:56 +0000 |
| commit | 13340e24bdaf072b6d2232ed08dd956f1a7a3525 (patch) | |
| tree | 75e42a61c93e0fe5123801610ca063c8944b31bc | |
| parent | 77af52939e8f187f77a9eb4b58965d045c5a57e9 (diff) | |
| download | emacs-13340e24bdaf072b6d2232ed08dd956f1a7a3525.tar.gz emacs-13340e24bdaf072b6d2232ed08dd956f1a7a3525.zip | |
Converted xemacs *screen* nomenclature to *frame*.
Incorporated overlay strings. Ediff no longer runs under emacs
19.28 and earlier and XEmacs 19.11 and earlier.
| -rw-r--r-- | lisp/ediff-merg.el | 71 |
1 files changed, 37 insertions, 34 deletions
diff --git a/lisp/ediff-merg.el b/lisp/ediff-merg.el index c4530af58a7..3c6681d3fb7 100644 --- a/lisp/ediff-merg.el +++ b/lisp/ediff-merg.el | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | 22 | ||
| 23 | (require 'ediff-init) | 23 | (require 'ediff-init) |
| 24 | 24 | ||
| 25 | |||
| 26 | (defvar ediff-default-variant 'default-A | 25 | (defvar ediff-default-variant 'default-A |
| 27 | "*The variant to be used as a default for buffer C in merging. | 26 | "*The variant to be used as a default for buffer C in merging. |
| 28 | Valid values are the symbols `default-A', `default-B', and `combined'.") | 27 | Valid values are the symbols `default-A', `default-B', and `combined'.") |
| @@ -62,7 +61,11 @@ skiped over. Nil means show all regions.") | |||
| 62 | (let ((regA (ediff-get-region-contents n 'A ctl-buf)) | 61 | (let ((regA (ediff-get-region-contents n 'A ctl-buf)) |
| 63 | (regB (ediff-get-region-contents n 'B ctl-buf)) | 62 | (regB (ediff-get-region-contents n 'B ctl-buf)) |
| 64 | (regC (ediff-get-region-contents n 'C ctl-buf))) | 63 | (regC (ediff-get-region-contents n 'C ctl-buf))) |
| 65 | (cond ((string= regA regB) | 64 | (cond ((and (string= regA regB) (string= regA regC)) |
| 65 | (ediff-set-state-of-diff n 'A "=diff(B)") | ||
| 66 | (ediff-set-state-of-diff n 'B "=diff(C)") | ||
| 67 | (ediff-set-state-of-diff n 'C "=diff(A)")) | ||
| 68 | ((string= regA regB) | ||
| 66 | (ediff-set-state-of-diff n 'A "=diff(B)") | 69 | (ediff-set-state-of-diff n 'A "=diff(B)") |
| 67 | (ediff-set-state-of-diff n 'B "=diff(A)") | 70 | (ediff-set-state-of-diff n 'B "=diff(A)") |
| 68 | (ediff-set-state-of-diff n 'C nil)) | 71 | (ediff-set-state-of-diff n 'C nil)) |
| @@ -82,6 +85,11 @@ skiped over. Nil means show all regions.") | |||
| 82 | (ediff-set-state-of-diff n 'B nil) | 85 | (ediff-set-state-of-diff n 'B nil) |
| 83 | (ediff-set-state-of-diff n 'C nil))) | 86 | (ediff-set-state-of-diff n 'C nil))) |
| 84 | )) | 87 | )) |
| 88 | |||
| 89 | (defun ediff-set-merge-mode () | ||
| 90 | ;; by Stig@hackvan.com | ||
| 91 | (normal-mode t) | ||
| 92 | (remove-hook 'local-write-file-hooks 'ediff-set-merge-mode)) | ||
| 85 | 93 | ||
| 86 | ;; Go over all diffs starting with DIFF-NUM and copy regions into buffer C | 94 | ;; Go over all diffs starting with DIFF-NUM and copy regions into buffer C |
| 87 | ;; according to the state of the difference. | 95 | ;; according to the state of the difference. |
| @@ -90,19 +98,14 @@ skiped over. Nil means show all regions.") | |||
| 90 | ;; | 98 | ;; |
| 91 | ;; If re-merging, change state of merge in all diffs starting with | 99 | ;; If re-merging, change state of merge in all diffs starting with |
| 92 | ;; DIFF-NUM, except those where the state is prefer-* or where it is | 100 | ;; DIFF-NUM, except those where the state is prefer-* or where it is |
| 93 | ;; default-* but the region appears to be modified with respect to its | 101 | ;; `default-*' or `combined' but the buf C region appears to be modified |
| 94 | ;; original form. | 102 | ;; since last set by default. |
| 95 | ;; Also, prevent copying when there is a danger of overriding a modified | ||
| 96 | ;; region in buffer C. | ||
| 97 | (defun ediff-do-merge (diff-num &optional remerging) | 103 | (defun ediff-do-merge (diff-num &optional remerging) |
| 98 | (if (< diff-num 0) (setq diff-num 0)) | 104 | (if (< diff-num 0) (setq diff-num 0)) |
| 99 | (let ((n diff-num) | 105 | (let ((n diff-num) |
| 100 | (default-state-of-merge (format "%S" ediff-default-variant)) | 106 | (default-state-of-merge (format "%S" ediff-default-variant)) |
| 101 | do-not-copy | 107 | do-not-copy state-of-merge) |
| 102 | state-of-merge) | ||
| 103 | |||
| 104 | (while (< n ediff-number-of-differences) | 108 | (while (< n ediff-number-of-differences) |
| 105 | |||
| 106 | (if (= (mod n 10) 0) | 109 | (if (= (mod n 10) 0) |
| 107 | (message "%s buffers A & B into C ... region %d of %d" | 110 | (message "%s buffers A & B into C ... region %d of %d" |
| 108 | (if remerging "Re-merging" "Merging") | 111 | (if remerging "Re-merging" "Merging") |
| @@ -117,28 +120,29 @@ skiped over. Nil means show all regions.") | |||
| 117 | (reg-B (ediff-get-region-contents n 'B ediff-control-buffer)) | 120 | (reg-B (ediff-get-region-contents n 'B ediff-control-buffer)) |
| 118 | (reg-C (ediff-get-region-contents n 'C ediff-control-buffer))) | 121 | (reg-C (ediff-get-region-contents n 'C ediff-control-buffer))) |
| 119 | 122 | ||
| 120 | (if (or | 123 | ;;; was edited since first set by default |
| 121 | ;; has been edited since it was first set by default | 124 | (if (or (and (string= state-of-merge "default-A") |
| 122 | (and (string= state-of-merge "default-A") | ||
| 123 | (not (string= reg-A reg-C))) | 125 | (not (string= reg-A reg-C))) |
| 124 | ;; has been edited since first set by default | 126 | ;; was edited since first set by default |
| 125 | (and (string= state-of-merge "default-B") | 127 | (and (string= state-of-merge "default-B") |
| 126 | (not (string= reg-B reg-C))) | 128 | (not (string= reg-B reg-C))) |
| 127 | ;; was prefered--ignore | 129 | ;; was edited since first set by default |
| 128 | (string-match "prefer" state-of-merge) | 130 | (and (string= state-of-merge "combined") |
| 129 | ;; was combined--ignore | 131 | (not (string= |
| 130 | (string= state-of-merge "combined")) | 132 | (ediff-make-combined-diff reg-A reg-B) reg-C))) |
| 131 | 133 | ;; was prefered--ignore | |
| 134 | (string-match "prefer" state-of-merge)) | ||
| 132 | (setq do-not-copy t)) | 135 | (setq do-not-copy t)) |
| 133 | 136 | ||
| 134 | ;; change state of merge for this diff, if necessary | 137 | ;; change state of merge for this diff, if necessary |
| 135 | (if (and (string-match "default" state-of-merge) (not do-not-copy)) | 138 | (if (and (string-match "\\(default\\|combined\\)" state-of-merge) |
| 139 | (not do-not-copy)) | ||
| 136 | (ediff-set-state-of-merge | 140 | (ediff-set-state-of-merge |
| 137 | n (format "%S" ediff-default-variant))) | 141 | n (format "%S" ediff-default-variant))) |
| 138 | )) | 142 | )) |
| 139 | 143 | ||
| 140 | ;; state-of-merge may have changed via ediff-set-state-of-merge, so | 144 | ;; state-of-merge may have changed via ediff-set-state-of-merge, so |
| 141 | ;; check it out again | 145 | ;; check it once again |
| 142 | (setq state-of-merge (ediff-get-state-of-merge n)) | 146 | (setq state-of-merge (ediff-get-state-of-merge n)) |
| 143 | 147 | ||
| 144 | (or do-not-copy | 148 | (or do-not-copy |
| @@ -146,10 +150,8 @@ skiped over. Nil means show all regions.") | |||
| 146 | ;; use n+1 because ediff-combine-diffs works via user numbering | 150 | ;; use n+1 because ediff-combine-diffs works via user numbering |
| 147 | ;; of diffs, which is 1+ to what ediff uses internally | 151 | ;; of diffs, which is 1+ to what ediff uses internally |
| 148 | (ediff-combine-diffs (1+ n) 'batch) | 152 | (ediff-combine-diffs (1+ n) 'batch) |
| 149 | (ediff-copy-diff n | 153 | (ediff-copy-diff |
| 150 | (if (string-match "-A" state-of-merge) 'A 'B) | 154 | n (if (string-match "-A" state-of-merge) 'A 'B) 'C 'batch))) |
| 151 | 'C | ||
| 152 | 'batch))) | ||
| 153 | (setq n (1+ n))) | 155 | (setq n (1+ n))) |
| 154 | (message "Merging buffers A & B into C ... Done") | 156 | (message "Merging buffers A & B into C ... Done") |
| 155 | )) | 157 | )) |
| @@ -209,16 +211,17 @@ Combining is done using the list in variable `ediff-combination-pattern'." | |||
| 209 | (setq regA (ediff-get-region-contents n 'A ediff-control-buffer) | 211 | (setq regA (ediff-get-region-contents n 'A ediff-control-buffer) |
| 210 | regB (ediff-get-region-contents n 'B ediff-control-buffer)) | 212 | regB (ediff-get-region-contents n 'B ediff-control-buffer)) |
| 211 | 213 | ||
| 212 | (setq reg-combined (concat (nth 0 ediff-combination-pattern) "\n" | 214 | (setq reg-combined (ediff-make-combined-diff regA regB)) |
| 213 | regA | ||
| 214 | (nth 1 ediff-combination-pattern) "\n" | ||
| 215 | regB | ||
| 216 | (nth 2 ediff-combination-pattern) "\n")) | ||
| 217 | 215 | ||
| 218 | (ediff-copy-diff n nil 'C batch-invocation reg-combined)) | 216 | (ediff-copy-diff n nil 'C batch-invocation reg-combined)) |
| 217 | (or batch-invocation (ediff-recenter))) | ||
| 219 | 218 | ||
| 220 | (or batch-invocation | 219 | (defsubst ediff-make-combined-diff (regA regB) |
| 221 | (ediff-recenter 'no-rehighlight))) | 220 | (concat (nth 0 ediff-combination-pattern) "\n" |
| 221 | regA | ||
| 222 | (nth 1 ediff-combination-pattern) "\n" | ||
| 223 | regB | ||
| 224 | (nth 2 ediff-combination-pattern) "\n")) | ||
| 222 | 225 | ||
| 223 | 226 | ||
| 224 | ;; Checks if the region in buff C looks like a combination of the regions | 227 | ;; Checks if the region in buff C looks like a combination of the regions |