* bug#25105: [Emacs-diffs] master 2c8a7e5: Improve diff-mode navigation/manipulation [not found] ` <878trtoluv.fsf@udel.edu> @ 2016-12-07 7:29 ` Dima Kogan [not found] ` <874m2gfb9b.fsf@secretsauce.net> 1 sibling, 0 replies; 2+ messages in thread From: Dima Kogan @ 2016-12-07 7:29 UTC (permalink / raw) To: Mark Oteiza; +Cc: 25105, Tino Calancha, emacs-devel [-- Attachment #1: Type: text/plain, Size: 1722 bytes --] Mark Oteiza <mvoteiza@udel.edu> writes: > Fixing C-c C-a to DTRT is great, thanks, but I don't think the > off-by-one navigation changes to "n" and "p" (diff-hunk-next, > diff-hunk-prev) make sense. While it may have made fixing the issues > mentioned in the commit message easier, the changes to what "n" and "p" > do at the beginning and end of a diff are not documented, and I didn't > see any discussion of it in the associated bug. > > I contend that the new behavior is inconsistent with the behavior of > other outline/thing-with-headers type things in Emacs. outline-mode, > org-mode, and rst-mode are the first ones that come to mind. Can you give a specific example of interaction in any of these modes that is analogous to the off-by-one behavior you're referring to? The fundamental question is what hunk diff-mode should think the point is looking at, when it is in some non-diff message above the first hunk. The answer I chose for the new navigation logic is "first hunk". You could also choose "invalid hunk, not a hunk at all", which would imply that C-c C-a and M-ret and such shouldn't work there. Better suggestions welcome. > It's also not clear how the introduced oddity with auto-refine is going > to be resolved, unless a way is found to autorefine the first hunk > without there being any user interaction. Then opening a diff has > inconsistent auto-refining from the start. I don't use auto-refinement, so didn't notice the breakage. Will look at it in a bit. In the meantime, I'm attaching a patch to address the 2nd point in the bug report (25105). This serves to treat the junk before the first hunk (i.e. commit message from 'git format-patch') as a file header. Looks reasonable? [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: diff-mode-handle-initial-junk.patch --] [-- Type: text/x-diff, Size: 544 bytes --] diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index 5b48c8d..41476bd 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -768,7 +768,7 @@ diff-beginning-of-file-and-junk (setq prevfile nextfile)) (if (and previndex (numberp prevfile) (< previndex prevfile)) (setq prevfile previndex)) - (if (and (numberp prevfile) (<= prevfile start)) + (if (numberp prevfile) (progn (goto-char prevfile) ;; Now skip backward over the leading junk we may have before the ^ permalink raw reply related [flat|nested] 2+ messages in thread
[parent not found: <874m2gfb9b.fsf@secretsauce.net>]
* bug#25105: [Emacs-diffs] master 2c8a7e5: Improve diff-mode navigation/manipulation [not found] ` <874m2gfb9b.fsf@secretsauce.net> @ 2017-01-06 2:58 ` Mark Oteiza 0 siblings, 0 replies; 2+ messages in thread From: Mark Oteiza @ 2017-01-06 2:58 UTC (permalink / raw) To: Dima Kogan; +Cc: 25105, Tino Calancha, emacs-devel On 06/12/16 at 11:29pm, Dima Kogan wrote: > Mark Oteiza <mvoteiza@udel.edu> writes: > > > Fixing C-c C-a to DTRT is great, thanks, but I don't think the > > off-by-one navigation changes to "n" and "p" (diff-hunk-next, > > diff-hunk-prev) make sense. While it may have made fixing the issues > > mentioned in the commit message easier, the changes to what "n" and "p" > > do at the beginning and end of a diff are not documented, and I didn't > > see any discussion of it in the associated bug. > > > > I contend that the new behavior is inconsistent with the behavior of > > other outline/thing-with-headers type things in Emacs. outline-mode, > > org-mode, and rst-mode are the first ones that come to mind. > > Can you give a specific example of interaction in any of these modes > that is analogous to the off-by-one behavior you're referring to? I wrote about how your changes are make diff-mode _not_ analogous. > The > fundamental question is what hunk diff-mode should think the point is > looking at, when it is in some non-diff message above the first hunk. > The answer I chose for the new navigation logic is "first hunk". You > could also choose "invalid hunk, not a hunk at all", which would imply > that C-c C-a and M-ret and such shouldn't work there. Better suggestions > welcome. One might argue that C-c C-a and friends in a file header should apply all hunks in a file, or perhaps that there should actually be diff-apply-file commands, etc. The way n and p worked was not a bug, yet you gratuitously changed them, and broke auto-refinement. Why do I have to now hit two keys to refine the first hunk, and one key to refine the second? > > It's also not clear how the introduced oddity with auto-refine is going > > to be resolved, unless a way is found to autorefine the first hunk > > without there being any user interaction. Then opening a diff has > > inconsistent auto-refining from the start. > > I don't use auto-refinement, so didn't notice the breakage. Will look at > it in a bit. It's on by default, so this statement perplexes me. ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-01-06 2:58 UTC | newest] Thread overview: 2+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <874m2q1oca.fsf@gmail.com> [not found] ` <878trtoluv.fsf@udel.edu> 2016-12-07 7:29 ` bug#25105: [Emacs-diffs] master 2c8a7e5: Improve diff-mode navigation/manipulation Dima Kogan [not found] ` <874m2gfb9b.fsf@secretsauce.net> 2017-01-06 2:58 ` Mark Oteiza
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).