unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: joakim@verona.se
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: Peter Lee <pete.a.lee@gmail.com>, emacs-devel@gnu.org
Subject: Re: diff mode weirdness
Date: Sun, 14 Sep 2008 23:01:34 +0200	[thread overview]
Message-ID: <m3myiabfwx.fsf@verona.se> (raw)
In-Reply-To: <jwv7i9gq0ah.fsf-monnier+emacs@gnu.org> (Stefan Monnier's message of "Fri, 12 Sep 2008 21:53:59 -0400")

Stefan Monnier <monnier@iro.umontreal.ca> 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




  reply	other threads:[~2008-09-14 21:01 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-12  7:47 diff mode weirdness joakim
2008-09-12 14:37 ` Stefan Monnier
2008-09-12 15:46   ` joakim
2008-09-12 17:11     ` Stefan Monnier
2008-09-12 20:15 ` Peter Lee
2008-09-12 20:50   ` joakim
2008-09-12 21:02     ` Glenn Morris
2008-09-12 21:24       ` joakim
2008-09-13  1:53   ` Stefan Monnier
2008-09-14 21:01     ` joakim [this message]
2008-09-14 21:13       ` Pete Lee
2008-09-13  3:11 ` Tetsurou Okazaki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m3myiabfwx.fsf@verona.se \
    --to=joakim@verona.se \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    --cc=pete.a.lee@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).