From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Kevin Rodgers Newsgroups: gmane.emacs.bugs Subject: Re: ediff-regions-internal can't handle (non-overlapping) regions in the same buffer Date: Mon, 12 Dec 2005 11:24:02 -0700 Message-ID: References: NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: sea.gmane.org 1134421779 19171 80.91.229.2 (12 Dec 2005 21:09:39 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Mon, 12 Dec 2005 21:09:39 +0000 (UTC) Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Dec 12 22:09:39 2005 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1EluuX-0008RA-Au for geb-bug-gnu-emacs@m.gmane.org; Mon, 12 Dec 2005 22:08:41 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Eluv2-0007K5-LV for geb-bug-gnu-emacs@m.gmane.org; Mon, 12 Dec 2005 16:09:12 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1ElsRr-0002Tj-FL for bug-gnu-emacs@gnu.org; Mon, 12 Dec 2005 13:30:55 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1ElsRd-0002Ii-VU for bug-gnu-emacs@gnu.org; Mon, 12 Dec 2005 13:30:43 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1ElsQS-0001bK-Sb for bug-gnu-emacs@gnu.org; Mon, 12 Dec 2005 13:29:29 -0500 Original-Received: from [80.91.229.2] (helo=ciao.gmane.org) by monty-python.gnu.org with esmtp (TLS-1.0:RSA_AES_128_CBC_SHA:16) (Exim 4.34) id 1ElsSD-0005Av-SV for bug-gnu-emacs@gnu.org; Mon, 12 Dec 2005 13:31:18 -0500 Original-Received: from list by ciao.gmane.org with local (Exim 4.43) id 1ElsNZ-0006ex-4o for bug-gnu-emacs@gnu.org; Mon, 12 Dec 2005 19:26:29 +0100 Original-Received: from 207.167.42.60 ([207.167.42.60]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 12 Dec 2005 19:26:29 +0100 Original-Received: from ihs_4664 by 207.167.42.60 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 12 Dec 2005 19:26:29 +0100 X-Injected-Via-Gmane: http://gmane.org/ Original-To: bug-gnu-emacs@gnu.org Original-Lines: 107 Original-X-Complaints-To: usenet@sea.gmane.org X-Gmane-NNTP-Posting-Host: 207.167.42.60 User-Agent: Mozilla Thunderbird 0.9 (X11/20041105) X-Accept-Language: en-us, en In-Reply-To: X-BeenThere: bug-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:14627 Archived-At: Kevin Rodgers wrote: > Kevin Rodgers wrote: >> I'm working on a way to take advantage of Ediff's fine highlighting >> feature within Diff mode buffers. But calling ediff-regions-internal >> programmatically with BUFFER-A the same as BUFFER-B doesn't work, >> leaving only the region between BEG-B and END-B highighted. This is >> because ediff-extract-diffs first resets point in both buffers (changing >> point in BUFFER-A unintentionally), then builds the diff vector by >> moving by lines in each buffer. >> >> The fix is simple, and it allows ediff-regions-internal to work with >> non-overlapping regions in the same buffer: Don't set point in each >> buffer until necessary: > > > Sorry, that patch breaks Ediff horribly. I'll get to work on a proper > fix. Here it is: 2005-12-09 Kevin Rodgers * ediff-diffs.el (ediff-extract-diffs): Keep track of point in buffers A and B in new local variables a-prev-pt and b-prev-pt, in case A and B are the same; and make sure to restore point in buffers A and B before calling forward-line to convert lines to points. *** emacs-21.4/lisp/ediff-diff.el~ Wed Jul 3 10:49:40 2002 --- emacs-21.4/lisp/ediff-diff.el Fri Dec 9 12:22:12 2005 *************** *** 361,367 **** --- 361,369 ---- (B-buffer ediff-buffer-B) (C-buffer ediff-buffer-C) (a-prev 1) ; this is needed to set the first diff line correctly + (a-prev-pt nil) (b-prev 1) + (b-prev-pt nil) (c-prev 1) diff-list shift-A shift-B ) *************** *** 378,388 **** (ediff-overlay-start (ediff-get-value-according-to-buffer-type 'B bounds)))) ! ;; reset point in buffers A/B/C ! (ediff-with-current-buffer A-buffer ! (goto-char (if shift-A shift-A (point-min)))) ! (ediff-with-current-buffer B-buffer ! (goto-char (if shift-B shift-B (point-min)))) (if (ediff-buffer-live-p C-buffer) (ediff-with-current-buffer C-buffer (goto-char (point-min)))) --- 380,386 ---- (ediff-overlay-start (ediff-get-value-according-to-buffer-type 'B bounds)))) ! ;; reset point in buffer C (if (ediff-buffer-live-p C-buffer) (ediff-with-current-buffer C-buffer (goto-char (point-min)))) *************** *** 456,472 **** c-prev c-end) ;; else convert lines to points (ediff-with-current-buffer A-buffer (forward-line (- a-begin a-prev)) (setq a-begin-pt (point)) (forward-line (- a-end a-begin)) (setq a-end-pt (point) ! a-prev a-end)) (ediff-with-current-buffer B-buffer (forward-line (- b-begin b-prev)) (setq b-begin-pt (point)) (forward-line (- b-end b-begin)) (setq b-end-pt (point) ! b-prev b-end)) (if (ediff-buffer-live-p C-buffer) (ediff-with-current-buffer C-buffer (forward-line (- c-begin c-prev)) --- 454,474 ---- c-prev c-end) ;; else convert lines to points (ediff-with-current-buffer A-buffer + (goto-char (or a-prev-pt shift-A (point-min))) (forward-line (- a-begin a-prev)) (setq a-begin-pt (point)) (forward-line (- a-end a-begin)) (setq a-end-pt (point) ! a-prev a-end ! a-prev-pt a-end-pt)) (ediff-with-current-buffer B-buffer + (goto-char (or b-prev-pt shift-B (point-min))) (forward-line (- b-begin b-prev)) (setq b-begin-pt (point)) (forward-line (- b-end b-begin)) (setq b-end-pt (point) ! b-prev b-end ! b-prev-pt b-end-pt)) (if (ediff-buffer-live-p C-buffer) (ediff-with-current-buffer C-buffer (forward-line (- c-begin c-prev)) -- Kevin Rodgers