X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/50a07e18565cc4dd7162908197ac71e85c1781d7..b0c9a334c2f0eb881eff47f590997e746cc3bdb3:/lisp/ediff-merg.el diff --git a/lisp/ediff-merg.el b/lisp/ediff-merg.el index 8bb1aa0814..cb93dea383 100644 --- a/lisp/ediff-merg.el +++ b/lisp/ediff-merg.el @@ -1,6 +1,7 @@ ;;; ediff-merg.el --- merging utilities -;; Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 01, 02 Free Software Foundation, Inc. +;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +;; 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: Michael Kifer @@ -18,8 +19,8 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: @@ -58,10 +59,10 @@ Valid values are the symbols `default-A', `default-B', and `combined'." :type '(radio (const default-A) (const default-B) (const combined)) :group 'ediff-merge) -(defcustom ediff-combination-pattern +(defcustom ediff-combination-pattern '("<<<<<<< variant A" A ">>>>>>> variant B" B "####### Ancestor" Ancestor "======= end") "*Pattern to be used for combining difference regions in buffers A and B. -The value must be a list of the form +The value must be a list of the form (STRING1 bufspec1 STRING2 bufspec2 STRING3 bufspec3 STRING4) where bufspec is the symbol A, B, or Ancestor. For instance, if the value is '(STRING1 A STRING2 Ancestor STRING3 B STRING4) then the @@ -93,7 +94,7 @@ skipped over. nil means show all regions." A region is considered to have been changed if it is different from the current default (`default-A', `default-B', `combined') and it hasn't been marked as `prefer-A' or `prefer-B'. -A region is considered to have been changed also when it is marked as +A region is considered to have been changed also when it is marked as as `prefer-A', but is different from the corresponding difference region in Buffer A or if it is marked as `prefer-B' and is different from the region in Buffer B." @@ -111,7 +112,7 @@ Buffer B." ;; If ediff-skip-changed-regions, check if the merge region differs from ;; the current default. If a region is different from the default, it means ;; that the user has made determination as to how to merge for this particular -;; region. +;; region. (defsubst ediff-skip-merge-region-if-changed-from-default-p (n) (and ediff-skip-merge-regions-that-differ-from-default (ediff-merge-changed-from-default-p n 'prefers-too))) @@ -137,7 +138,7 @@ Buffer B." (setq combo-region (concat combo-region region-delim "\n" - (ediff-get-region-contents + (ediff-get-region-contents n region-spec ediff-control-buffer))) (error "")) (setq pattern-list (cdr (cdr pattern-list))) @@ -161,7 +162,7 @@ Buffer B." (while (< n ediff-number-of-differences) (ediff-set-state-of-diff-in-all-buffers n ctl-buf) (setq n (1+ n))))) - + (defun ediff-set-state-of-diff-in-all-buffers (n ctl-buf) (let ((regA (ediff-get-region-contents n 'A ctl-buf)) (regB (ediff-get-region-contents n 'B ctl-buf)) @@ -190,12 +191,12 @@ Buffer B." (ediff-set-state-of-diff n 'B nil) (ediff-set-state-of-diff n 'C nil))) )) - + (defun ediff-set-merge-mode () (normal-mode t) (remove-hook 'local-write-file-hooks 'ediff-set-merge-mode)) - + ;; Go over all diffs starting with DIFF-NUM and copy regions into buffer C ;; according to the state of the difference. ;; Since ediff-copy-diff refuses to copy identical diff regions, there is @@ -217,7 +218,7 @@ Buffer B." (if remerging "Re-merging" "Merging") n ediff-number-of-differences)) - + (setq state-of-merge (ediff-get-state-of-merge n)) (if remerging @@ -225,36 +226,36 @@ Buffer B." ;; (reg-B (ediff-get-region-contents n 'B ediff-control-buffer)) ;; (reg-C (ediff-get-region-contents n 'C ediff-control-buffer))) (let () - + ;; if region was edited since it was first set by default (if (or (ediff-merge-changed-from-default-p n) ;; was preferred (string-match "prefer" state-of-merge)) ;; then ignore (setq do-not-copy t)) - + ;; change state of merge for this diff, if necessary (if (and (string-match "\\(default\\|combined\\)" state-of-merge) (not do-not-copy)) (ediff-set-state-of-merge n (format "%S" ediff-default-variant))) )) - + ;; state-of-merge may have changed via ediff-set-state-of-merge, so ;; check it once again (setq state-of-merge (ediff-get-state-of-merge n)) - + (or do-not-copy (if (string= state-of-merge "combined") ;; use n+1 because ediff-combine-diffs works via user numbering ;; of diffs, which is 1+ to what ediff uses internally (ediff-combine-diffs (1+ n) 'batch) - (ediff-copy-diff + (ediff-copy-diff n (if (string-match "-A" state-of-merge) 'A 'B) 'C 'batch))) (setq n (1+ n))) (message "Merging buffers A & B into C ... Done") )) - + (defun ediff-re-merge () "Remerge unmodified diff regions using a new default. Start with the current region." @@ -266,14 +267,14 @@ Buffer B." default-variant-alist))) (setq ediff-default-variant (intern - (completing-read + (completing-read (format "Current merge default is `%S'. New default: " ediff-default-variant) actual-alist nil 'must-match))) (ediff-do-merge ediff-current-difference 'remerge) (ediff-recenter) )) - + (defun ediff-shrink-window-C (arg) "Shrink window C to just one line. With a prefix argument, returns window C to its normal size. @@ -307,16 +308,16 @@ Combining is done according to the specifications in variable `ediff-combination-pattern'." (interactive "P") (setq n (if (numberp n) (1- n) ediff-current-difference)) - + (let (reg-combined) ;;(setq regA (ediff-get-region-contents n 'A ediff-control-buffer) ;; regB (ediff-get-region-contents n 'B ediff-control-buffer)) ;;(setq reg-combined (ediff-make-combined-diff regA regB)) (setq reg-combined (ediff-get-combined-region n)) - + (ediff-copy-diff n nil 'C batch-invocation reg-combined)) (or batch-invocation (ediff-jump-to-difference (1+ n)))) - + ;; Checks if the region in buff C looks like a combination of the regions ;; in buffers A and B. Return a list (reg-a-beg reg-a-end reg-b-beg reg-b-end) @@ -331,7 +332,7 @@ Combining is done according to the specifications in variable (mrgreg-end (ediff-get-diff-posn 'C 'end region-num)) (pattern-list ediff-combination-pattern) delim reg-beg reg-end delim-regs-list) - + (if combined (ediff-with-current-buffer ediff-buffer-C (while pattern-list @@ -364,7 +365,7 @@ Combining is done according to the specifications in variable (reg-C (ediff-get-region-contents diff-num 'C ediff-control-buffer))) (setq state-of-merge (ediff-get-state-of-merge diff-num)) - + ;; if region was edited since it was first set by default (or (and (string= state-of-merge "default-A") (not (string= reg-A reg-C))) @@ -380,7 +381,7 @@ Combining is done according to the specifications in variable (string= state-of-merge "prefer-B") (not (string= reg-B reg-C))) ))) - + ;;; Local Variables: ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun) @@ -388,4 +389,5 @@ Combining is done according to the specifications in variable ;;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body)) ;;; End: +;;; arch-tag: 9b798cf9-02ba-487f-a62e-b63aa823dbfb ;;; ediff-merg.el ends here