* diff mode weirdness @ 2008-09-12 7:47 joakim 2008-09-12 14:37 ` Stefan Monnier ` (2 more replies) 0 siblings, 3 replies; 12+ messages in thread From: joakim @ 2008-09-12 7:47 UTC (permalink / raw) To: Emacs Development I wanted to look at a diff file, and it opened nicely in diff mode, with font-lock etc. Then I had some issues: - diff mode repeatedly asks me where the diff source is. In this case I only had the diff, not the source. This was very annoying. - after a while the diff buffer was automatically killed, to my surprise. Do others experience the same problems? If so I can find out more information. -- Joakim Verona ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: diff mode weirdness 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 20:15 ` Peter Lee 2008-09-13 3:11 ` Tetsurou Okazaki 2 siblings, 1 reply; 12+ messages in thread From: Stefan Monnier @ 2008-09-12 14:37 UTC (permalink / raw) To: joakim; +Cc: Emacs Development > I wanted to look at a diff file, and it opened nicely in diff mode, with > font-lock etc. Then I had some issues: > - diff mode repeatedly asks me where the diff source is. In this case I > only had the diff, not the source. This was very annoying. When does it do that? Normally, it only does that if you request an operation like "apply" or "jump to source". > - after a while the diff buffer was automatically killed, to my > surprise. > Do others experience the same problems? If so I can find out more > information. Never heard of this, no. Stefan ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: diff mode weirdness 2008-09-12 14:37 ` Stefan Monnier @ 2008-09-12 15:46 ` joakim 2008-09-12 17:11 ` Stefan Monnier 0 siblings, 1 reply; 12+ messages in thread From: joakim @ 2008-09-12 15:46 UTC (permalink / raw) To: Stefan Monnier; +Cc: Emacs Development Stefan Monnier <monnier@iro.umontreal.ca> writes: >> I wanted to look at a diff file, and it opened nicely in diff mode, with >> font-lock etc. Then I had some issues: > >> - diff mode repeatedly asks me where the diff source is. In this case I >> only had the diff, not the source. This was very annoying. > > When does it do that? Normally, it only does that if you request an > operation like "apply" or "jump to source". It happens for me whenever the cursor is on a "diff" line, the first line of a unified diff file for instance. >> - after a while the diff buffer was automatically killed, to my >> surprise. > >> Do others experience the same problems? If so I can find out more >> information. > > Never heard of this, no. Ok, I'll see if I can reproduce it with emacs -q then. > > Stefan -- Joakim Verona ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: diff mode weirdness 2008-09-12 15:46 ` joakim @ 2008-09-12 17:11 ` Stefan Monnier 0 siblings, 0 replies; 12+ messages in thread From: Stefan Monnier @ 2008-09-12 17:11 UTC (permalink / raw) To: joakim; +Cc: Emacs Development >>> I wanted to look at a diff file, and it opened nicely in diff mode, with >>> font-lock etc. Then I had some issues: >> >>> - diff mode repeatedly asks me where the diff source is. In this case I >>> only had the diff, not the source. This was very annoying. >> >> When does it do that? Normally, it only does that if you request an >> operation like "apply" or "jump to source". > It happens for me whenever the cursor is on a "diff" line, the first > line of a unified diff file for instance. Can you provide a recipe starting from "emacs -Q". It really sounds odd. Stefan ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: diff mode weirdness 2008-09-12 7:47 diff mode weirdness joakim 2008-09-12 14:37 ` Stefan Monnier @ 2008-09-12 20:15 ` Peter Lee 2008-09-12 20:50 ` joakim 2008-09-13 1:53 ` Stefan Monnier 2008-09-13 3:11 ` Tetsurou Okazaki 2 siblings, 2 replies; 12+ messages in thread From: Peter Lee @ 2008-09-12 20:15 UTC (permalink / raw) To: emacs-devel >>>> joakim writes: joakim> I wanted to look at a diff file, and it opened nicely in diff mode, with joakim> font-lock etc. Then I had some issues: joakim> - diff mode repeatedly asks me where the diff source is. In this case I joakim> only had the diff, not the source. This was very annoying. joakim> - after a while the diff buffer was automatically killed, to my joakim> surprise. joakim> Do others experience the same problems? If so I can find out more joakim> information. I've seen this as well... I have to C-g several times and quickly "move off" the header line. It doesn't happen when I use diff for code under cvs. However, a standalone .diff file in a directory where the file "test" doesn't exist will happen everytime. >>> snip Index: test =================================================================== RCS file: /home/cvsroot.2/testmod/test,v retrieving revision 1.1956.2.122.4.437.4.228 retrieving revision 1.1956.2.122.4.437.4.229 diff -u -r1.1956.2.122.4.437.4.228 -r1.1956.2.122.4.437.4.229 --- Version 12 Sep 2008 00:59:19 -0000 1.1956.2.122.4.437.4.228 +++ Version 12 Sep 2008 14:59:22 -0000 1.1956.2.122.4.437.4.229 @@ -1,4 +1,4 @@ -xx_build="206" +xx_build="207" xx_version="1.1.1" xx_branch="" # zzzz <<< snip 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 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: diff mode weirdness 2008-09-12 20:15 ` Peter Lee @ 2008-09-12 20:50 ` joakim 2008-09-12 21:02 ` Glenn Morris 2008-09-13 1:53 ` Stefan Monnier 1 sibling, 1 reply; 12+ messages in thread From: joakim @ 2008-09-12 20:50 UTC (permalink / raw) To: Peter Lee; +Cc: emacs-devel Peter Lee <pete.a.lee@gmail.com> writes: >>>>> joakim writes: > > joakim> I wanted to look at a diff file, and it opened nicely in diff mode, with > joakim> font-lock etc. Then I had some issues: > > joakim> - diff mode repeatedly asks me where the diff source is. In this case I > joakim> only had the diff, not the source. This was very annoying. > joakim> - after a while the diff buffer was automatically killed, to my > joakim> surprise. > > joakim> Do others experience the same problems? If so I can find out more > joakim> information. > > I've seen this as well... I have to C-g several times and quickly "move > off" the header line. > > It doesn't happen when I use diff for code under cvs. However, a > standalone .diff file in a directory where the file "test" doesn't exist > will happen everytime. Yes this is exactly what I am seeing as well. However, I dont get this behaviour with emacs -Q. I havent managed to diagnose it further. > >>>> snip > Index: test > =================================================================== > RCS file: /home/cvsroot.2/testmod/test,v > retrieving revision 1.1956.2.122.4.437.4.228 > retrieving revision 1.1956.2.122.4.437.4.229 > diff -u -r1.1956.2.122.4.437.4.228 -r1.1956.2.122.4.437.4.229 > --- Version 12 Sep 2008 00:59:19 -0000 1.1956.2.122.4.437.4.228 > +++ Version 12 Sep 2008 14:59:22 -0000 1.1956.2.122.4.437.4.229 > @@ -1,4 +1,4 @@ > -xx_build="206" > +xx_build="207" > xx_version="1.1.1" > xx_branch="" > # zzzz > <<< snip > > 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 > > > -- Joakim Verona ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: diff mode weirdness 2008-09-12 20:50 ` joakim @ 2008-09-12 21:02 ` Glenn Morris 2008-09-12 21:24 ` joakim 0 siblings, 1 reply; 12+ messages in thread From: Glenn Morris @ 2008-09-12 21:02 UTC (permalink / raw) To: joakim; +Cc: Peter Lee, emacs-devel joakim@verona.se wrote: > Yes this is exactly what I am seeing as well. However, I dont get this > behaviour with emacs -Q. I havent managed to diagnose it further. which-func-mode? ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: diff mode weirdness 2008-09-12 21:02 ` Glenn Morris @ 2008-09-12 21:24 ` joakim 0 siblings, 0 replies; 12+ messages in thread From: joakim @ 2008-09-12 21:24 UTC (permalink / raw) To: Glenn Morris; +Cc: Peter Lee, emacs-devel Glenn Morris <rgm@gnu.org> writes: > joakim@verona.se wrote: > >> Yes this is exactly what I am seeing as well. However, I dont get this >> behaviour with emacs -Q. I havent managed to diagnose it further. > > which-func-mode? Yes, if I dissable which-func-mode in my normal emacs, the problem goes away! -- Joakim Verona ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: diff mode weirdness 2008-09-12 20:15 ` Peter Lee 2008-09-12 20:50 ` joakim @ 2008-09-13 1:53 ` Stefan Monnier 2008-09-14 21:01 ` joakim 1 sibling, 1 reply; 12+ messages in thread From: Stefan Monnier @ 2008-09-13 1:53 UTC (permalink / raw) To: Peter Lee; +Cc: emacs-devel > 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? 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." ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: diff mode weirdness 2008-09-13 1:53 ` Stefan Monnier @ 2008-09-14 21:01 ` joakim 2008-09-14 21:13 ` Pete Lee 0 siblings, 1 reply; 12+ messages in thread From: joakim @ 2008-09-14 21:01 UTC (permalink / raw) To: Stefan Monnier; +Cc: Peter Lee, emacs-devel 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 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: diff mode weirdness 2008-09-14 21:01 ` joakim @ 2008-09-14 21:13 ` Pete Lee 0 siblings, 0 replies; 12+ messages in thread From: Pete Lee @ 2008-09-14 21:13 UTC (permalink / raw) To: joakim; +Cc: Stefan Monnier, emacs-devel [-- Attachment #1: Type: text/plain, Size: 7099 bytes --] Worked for me as well... Thanks. On Sun, Sep 14, 2008 at 4:01 PM, <joakim@verona.se> wrote: > 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 > [-- Attachment #2: Type: text/html, Size: 10926 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: diff mode weirdness 2008-09-12 7:47 diff mode weirdness joakim 2008-09-12 14:37 ` Stefan Monnier 2008-09-12 20:15 ` Peter Lee @ 2008-09-13 3:11 ` Tetsurou Okazaki 2 siblings, 0 replies; 12+ messages in thread From: Tetsurou Okazaki @ 2008-09-13 3:11 UTC (permalink / raw) To: joakim; +Cc: Emacs Development At Fri, 12 Sep 2008 09:47:25 +0200, joakim@verona.se wrote: > > I wanted to look at a diff file, and it opened nicely in diff mode, with > font-lock etc. Then I had some issues: > > - diff mode repeatedly asks me where the diff source is. In this case I > only had the diff, not the source. This was very annoying. > > - after a while the diff buffer was automatically killed, to my > surprise. Do you use CEDET? Developement versions of CEDET around June or July had such a bug. http://sourceforge.net/mailarchive/forum.php?thread_name=g4kc76%2425t%241%40ger.gmane.org&forum_name=cedet-devel -- Tetsurou Okazaki ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2008-09-14 21:13 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 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 2008-09-14 21:13 ` Pete Lee 2008-09-13 3:11 ` Tetsurou Okazaki
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).