aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorGlenn Morris2010-11-06 11:51:11 -0700
committerGlenn Morris2010-11-06 11:51:11 -0700
commitb05fde666f574dd48e8bd2a72fafe3b049608a61 (patch)
treedc545ae0c1cfb3e52b16f2b9946b6db17d2fe00d /lisp
parent7d7cd6cef89a477357ec49b32565fd6659e983fe (diff)
downloademacs-b05fde666f574dd48e8bd2a72fafe3b049608a61.tar.gz
emacs-b05fde666f574dd48e8bd2a72fafe3b049608a61.zip
Minor emerge changes.
* lisp/vc/emerge.el (emerge-eval-in-buffer): Remove, and replace all uses with with-current-buffer. (diff, template): Give dynamic local variables a prefix. (emerge-line-numbers): Rename local `diff' to emerge-line-diff. (emerge-line-number-in-buf): Update for above name change. (emerge-combine-versions-internal): Rename local `template' to emerge-combine-template. (emerge-combine-versions-edit): Update for above name change.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog11
-rw-r--r--lisp/vc/emerge.el236
2 files changed, 124 insertions, 123 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 9407c62075f..09e6c962f19 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,14 @@
12010-11-06 Glenn Morris <rgm@gnu.org>
2
3 * vc/emerge.el (emerge-eval-in-buffer): Remove, and replace all uses
4 with with-current-buffer.
5 (diff, template): Give dynamic local variables a prefix.
6 (emerge-line-numbers): Rename local `diff' to emerge-line-diff.
7 (emerge-line-number-in-buf): Update for above name change.
8 (emerge-combine-versions-internal): Rename local `template' to
9 emerge-combine-template.
10 (emerge-combine-versions-edit): Update for above name change.
11
12010-11-06 Ralf Angeli <angeli@caeruleus.net> 122010-11-06 Ralf Angeli <angeli@caeruleus.net>
2 13
3 * textmodes/reftex-cite.el 14 * textmodes/reftex-cite.el
diff --git a/lisp/vc/emerge.el b/lisp/vc/emerge.el
index 4946df6dcd3..b32eed01c81 100644
--- a/lisp/vc/emerge.el
+++ b/lisp/vc/emerge.el
@@ -29,25 +29,13 @@
29(defvar A-end) 29(defvar A-end)
30(defvar B-begin) 30(defvar B-begin)
31(defvar B-end) 31(defvar B-end)
32(defvar diff)
33(defvar diff-vector) 32(defvar diff-vector)
34(defvar merge-begin) 33(defvar merge-begin)
35(defvar merge-end) 34(defvar merge-end)
36(defvar template)
37(defvar valid-diff) 35(defvar valid-diff)
38 36
39;;; Macros 37;;; Macros
40 38
41(defmacro emerge-eval-in-buffer (buffer &rest forms)
42 "Macro to switch to BUFFER, evaluate FORMS, returns to original buffer.
43Differs from `save-excursion' in that it doesn't save the point and mark."
44 `(let ((StartBuffer (current-buffer)))
45 (unwind-protect
46 (progn
47 (set-buffer ,buffer)
48 ,@forms)
49 (set-buffer StartBuffer))))
50
51(defmacro emerge-defvar-local (var value doc) 39(defmacro emerge-defvar-local (var value doc)
52 "Defines SYMBOL as an advertised variable. 40 "Defines SYMBOL as an advertised variable.
53Performs a defvar, then executes `make-variable-buffer-local' on 41Performs a defvar, then executes `make-variable-buffer-local' on
@@ -565,7 +553,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
565 (if output-file 553 (if output-file
566 (setq emerge-last-dir-output (file-name-directory output-file))) 554 (setq emerge-last-dir-output (file-name-directory output-file)))
567 ;; Make sure the entire files are seen, and they reflect what is on disk 555 ;; Make sure the entire files are seen, and they reflect what is on disk
568 (emerge-eval-in-buffer 556 (with-current-buffer
569 buffer-A 557 buffer-A
570 (widen) 558 (widen)
571 (let ((temp (file-local-copy file-A))) 559 (let ((temp (file-local-copy file-A)))
@@ -576,7 +564,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
576 startup-hooks)) 564 startup-hooks))
577 ;; Verify that the file matches the buffer 565 ;; Verify that the file matches the buffer
578 (emerge-verify-file-buffer)))) 566 (emerge-verify-file-buffer))))
579 (emerge-eval-in-buffer 567 (with-current-buffer
580 buffer-B 568 buffer-B
581 (widen) 569 (widen)
582 (let ((temp (file-local-copy file-B))) 570 (let ((temp (file-local-copy file-B)))
@@ -599,10 +587,10 @@ This is *not* a user option, since Emerge uses it for its own processing.")
599 (let* ((merge-buffer-name (emerge-unique-buffer-name "*merge" "*")) 587 (let* ((merge-buffer-name (emerge-unique-buffer-name "*merge" "*"))
600 ;; create the merge buffer from buffer A, so it inherits buffer A's 588 ;; create the merge buffer from buffer A, so it inherits buffer A's
601 ;; default directory, etc. 589 ;; default directory, etc.
602 (merge-buffer (emerge-eval-in-buffer 590 (merge-buffer (with-current-buffer
603 buffer-A 591 buffer-A
604 (get-buffer-create merge-buffer-name)))) 592 (get-buffer-create merge-buffer-name))))
605 (emerge-eval-in-buffer 593 (with-current-buffer
606 merge-buffer 594 merge-buffer
607 (emerge-copy-modes buffer-A) 595 (emerge-copy-modes buffer-A)
608 (setq buffer-read-only nil) 596 (setq buffer-read-only nil)
@@ -625,14 +613,14 @@ This is *not* a user option, since Emerge uses it for its own processing.")
625 (emerge-remember-buffer-characteristics) 613 (emerge-remember-buffer-characteristics)
626 (emerge-handle-local-variables)) 614 (emerge-handle-local-variables))
627 (emerge-setup-windows buffer-A buffer-B merge-buffer t) 615 (emerge-setup-windows buffer-A buffer-B merge-buffer t)
628 (emerge-eval-in-buffer merge-buffer 616 (with-current-buffer merge-buffer
629 (run-hooks 'startup-hooks 'emerge-startup-hook) 617 (run-hooks 'startup-hooks 'emerge-startup-hook)
630 (setq buffer-read-only t)))) 618 (setq buffer-read-only t))))
631 619
632;; Generate the Emerge difference list between two files 620;; Generate the Emerge difference list between two files
633(defun emerge-make-diff-list (file-A file-B) 621(defun emerge-make-diff-list (file-A file-B)
634 (setq emerge-diff-buffer (get-buffer-create "*emerge-diff*")) 622 (setq emerge-diff-buffer (get-buffer-create "*emerge-diff*"))
635 (emerge-eval-in-buffer 623 (with-current-buffer
636 emerge-diff-buffer 624 emerge-diff-buffer
637 (erase-buffer) 625 (erase-buffer)
638 (shell-command 626 (shell-command
@@ -648,7 +636,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
648 636
649(defun emerge-extract-diffs (diff-buffer) 637(defun emerge-extract-diffs (diff-buffer)
650 (let (list) 638 (let (list)
651 (emerge-eval-in-buffer 639 (with-current-buffer
652 diff-buffer 640 diff-buffer
653 (goto-char (point-min)) 641 (goto-char (point-min))
654 (while (re-search-forward emerge-match-diff-line nil t) 642 (while (re-search-forward emerge-match-diff-line nil t)
@@ -692,7 +680,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
692;; Set up buffer of diff/diff3 error messages. 680;; Set up buffer of diff/diff3 error messages.
693(defun emerge-prepare-error-list (ok-regexp) 681(defun emerge-prepare-error-list (ok-regexp)
694 (setq emerge-diff-error-buffer (get-buffer-create "*emerge-diff-errors*")) 682 (setq emerge-diff-error-buffer (get-buffer-create "*emerge-diff-errors*"))
695 (emerge-eval-in-buffer 683 (with-current-buffer
696 emerge-diff-error-buffer 684 emerge-diff-error-buffer
697 (erase-buffer) 685 (erase-buffer)
698 (save-excursion (insert-buffer-substring emerge-diff-buffer)) 686 (save-excursion (insert-buffer-substring emerge-diff-buffer))
@@ -719,7 +707,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
719 (if output-file 707 (if output-file
720 (setq emerge-last-dir-output (file-name-directory output-file))) 708 (setq emerge-last-dir-output (file-name-directory output-file)))
721 ;; Make sure the entire files are seen, and they reflect what is on disk 709 ;; Make sure the entire files are seen, and they reflect what is on disk
722 (emerge-eval-in-buffer 710 (with-current-buffer
723 buffer-A 711 buffer-A
724 (widen) 712 (widen)
725 (let ((temp (file-local-copy file-A))) 713 (let ((temp (file-local-copy file-A)))
@@ -730,7 +718,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
730 startup-hooks)) 718 startup-hooks))
731 ;; Verify that the file matches the buffer 719 ;; Verify that the file matches the buffer
732 (emerge-verify-file-buffer)))) 720 (emerge-verify-file-buffer))))
733 (emerge-eval-in-buffer 721 (with-current-buffer
734 buffer-B 722 buffer-B
735 (widen) 723 (widen)
736 (let ((temp (file-local-copy file-B))) 724 (let ((temp (file-local-copy file-B)))
@@ -741,7 +729,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
741 startup-hooks)) 729 startup-hooks))
742 ;; Verify that the file matches the buffer 730 ;; Verify that the file matches the buffer
743 (emerge-verify-file-buffer)))) 731 (emerge-verify-file-buffer))))
744 (emerge-eval-in-buffer 732 (with-current-buffer
745 buffer-ancestor 733 buffer-ancestor
746 (widen) 734 (widen)
747 (let ((temp (file-local-copy file-ancestor))) 735 (let ((temp (file-local-copy file-ancestor)))
@@ -768,10 +756,10 @@ This is *not* a user option, since Emerge uses it for its own processing.")
768 (let* ((merge-buffer-name (emerge-unique-buffer-name "*merge" "*")) 756 (let* ((merge-buffer-name (emerge-unique-buffer-name "*merge" "*"))
769 ;; create the merge buffer from buffer A, so it inherits buffer A's 757 ;; create the merge buffer from buffer A, so it inherits buffer A's
770 ;; default directory, etc. 758 ;; default directory, etc.
771 (merge-buffer (emerge-eval-in-buffer 759 (merge-buffer (with-current-buffer
772 buffer-A 760 buffer-A
773 (get-buffer-create merge-buffer-name)))) 761 (get-buffer-create merge-buffer-name))))
774 (emerge-eval-in-buffer 762 (with-current-buffer
775 merge-buffer 763 merge-buffer
776 (emerge-copy-modes buffer-A) 764 (emerge-copy-modes buffer-A)
777 (setq buffer-read-only nil) 765 (setq buffer-read-only nil)
@@ -796,14 +784,14 @@ This is *not* a user option, since Emerge uses it for its own processing.")
796 (emerge-select-prefer-Bs) 784 (emerge-select-prefer-Bs)
797 (emerge-handle-local-variables)) 785 (emerge-handle-local-variables))
798 (emerge-setup-windows buffer-A buffer-B merge-buffer t) 786 (emerge-setup-windows buffer-A buffer-B merge-buffer t)
799 (emerge-eval-in-buffer merge-buffer 787 (with-current-buffer merge-buffer
800 (run-hooks 'startup-hooks 'emerge-startup-hook) 788 (run-hooks 'startup-hooks 'emerge-startup-hook)
801 (setq buffer-read-only t)))) 789 (setq buffer-read-only t))))
802 790
803;; Generate the Emerge difference list between two files with an ancestor 791;; Generate the Emerge difference list between two files with an ancestor
804(defun emerge-make-diff3-list (file-A file-B file-ancestor) 792(defun emerge-make-diff3-list (file-A file-B file-ancestor)
805 (setq emerge-diff-buffer (get-buffer-create "*emerge-diff*")) 793 (setq emerge-diff-buffer (get-buffer-create "*emerge-diff*"))
806 (emerge-eval-in-buffer 794 (with-current-buffer
807 emerge-diff-buffer 795 emerge-diff-buffer
808 (erase-buffer) 796 (erase-buffer)
809 (shell-command 797 (shell-command
@@ -820,7 +808,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
820 808
821(defun emerge-extract-diffs3 (diff-buffer) 809(defun emerge-extract-diffs3 (diff-buffer)
822 (let (list) 810 (let (list)
823 (emerge-eval-in-buffer 811 (with-current-buffer
824 diff-buffer 812 diff-buffer
825 (while (re-search-forward "^====\\(.?\\)$" nil t) 813 (while (re-search-forward "^====\\(.?\\)$" nil t)
826 ;; leave point after matched line 814 ;; leave point after matched line
@@ -928,10 +916,10 @@ This is *not* a user option, since Emerge uses it for its own processing.")
928 (interactive "bBuffer A to merge: \nbBuffer B to merge: ") 916 (interactive "bBuffer A to merge: \nbBuffer B to merge: ")
929 (let ((emerge-file-A (emerge-make-temp-file "A")) 917 (let ((emerge-file-A (emerge-make-temp-file "A"))
930 (emerge-file-B (emerge-make-temp-file "B"))) 918 (emerge-file-B (emerge-make-temp-file "B")))
931 (emerge-eval-in-buffer 919 (with-current-buffer
932 buffer-A 920 buffer-A
933 (write-region (point-min) (point-max) emerge-file-A nil 'no-message)) 921 (write-region (point-min) (point-max) emerge-file-A nil 'no-message))
934 (emerge-eval-in-buffer 922 (with-current-buffer
935 buffer-B 923 buffer-B
936 (write-region (point-min) (point-max) emerge-file-B nil 'no-message)) 924 (write-region (point-min) (point-max) emerge-file-B nil 'no-message))
937 (emerge-setup (get-buffer buffer-A) emerge-file-A 925 (emerge-setup (get-buffer buffer-A) emerge-file-A
@@ -953,13 +941,13 @@ This is *not* a user option, since Emerge uses it for its own processing.")
953 (let ((emerge-file-A (emerge-make-temp-file "A")) 941 (let ((emerge-file-A (emerge-make-temp-file "A"))
954 (emerge-file-B (emerge-make-temp-file "B")) 942 (emerge-file-B (emerge-make-temp-file "B"))
955 (emerge-file-ancestor (emerge-make-temp-file "anc"))) 943 (emerge-file-ancestor (emerge-make-temp-file "anc")))
956 (emerge-eval-in-buffer 944 (with-current-buffer
957 buffer-A 945 buffer-A
958 (write-region (point-min) (point-max) emerge-file-A nil 'no-message)) 946 (write-region (point-min) (point-max) emerge-file-A nil 'no-message))
959 (emerge-eval-in-buffer 947 (with-current-buffer
960 buffer-B 948 buffer-B
961 (write-region (point-min) (point-max) emerge-file-B nil 'no-message)) 949 (write-region (point-min) (point-max) emerge-file-B nil 'no-message))
962 (emerge-eval-in-buffer 950 (with-current-buffer
963 buffer-ancestor 951 buffer-ancestor
964 (write-region (point-min) (point-max) emerge-file-ancestor nil 952 (write-region (point-min) (point-max) emerge-file-ancestor nil
965 'no-message)) 953 'no-message))
@@ -1093,7 +1081,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
1093 (emerge-file-A (emerge-make-temp-file "A")) 1081 (emerge-file-A (emerge-make-temp-file "A"))
1094 (emerge-file-B (emerge-make-temp-file "B"))) 1082 (emerge-file-B (emerge-make-temp-file "B")))
1095 ;; Get the revisions into buffers 1083 ;; Get the revisions into buffers
1096 (emerge-eval-in-buffer 1084 (with-current-buffer
1097 buffer-A 1085 buffer-A
1098 (erase-buffer) 1086 (erase-buffer)
1099 (shell-command 1087 (shell-command
@@ -1101,7 +1089,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
1101 t) 1089 t)
1102 (write-region (point-min) (point-max) emerge-file-A nil 'no-message) 1090 (write-region (point-min) (point-max) emerge-file-A nil 'no-message)
1103 (set-buffer-modified-p nil)) 1091 (set-buffer-modified-p nil))
1104 (emerge-eval-in-buffer 1092 (with-current-buffer
1105 buffer-B 1093 buffer-B
1106 (erase-buffer) 1094 (erase-buffer)
1107 (shell-command 1095 (shell-command
@@ -1131,7 +1119,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
1131 (emerge-file-B (emerge-make-temp-file "B")) 1119 (emerge-file-B (emerge-make-temp-file "B"))
1132 (emerge-ancestor (emerge-make-temp-file "ancestor"))) 1120 (emerge-ancestor (emerge-make-temp-file "ancestor")))
1133 ;; Get the revisions into buffers 1121 ;; Get the revisions into buffers
1134 (emerge-eval-in-buffer 1122 (with-current-buffer
1135 buffer-A 1123 buffer-A
1136 (erase-buffer) 1124 (erase-buffer)
1137 (shell-command 1125 (shell-command
@@ -1140,7 +1128,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
1140 t) 1128 t)
1141 (write-region (point-min) (point-max) emerge-file-A nil 'no-message) 1129 (write-region (point-min) (point-max) emerge-file-A nil 'no-message)
1142 (set-buffer-modified-p nil)) 1130 (set-buffer-modified-p nil))
1143 (emerge-eval-in-buffer 1131 (with-current-buffer
1144 buffer-B 1132 buffer-B
1145 (erase-buffer) 1133 (erase-buffer)
1146 (shell-command 1134 (shell-command
@@ -1148,7 +1136,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
1148 t) 1136 t)
1149 (write-region (point-min) (point-max) emerge-file-B nil 'no-message) 1137 (write-region (point-min) (point-max) emerge-file-B nil 'no-message)
1150 (set-buffer-modified-p nil)) 1138 (set-buffer-modified-p nil))
1151 (emerge-eval-in-buffer 1139 (with-current-buffer
1152 buffer-ancestor 1140 buffer-ancestor
1153 (erase-buffer) 1141 (erase-buffer)
1154 (shell-command 1142 (shell-command
@@ -1379,7 +1367,7 @@ Otherwise, the A or B file present is copied to the output file."
1379 (if pos 1367 (if pos
1380 (goto-char (point-min))) 1368 (goto-char (point-min)))
1381 ;; If diff/diff3 reports errors, display them rather than the merge buffer. 1369 ;; If diff/diff3 reports errors, display them rather than the merge buffer.
1382 (if (/= 0 (emerge-eval-in-buffer emerge-diff-error-buffer (buffer-size))) 1370 (if (/= 0 (with-current-buffer emerge-diff-error-buffer (buffer-size)))
1383 (progn 1371 (progn
1384 (ding) 1372 (ding)
1385 (message "Errors found in diff/diff3 output. Merge buffer is %s." 1373 (message "Errors found in diff/diff3 output. Merge buffer is %s."
@@ -1434,14 +1422,14 @@ These characteristics are restored by `emerge-restore-buffer-characteristics'."
1434 (do-auto-save) 1422 (do-auto-save)
1435 ;; remember and alter buffer characteristics 1423 ;; remember and alter buffer characteristics
1436 (setq emerge-A-buffer-values 1424 (setq emerge-A-buffer-values
1437 (emerge-eval-in-buffer 1425 (with-current-buffer
1438 emerge-A-buffer 1426 emerge-A-buffer
1439 (prog1 1427 (prog1
1440 (emerge-save-variables emerge-saved-variables) 1428 (emerge-save-variables emerge-saved-variables)
1441 (emerge-restore-variables emerge-saved-variables 1429 (emerge-restore-variables emerge-saved-variables
1442 emerge-merging-values)))) 1430 emerge-merging-values))))
1443 (setq emerge-B-buffer-values 1431 (setq emerge-B-buffer-values
1444 (emerge-eval-in-buffer 1432 (with-current-buffer
1445 emerge-B-buffer 1433 emerge-B-buffer
1446 (prog1 1434 (prog1
1447 (emerge-save-variables emerge-saved-variables) 1435 (emerge-save-variables emerge-saved-variables)
@@ -1452,10 +1440,10 @@ These characteristics are restored by `emerge-restore-buffer-characteristics'."
1452 "Restore characteristics saved by `emerge-remember-buffer-characteristics'." 1440 "Restore characteristics saved by `emerge-remember-buffer-characteristics'."
1453 (let ((A-values emerge-A-buffer-values) 1441 (let ((A-values emerge-A-buffer-values)
1454 (B-values emerge-B-buffer-values)) 1442 (B-values emerge-B-buffer-values))
1455 (emerge-eval-in-buffer emerge-A-buffer 1443 (with-current-buffer emerge-A-buffer
1456 (emerge-restore-variables emerge-saved-variables 1444 (emerge-restore-variables emerge-saved-variables
1457 A-values)) 1445 A-values))
1458 (emerge-eval-in-buffer emerge-B-buffer 1446 (with-current-buffer emerge-B-buffer
1459 (emerge-restore-variables emerge-saved-variables 1447 (emerge-restore-variables emerge-saved-variables
1460 B-values)))) 1448 B-values))))
1461 1449
@@ -1470,15 +1458,15 @@ These characteristics are restored by `emerge-restore-buffer-characteristics'."
1470 merge-buffer 1458 merge-buffer
1471 lineno-list) 1459 lineno-list)
1472 (let* (marker-list 1460 (let* (marker-list
1473 (A-point-min (emerge-eval-in-buffer A-buffer (point-min))) 1461 (A-point-min (with-current-buffer A-buffer (point-min)))
1474 (offset (1- A-point-min)) 1462 (offset (1- A-point-min))
1475 (B-point-min (emerge-eval-in-buffer B-buffer (point-min))) 1463 (B-point-min (with-current-buffer B-buffer (point-min)))
1476 ;; Record current line number in each buffer 1464 ;; Record current line number in each buffer
1477 ;; so we don't have to count from the beginning. 1465 ;; so we don't have to count from the beginning.
1478 (a-line 1) 1466 (a-line 1)
1479 (b-line 1)) 1467 (b-line 1))
1480 (emerge-eval-in-buffer A-buffer (goto-char (point-min))) 1468 (with-current-buffer A-buffer (goto-char (point-min)))
1481 (emerge-eval-in-buffer B-buffer (goto-char (point-min))) 1469 (with-current-buffer B-buffer (goto-char (point-min)))
1482 (while lineno-list 1470 (while lineno-list
1483 (let* ((list-element (car lineno-list)) 1471 (let* ((list-element (car lineno-list))
1484 a-begin-marker 1472 a-begin-marker
@@ -1493,13 +1481,13 @@ These characteristics are restored by `emerge-restore-buffer-characteristics'."
1493 (b-end (aref list-element 3)) 1481 (b-end (aref list-element 3))
1494 (state (aref list-element 4))) 1482 (state (aref list-element 4)))
1495 ;; place markers at the appropriate places in the buffers 1483 ;; place markers at the appropriate places in the buffers
1496 (emerge-eval-in-buffer 1484 (with-current-buffer
1497 A-buffer 1485 A-buffer
1498 (setq a-line (emerge-goto-line a-begin a-line)) 1486 (setq a-line (emerge-goto-line a-begin a-line))
1499 (setq a-begin-marker (point-marker)) 1487 (setq a-begin-marker (point-marker))
1500 (setq a-line (emerge-goto-line a-end a-line)) 1488 (setq a-line (emerge-goto-line a-end a-line))
1501 (setq a-end-marker (point-marker))) 1489 (setq a-end-marker (point-marker)))
1502 (emerge-eval-in-buffer 1490 (with-current-buffer
1503 B-buffer 1491 B-buffer
1504 (setq b-line (emerge-goto-line b-begin b-line)) 1492 (setq b-line (emerge-goto-line b-begin b-line))
1505 (setq b-begin-marker (point-marker)) 1493 (setq b-begin-marker (point-marker))
@@ -1759,7 +1747,7 @@ This resets the horizontal scrolling of all three merge buffers
1759to the left margin, if they are in windows." 1747to the left margin, if they are in windows."
1760 (interactive) 1748 (interactive)
1761 (emerge-operate-on-windows 1749 (emerge-operate-on-windows
1762 (function (lambda (x) (set-window-hscroll (selected-window) 0))) 1750 (lambda (x) (set-window-hscroll (selected-window) 0))
1763 nil)) 1751 nil))
1764 1752
1765;; Attempt to show the region nicely. 1753;; Attempt to show the region nicely.
@@ -1869,13 +1857,13 @@ buffer after this will cause serious problems."
1869 (emerge-restore-buffer-characteristics) 1857 (emerge-restore-buffer-characteristics)
1870 ;; null out the difference markers so they don't slow down future editing 1858 ;; null out the difference markers so they don't slow down future editing
1871 ;; operations 1859 ;; operations
1872 (mapc (function (lambda (d) 1860 (mapc (lambda (d)
1873 (set-marker (aref d 0) nil) 1861 (set-marker (aref d 0) nil)
1874 (set-marker (aref d 1) nil) 1862 (set-marker (aref d 1) nil)
1875 (set-marker (aref d 2) nil) 1863 (set-marker (aref d 2) nil)
1876 (set-marker (aref d 3) nil) 1864 (set-marker (aref d 3) nil)
1877 (set-marker (aref d 4) nil) 1865 (set-marker (aref d 4) nil)
1878 (set-marker (aref d 5) nil))) 1866 (set-marker (aref d 5) nil))
1879 emerge-difference-list) 1867 emerge-difference-list)
1880 ;; allow them to be garbage collected 1868 ;; allow them to be garbage collected
1881 (setq emerge-difference-list nil) 1869 (setq emerge-difference-list nil)
@@ -1900,19 +1888,18 @@ A prefix argument forces the variant to be selected
1900even if the difference has been edited." 1888even if the difference has been edited."
1901 (interactive "P") 1889 (interactive "P")
1902 (let ((operate 1890 (let ((operate
1903 (function (lambda () 1891 (lambda ()
1904 (emerge-select-A-edit merge-begin merge-end A-begin A-end) 1892 (emerge-select-A-edit merge-begin merge-end A-begin A-end)
1905 (if emerge-auto-advance 1893 (if emerge-auto-advance
1906 (emerge-next-difference))))) 1894 (emerge-next-difference))))
1907 (operate-no-change 1895 (operate-no-change
1908 (function (lambda () 1896 (lambda () (if emerge-auto-advance
1909 (if emerge-auto-advance 1897 (emerge-next-difference)))))
1910 (emerge-next-difference))))))
1911 (emerge-select-version force operate-no-change operate operate))) 1898 (emerge-select-version force operate-no-change operate operate)))
1912 1899
1913;; Actually select the A variant 1900;; Actually select the A variant
1914(defun emerge-select-A-edit (merge-begin merge-end A-begin A-end) 1901(defun emerge-select-A-edit (merge-begin merge-end A-begin A-end)
1915 (emerge-eval-in-buffer 1902 (with-current-buffer
1916 emerge-merge-buffer 1903 emerge-merge-buffer
1917 (delete-region merge-begin merge-end) 1904 (delete-region merge-begin merge-end)
1918 (goto-char merge-begin) 1905 (goto-char merge-begin)
@@ -1929,19 +1916,18 @@ A prefix argument forces the variant to be selected
1929even if the difference has been edited." 1916even if the difference has been edited."
1930 (interactive "P") 1917 (interactive "P")
1931 (let ((operate 1918 (let ((operate
1932 (function (lambda () 1919 (lambda ()
1933 (emerge-select-B-edit merge-begin merge-end B-begin B-end) 1920 (emerge-select-B-edit merge-begin merge-end B-begin B-end)
1934 (if emerge-auto-advance 1921 (if emerge-auto-advance
1935 (emerge-next-difference))))) 1922 (emerge-next-difference))))
1936 (operate-no-change 1923 (operate-no-change
1937 (function (lambda () 1924 (lambda () (if emerge-auto-advance
1938 (if emerge-auto-advance 1925 (emerge-next-difference)))))
1939 (emerge-next-difference))))))
1940 (emerge-select-version force operate operate-no-change operate))) 1926 (emerge-select-version force operate operate-no-change operate)))
1941 1927
1942;; Actually select the B variant 1928;; Actually select the B variant
1943(defun emerge-select-B-edit (merge-begin merge-end B-begin B-end) 1929(defun emerge-select-B-edit (merge-begin merge-end B-begin B-end)
1944 (emerge-eval-in-buffer 1930 (with-current-buffer
1945 emerge-merge-buffer 1931 emerge-merge-buffer
1946 (delete-region merge-begin merge-end) 1932 (delete-region merge-begin merge-end)
1947 (goto-char merge-begin) 1933 (goto-char merge-begin)
@@ -2134,12 +2120,12 @@ Use C-u l to reset the windows afterward."
2134 (interactive) 2120 (interactive)
2135 (delete-other-windows) 2121 (delete-other-windows)
2136 (let ((temp-buffer-show-function 2122 (let ((temp-buffer-show-function
2137 (function (lambda (buf) 2123 (lambda (buf)
2138 (split-window-vertically) 2124 (split-window-vertically)
2139 (switch-to-buffer buf) 2125 (switch-to-buffer buf)
2140 (other-window 1))))) 2126 (other-window 1))))
2141 (with-output-to-temp-buffer "*Help*" 2127 (with-output-to-temp-buffer "*Help*"
2142 (emerge-eval-in-buffer emerge-A-buffer 2128 (with-current-buffer emerge-A-buffer
2143 (if buffer-file-name 2129 (if buffer-file-name
2144 (progn 2130 (progn
2145 (princ "File A is: ") 2131 (princ "File A is: ")
@@ -2148,7 +2134,7 @@ Use C-u l to reset the windows afterward."
2148 (princ "Buffer A is: ") 2134 (princ "Buffer A is: ")
2149 (princ (buffer-name)))) 2135 (princ (buffer-name))))
2150 (princ "\n")) 2136 (princ "\n"))
2151 (emerge-eval-in-buffer emerge-B-buffer 2137 (with-current-buffer emerge-B-buffer
2152 (if buffer-file-name 2138 (if buffer-file-name
2153 (progn 2139 (progn
2154 (princ "File B is: ") 2140 (princ "File B is: ")
@@ -2158,7 +2144,7 @@ Use C-u l to reset the windows afterward."
2158 (princ (buffer-name)))) 2144 (princ (buffer-name))))
2159 (princ "\n")) 2145 (princ "\n"))
2160 (if emerge-ancestor-buffer 2146 (if emerge-ancestor-buffer
2161 (emerge-eval-in-buffer emerge-ancestor-buffer 2147 (with-current-buffer emerge-ancestor-buffer
2162 (if buffer-file-name 2148 (if buffer-file-name
2163 (progn 2149 (progn
2164 (princ "Ancestor file is: ") 2150 (princ "Ancestor file is: ")
@@ -2229,9 +2215,9 @@ With a prefix argument, join with the preceding one."
2229 ;; check that this is a valid difference 2215 ;; check that this is a valid difference
2230 (emerge-validate-difference) 2216 (emerge-validate-difference)
2231 ;; get the point values and old difference 2217 ;; get the point values and old difference
2232 (let ((A-point (emerge-eval-in-buffer emerge-A-buffer 2218 (let ((A-point (with-current-buffer emerge-A-buffer
2233 (point-marker))) 2219 (point-marker)))
2234 (B-point (emerge-eval-in-buffer emerge-B-buffer 2220 (B-point (with-current-buffer emerge-B-buffer
2235 (point-marker))) 2221 (point-marker)))
2236 (merge-point (point-marker)) 2222 (merge-point (point-marker))
2237 (old-diff (aref emerge-difference-list n))) 2223 (old-diff (aref emerge-difference-list n)))
@@ -2313,10 +2299,10 @@ ancestor version does not share.)"
2313 (while success 2299 (while success
2314 (setq size (min size (- bottom-a top-a) (- bottom-b top-b) 2300 (setq size (min size (- bottom-a top-a) (- bottom-b top-b)
2315 (- bottom-m top-m))) 2301 (- bottom-m top-m)))
2316 (setq sa (emerge-eval-in-buffer emerge-A-buffer 2302 (setq sa (with-current-buffer emerge-A-buffer
2317 (buffer-substring top-a 2303 (buffer-substring top-a
2318 (+ size top-a)))) 2304 (+ size top-a))))
2319 (setq sb (emerge-eval-in-buffer emerge-B-buffer 2305 (setq sb (with-current-buffer emerge-B-buffer
2320 (buffer-substring top-b 2306 (buffer-substring top-b
2321 (+ size top-b)))) 2307 (+ size top-b))))
2322 (setq sm (buffer-substring top-m (+ size top-m))) 2308 (setq sm (buffer-substring top-m (+ size top-m)))
@@ -2335,10 +2321,10 @@ ancestor version does not share.)"
2335 (while success 2321 (while success
2336 (setq size (min size (- bottom-a top-a) (- bottom-b top-b) 2322 (setq size (min size (- bottom-a top-a) (- bottom-b top-b)
2337 (- bottom-m top-m))) 2323 (- bottom-m top-m)))
2338 (setq sa (emerge-eval-in-buffer emerge-A-buffer 2324 (setq sa (with-current-buffer emerge-A-buffer
2339 (buffer-substring (- bottom-a size) 2325 (buffer-substring (- bottom-a size)
2340 bottom-a))) 2326 bottom-a)))
2341 (setq sb (emerge-eval-in-buffer emerge-B-buffer 2327 (setq sb (with-current-buffer emerge-B-buffer
2342 (buffer-substring (- bottom-b size) 2328 (buffer-substring (- bottom-b size)
2343 bottom-b))) 2329 bottom-b)))
2344 (setq sm (buffer-substring (- bottom-m size) bottom-m)) 2330 (setq sm (buffer-substring (- bottom-m size) bottom-m))
@@ -2351,14 +2337,14 @@ ancestor version does not share.)"
2351 ;; {top,bottom}-{a,b,m} are now set at the new beginnings and ends 2337 ;; {top,bottom}-{a,b,m} are now set at the new beginnings and ends
2352 ;; of the difference regions. Move them to the beginning of lines, as 2338 ;; of the difference regions. Move them to the beginning of lines, as
2353 ;; appropriate. 2339 ;; appropriate.
2354 (emerge-eval-in-buffer emerge-A-buffer 2340 (with-current-buffer emerge-A-buffer
2355 (goto-char top-a) 2341 (goto-char top-a)
2356 (beginning-of-line) 2342 (beginning-of-line)
2357 (aset diff 0 (point-marker)) 2343 (aset diff 0 (point-marker))
2358 (goto-char bottom-a) 2344 (goto-char bottom-a)
2359 (beginning-of-line 2) 2345 (beginning-of-line 2)
2360 (aset diff 1 (point-marker))) 2346 (aset diff 1 (point-marker)))
2361 (emerge-eval-in-buffer emerge-B-buffer 2347 (with-current-buffer emerge-B-buffer
2362 (goto-char top-b) 2348 (goto-char top-b)
2363 (beginning-of-line) 2349 (beginning-of-line)
2364 (aset diff 2 (point-marker)) 2350 (aset diff 2 (point-marker))
@@ -2413,7 +2399,7 @@ the nearest previous difference."
2413 ;; search for the point in the A buffer, using the markers 2399 ;; search for the point in the A buffer, using the markers
2414 ;; for the beginning and end of the differences in the A buffer 2400 ;; for the beginning and end of the differences in the A buffer
2415 (emerge-find-difference1 arg 2401 (emerge-find-difference1 arg
2416 (emerge-eval-in-buffer emerge-A-buffer (point)) 2402 (with-current-buffer emerge-A-buffer (point))
2417 0 1)) 2403 0 1))
2418 2404
2419(defun emerge-find-difference-B (arg) 2405(defun emerge-find-difference-B (arg)
@@ -2426,7 +2412,7 @@ the nearest previous difference."
2426 ;; search for the point in the B buffer, using the markers 2412 ;; search for the point in the B buffer, using the markers
2427 ;; for the beginning and end of the differences in the B buffer 2413 ;; for the beginning and end of the differences in the B buffer
2428 (emerge-find-difference1 arg 2414 (emerge-find-difference1 arg
2429 (emerge-eval-in-buffer emerge-B-buffer (point)) 2415 (with-current-buffer emerge-B-buffer (point))
2430 2 3)) 2416 2 3))
2431 2417
2432(defun emerge-find-difference1 (arg location begin end) 2418(defun emerge-find-difference1 (arg location begin end)
@@ -2474,16 +2460,19 @@ merge buffers."
2474 (let* ((valid-diff 2460 (let* ((valid-diff
2475 (and (>= emerge-current-difference 0) 2461 (and (>= emerge-current-difference 0)
2476 (< emerge-current-difference emerge-number-of-differences))) 2462 (< emerge-current-difference emerge-number-of-differences)))
2477 (diff (and valid-diff 2463 (emerge-line-diff (and valid-diff
2478 (aref emerge-difference-list emerge-current-difference))) 2464 (aref emerge-difference-list
2479 (merge-line (emerge-line-number-in-buf 4 5)) 2465 emerge-current-difference)))
2480 (A-line (emerge-eval-in-buffer emerge-A-buffer 2466 (merge-line (emerge-line-number-in-buf 4 5))
2481 (emerge-line-number-in-buf 0 1))) 2467 (A-line (with-current-buffer emerge-A-buffer
2482 (B-line (emerge-eval-in-buffer emerge-B-buffer 2468 (emerge-line-number-in-buf 0 1)))
2483 (emerge-line-number-in-buf 2 3)))) 2469 (B-line (with-current-buffer emerge-B-buffer
2470 (emerge-line-number-in-buf 2 3))))
2484 (message "At lines: merge = %d, A = %d, B = %d" 2471 (message "At lines: merge = %d, A = %d, B = %d"
2485 merge-line A-line B-line))) 2472 merge-line A-line B-line)))
2486 2473
2474(defvar emerge-line-diff)
2475
2487(defun emerge-line-number-in-buf (begin-marker end-marker) 2476(defun emerge-line-number-in-buf (begin-marker end-marker)
2488 (let (temp) 2477 (let (temp)
2489 (setq temp (save-excursion 2478 (setq temp (save-excursion
@@ -2491,9 +2480,9 @@ merge buffers."
2491 (1+ (count-lines 1 (point))))) 2480 (1+ (count-lines 1 (point)))))
2492 (if valid-diff 2481 (if valid-diff
2493 (progn 2482 (progn
2494 (if (> (point) (aref diff begin-marker)) 2483 (if (> (point) (aref emerge-line-diff begin-marker))
2495 (setq temp (- temp emerge-before-flag-lines))) 2484 (setq temp (- temp emerge-before-flag-lines)))
2496 (if (> (point) (aref diff end-marker)) 2485 (if (> (point) (aref emerge-line-diff end-marker))
2497 (setq temp (- temp emerge-after-flag-lines))))) 2486 (setq temp (- temp emerge-after-flag-lines)))))
2498 temp)) 2487 temp))
2499 2488
@@ -2548,30 +2537,32 @@ been edited."
2548 (error "Register does not contain text")) 2537 (error "Register does not contain text"))
2549 (emerge-combine-versions-internal template force))) 2538 (emerge-combine-versions-internal template force)))
2550 2539
2551(defun emerge-combine-versions-internal (template force) 2540(defun emerge-combine-versions-internal (emerge-combine-template force)
2552 (let ((operate 2541 (let ((operate
2553 (function (lambda () 2542 (lambda ()
2554 (emerge-combine-versions-edit merge-begin merge-end 2543 (emerge-combine-versions-edit merge-begin merge-end
2555 A-begin A-end B-begin B-end) 2544 A-begin A-end B-begin B-end)
2556 (if emerge-auto-advance 2545 (if emerge-auto-advance
2557 (emerge-next-difference)))))) 2546 (emerge-next-difference)))))
2558 (emerge-select-version force operate operate operate))) 2547 (emerge-select-version force operate operate operate)))
2559 2548
2549(defvar emerge-combine-template)
2550
2560(defun emerge-combine-versions-edit (merge-begin merge-end 2551(defun emerge-combine-versions-edit (merge-begin merge-end
2561 A-begin A-end B-begin B-end) 2552 A-begin A-end B-begin B-end)
2562 (emerge-eval-in-buffer 2553 (with-current-buffer
2563 emerge-merge-buffer 2554 emerge-merge-buffer
2564 (delete-region merge-begin merge-end) 2555 (delete-region merge-begin merge-end)
2565 (goto-char merge-begin) 2556 (goto-char merge-begin)
2566 (let ((i 0)) 2557 (let ((i 0))
2567 (while (< i (length template)) 2558 (while (< i (length emerge-combine-template))
2568 (let ((c (aref template i))) 2559 (let ((c (aref emerge-combine-template i)))
2569 (if (= c ?%) 2560 (if (= c ?%)
2570 (progn 2561 (progn
2571 (setq i (1+ i)) 2562 (setq i (1+ i))
2572 (setq c 2563 (setq c
2573 (condition-case nil 2564 (condition-case nil
2574 (aref template i) 2565 (aref emerge-combine-template i)
2575 (error ?%))) 2566 (error ?%)))
2576 (cond ((= c ?a) 2567 (cond ((= c ?a)
2577 (insert-buffer-substring emerge-A-buffer A-begin A-end)) 2568 (insert-buffer-substring emerge-A-buffer A-begin A-end))
@@ -2620,7 +2611,7 @@ keymap. Leaves merge in fast mode."
2620(defun emerge-place-flags-in-buffer (buffer difference before-index 2611(defun emerge-place-flags-in-buffer (buffer difference before-index
2621 after-index) 2612 after-index)
2622 (if buffer 2613 (if buffer
2623 (emerge-eval-in-buffer 2614 (with-current-buffer
2624 buffer 2615 buffer
2625 (emerge-place-flags-in-buffer1 difference before-index after-index)) 2616 (emerge-place-flags-in-buffer1 difference before-index after-index))
2626 (emerge-place-flags-in-buffer1 difference before-index after-index))) 2617 (emerge-place-flags-in-buffer1 difference before-index after-index)))
@@ -2689,7 +2680,7 @@ keymap. Leaves merge in fast mode."
2689 (run-hooks 'emerge-unselect-hook)) 2680 (run-hooks 'emerge-unselect-hook))
2690 2681
2691(defun emerge-remove-flags-in-buffer (buffer before after) 2682(defun emerge-remove-flags-in-buffer (buffer before after)
2692 (emerge-eval-in-buffer 2683 (with-current-buffer
2693 buffer 2684 buffer
2694 (let ((buffer-read-only nil)) 2685 (let ((buffer-read-only nil))
2695 ;; remove the flags, if they're there 2686 ;; remove the flags, if they're there
@@ -2838,11 +2829,11 @@ keymap. Leaves merge in fast mode."
2838 (while (< x-begin x-end) 2829 (while (< x-begin x-end)
2839 ;; bite off and compare no more than 1000 characters at a time 2830 ;; bite off and compare no more than 1000 characters at a time
2840 (let* ((compare-length (min (- x-end x-begin) 1000)) 2831 (let* ((compare-length (min (- x-end x-begin) 1000))
2841 (x-string (emerge-eval-in-buffer 2832 (x-string (with-current-buffer
2842 buffer-x 2833 buffer-x
2843 (buffer-substring x-begin 2834 (buffer-substring x-begin
2844 (+ x-begin compare-length)))) 2835 (+ x-begin compare-length))))
2845 (y-string (emerge-eval-in-buffer 2836 (y-string (with-current-buffer
2846 buffer-y 2837 buffer-y
2847 (buffer-substring y-begin 2838 (buffer-substring y-begin
2848 (+ y-begin compare-length))))) 2839 (+ y-begin compare-length)))))
@@ -2879,9 +2870,9 @@ keymap. Leaves merge in fast mode."
2879;; A "function" is anything that funcall can handle as an argument. 2870;; A "function" is anything that funcall can handle as an argument.
2880 2871
2881(defun emerge-save-variables (vars) 2872(defun emerge-save-variables (vars)
2882 (mapcar (function (lambda (v) (if (symbolp v) 2873 (mapcar (lambda (v) (if (symbolp v)
2883 (symbol-value v) 2874 (symbol-value v)
2884 (funcall (car v))))) 2875 (funcall (car v))))
2885 vars)) 2876 vars))
2886 2877
2887(defun emerge-restore-variables (vars values) 2878(defun emerge-restore-variables (vars values)
@@ -2972,7 +2963,7 @@ around the current difference are removed."
2972;; buffer. 2963;; buffer.
2973(defun emerge-copy-modes (buffer) 2964(defun emerge-copy-modes (buffer)
2974 ;; Set the major mode 2965 ;; Set the major mode
2975 (funcall (emerge-eval-in-buffer buffer major-mode))) 2966 (funcall (with-current-buffer buffer major-mode)))
2976 2967
2977;; Define a key, even if a prefix of it is defined 2968;; Define a key, even if a prefix of it is defined
2978(defun emerge-force-define-key (keymap key definition) 2969(defun emerge-force-define-key (keymap key definition)
@@ -3163,11 +3154,11 @@ See also `auto-save-file-name-p'."
3163 (aref s i)) 3154 (aref s i))
3164 65536)) 3155 65536))
3165 (setq i (1+ i))) 3156 (setq i (1+ i)))
3166 (mapconcat (function (lambda (b) 3157 (mapconcat (lambda (b)
3167 (setq b (+ (% b 93) ?!)) 3158 (setq b (+ (% b 93) ?!))
3168 (if (>= b ?/) 3159 (if (>= b ?/)
3169 (setq b (1+ b))) 3160 (setq b (1+ b)))
3170 (char-to-string b))) 3161 (char-to-string b))
3171 bins ""))) 3162 bins "")))
3172 3163
3173;; Quote any /s in a string by replacing them with \!. 3164;; Quote any /s in a string by replacing them with \!.
@@ -3205,5 +3196,4 @@ More precisely, a [...] regexp to match any one such character."
3205 3196
3206(provide 'emerge) 3197(provide 'emerge)
3207 3198
3208;; arch-tag: a575f092-6e44-400e-b8a2-4124e9377585
3209;;; emerge.el ends here 3199;;; emerge.el ends here