From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: joakim@verona.se Newsgroups: gmane.emacs.devel Subject: Re: diff mode weirdness Date: Sun, 14 Sep 2008 23:01:34 +0200 Message-ID: References: <4my71xt92o.fsf@gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1221426152 14938 80.91.229.12 (14 Sep 2008 21:02:32 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 14 Sep 2008 21:02:32 +0000 (UTC) Cc: Peter Lee , emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Sep 14 23:03:26 2008 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1KeykZ-0003Du-TN for ged-emacs-devel@m.gmane.org; Sun, 14 Sep 2008 23:03:20 +0200 Original-Received: from localhost ([127.0.0.1]:48698 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KeyjZ-0003HO-CB for ged-emacs-devel@m.gmane.org; Sun, 14 Sep 2008 17:02:17 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KeyjT-0003Gu-NM for emacs-devel@gnu.org; Sun, 14 Sep 2008 17:02:11 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KeyjS-0003GX-9w for emacs-devel@gnu.org; Sun, 14 Sep 2008 17:02:10 -0400 Original-Received: from [199.232.76.173] (port=35624 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KeyjS-0003GU-08 for emacs-devel@gnu.org; Sun, 14 Sep 2008 17:02:10 -0400 Original-Received: from iwfs.imcode.com ([82.115.149.64]:60175 helo=gate.verona.se) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KeyjR-0003fn-DN for emacs-devel@gnu.org; Sun, 14 Sep 2008 17:02:09 -0400 Original-Received: from localhost.localdomain (IDENT:1005@localhost [127.0.0.1]) by gate.verona.se (8.13.4/8.11.4) with ESMTP id m8EL1uG9028927; Sun, 14 Sep 2008 23:01:57 +0200 In-Reply-To: (Stefan Monnier's message of "Fri, 12 Sep 2008 21:53:59 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (gnu/linux) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.4-2.6 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:103883 Archived-At: Stefan Monnier writes: >> copy between the snips and save as /tmp/test.diff > >> Then open the file... > >> The modeline will continuously prompt for: >> Use file Version: /tmp/test > > Does the patch below fix the problem for you? Yes this patch appears to work! Thanks! > > > Stefan > > > --- diff-mode.el.~1.150.~ 2008-08-13 17:49:14.000000000 -0400 > +++ diff-mode.el 2008-09-12 21:52:53.000000000 -0400 > @@ -723,7 +723,7 @@ > (fs (diff-hunk-file-names current-prefix-arg))) > (unless fs (error "No file name to look for")) > (list old (read-file-name (format "File for %s: " (car fs)) > - nil (diff-find-file-name old) t)))) > + nil (diff-find-file-name old 'noprompt) t)))) > (let ((fs (diff-hunk-file-names old))) > (unless fs (error "No file name to look for")) > (push (cons fs name) diff-remembered-files-alist))) > @@ -756,11 +756,10 @@ > (list (if old (match-string 2) (match-string 4)) > (if old (match-string 4) (match-string 2))))))))) > > -(defun diff-find-file-name (&optional old batch prefix) > +(defun diff-find-file-name (&optional old noprompt prefix) > "Return the file corresponding to the current patch. > Non-nil OLD means that we want the old file. > -Non-nil BATCH means to prefer returning an incorrect answer than to prompt > -the user. > +Non-nil NOPROMPT means to prefer returning nil than to prompt the user. > PREFIX is only used internally: don't use it." > (unless (equal diff-remembered-defdir default-directory) > ;; Flush diff-remembered-files-alist if the default-directory is changed. > @@ -801,16 +800,15 @@ > (boundp 'cvs-pcl-cvs-dirchange-re) > (save-excursion > (re-search-backward cvs-pcl-cvs-dirchange-re nil t)) > - (diff-find-file-name old batch (match-string 1))) > - ;; Invent something, if necessary. > - (when batch > - (or (car fs) default-directory)) > + (diff-find-file-name old noprompt (match-string 1))) > ;; if all else fails, ask the user > - (let ((file (read-file-name (format "Use file %s: " (or (first fs) "")) > + (unless noprompt > + (let ((file (read-file-name (format "Use file %s: " > + (or (first fs) "")) > nil (first fs) t (first fs)))) > (set (make-local-variable 'diff-remembered-files-alist) > (cons (cons fs file) diff-remembered-files-alist)) > - file))))) > + file)))))) > > > (defun diff-ediff-patch () > @@ -1286,7 +1284,7 @@ > (set (make-local-variable 'add-log-current-defun-function) > 'diff-current-defun) > (set (make-local-variable 'add-log-buffer-file-name-function) > - 'diff-find-file-name)) > + (lambda () (diff-find-file-name nil 'noprompt)))) > > ;;;###autoload > (define-minor-mode diff-minor-mode > @@ -1547,7 +1545,7 @@ > > (defsubst diff-xor (a b) (if a (if (not b) a) b)) > > -(defun diff-find-source-location (&optional other-file reverse) > +(defun diff-find-source-location (&optional other-file reverse noprompt) > "Find out (BUF LINE-OFFSET POS SRC DST SWITCHED). > BUF is the buffer corresponding to the source file. > LINE-OFFSET is the offset between the expected and actual positions > @@ -1555,7 +1553,8 @@ > POS is a pair (BEG . END) indicating the position of the text in the buffer. > SRC and DST are the two variants of text as returned by `diff-hunk-text'. > SRC is the variant that was found in the buffer. > -SWITCHED is non-nil if the patch is already applied." > +SWITCHED is non-nil if the patch is already applied. > +NOPROMPT, if non-nil, means not to prompt the user." > (save-excursion > (let* ((other (diff-xor other-file diff-jump-to-old-file)) > (char-offset (- (point) (progn (diff-beginning-of-hunk 'try-harder) > @@ -1565,8 +1564,8 @@ > ;; (e.g. because an empty line truncates the hunk mid-course), > ;; leading to potentially nasty surprises for the user. > (_ (diff-sanity-check-hunk)) > - (hunk (buffer-substring (point) > - (save-excursion (diff-end-of-hunk) (point)))) > + (hunk (buffer-substring > + (point) (save-excursion (diff-end-of-hunk) (point)))) > (old (diff-hunk-text hunk reverse char-offset)) > (new (diff-hunk-text hunk (not reverse) char-offset)) > ;; Find the location specification. > @@ -1578,7 +1577,8 @@ > diff-context-mid-hunk-header-re nil t) > (error "Can't find the hunk separator")) > (match-string 1))))) > - (file (or (diff-find-file-name other) (error "Can't find the file"))) > + (file (or (diff-find-file-name other noprompt) > + (error "Can't find the file"))) > (buf (find-file-noselect file))) > ;; Update the user preference if he so wished. > (when (> (prefix-numeric-value other-file) 8) > @@ -1718,14 +1718,18 @@ > (when (looking-at diff-hunk-header-re) > (forward-line 1) > (re-search-forward "^[^ ]" nil t)) > - (destructuring-bind (buf line-offset pos src dst &optional switched) > - (diff-find-source-location) > + (destructuring-bind (&optional buf line-offset pos src dst switched) > + ;; Use `noprompt' since this is used in which-func-mode and such. > + (ignore-errors ;Signals errors in place of prompting. > + (diff-find-source-location nil nil 'noprompt)) > + (when buf > (beginning-of-line) > (or (when (memq (char-after) '(?< ?-)) > ;; Cursor is pointing at removed text. This could be a removed > ;; function, in which case, going to the source buffer will > ;; not help since the function is now removed. Instead, > - ;; try to figure out the function name just from the code-fragment. > + ;; try to figure out the function name just from the > + ;; code-fragment. > (let ((old (if switched dst src))) > (with-temp-buffer > (insert (car old)) > @@ -1734,7 +1738,7 @@ > (add-log-current-defun)))) > (with-current-buffer buf > (goto-char (+ (car pos) (cdr src))) > - (add-log-current-defun)))))) > + (add-log-current-defun))))))) > > (defun diff-ignore-whitespace-hunk () > "Re-diff the current hunk, ignoring whitespace differences." > -- Joakim Verona