# HG changeset patch # User Stefan Monnier # Date 1185141769 0 # Node ID 1d7514cb50ef81930ae8df491e9cc78a8141152c # Parent 93dd0897a3986dd41cfd7394dafdf65f2dc06ac5 (diff-refine-ignore-spaces-hunk): Rename from diff-refine-hunk. Adjust users. (diff-unified-hunk-p, diff-splittable-p): New functions. (diff-mode-menu): Use it to disable Split when it doesn't work. diff -r 93dd0897a398 -r 1d7514cb50ef lisp/ChangeLog --- a/lisp/ChangeLog Sun Jul 22 21:59:55 2007 +0000 +++ b/lisp/ChangeLog Sun Jul 22 22:02:49 2007 +0000 @@ -1,3 +1,10 @@ +2007-07-22 Stefan Monnier + + * diff-mode.el (diff-refine-ignore-spaces-hunk): Rename from + diff-refine-hunk. Adjust users. + (diff-unified-hunk-p, diff-splittable-p): New functions. + (diff-mode-menu): Use it to disable Split when it doesn't work. + 2007-07-22 Dan Nicolaescu * diff-mode.el (diff-mode-menu): New entries. diff -r 93dd0897a398 -r 1d7514cb50ef lisp/diff-mode.el --- a/lisp/diff-mode.el Sun Jul 22 21:59:55 2007 +0000 +++ b/lisp/diff-mode.el Sun Jul 22 22:02:49 2007 +0000 @@ -155,7 +155,7 @@ ("\C-c\C-u" . diff-context->unified) ;; `d' because it duplicates the context :-( --Stef ("\C-c\C-d" . diff-unified->context) - ("\C-c\C-w" . diff-refine-hunk) + ("\C-c\C-w" . diff-refine-ignore-spaces-hunk) ("\C-c\C-f" . next-error-follow-minor-mode)) "Keymap for `diff-mode'. See also `diff-mode-shared-map'.") @@ -172,8 +172,8 @@ ["Unified -> Context" diff-unified->context t] ;;["Fixup Headers" diff-fixup-modifs (not buffer-read-only)] "-----" - ["Split hunk" diff-split-hunk t] - ["Refine hunk" diff-refine-hunk t] + ["Split hunk" diff-split-hunk (diff-splittable-p)] + ["Refine hunk" diff-refine-ignore-spaces-hunk t] ["Kill current hunk" diff-hunk-kill t] ["Kill current file's hunks" diff-file-kill t] "-----" @@ -416,6 +416,12 @@ (diff-beginning-of-file-and-junk) (diff-hunk-next)))))) +(defun diff-unified-hunk-p () + (save-excursion + (ignore-errors + (diff-beginning-of-hunk) + (looking-at "^@@")))) + (defun diff-beginning-of-file () (beginning-of-line) (unless (looking-at diff-file-header-re) @@ -528,6 +534,13 @@ (while (re-search-forward re end t) (incf n)) n))) +(defun diff-splittable-p () + (save-excursion + (beginning-of-line) + (and (looking-at "^[-+ ]") + (progn (forward-line -1) (looking-at "^[-+ ]")) + (diff-unified-hunk-p)))) + (defun diff-split-hunk () "Split the current (unified diff) hunk at point into two hunks." (interactive) @@ -1525,7 +1538,7 @@ (goto-char (+ (car pos) (cdr src))) (add-log-current-defun)))))) -(defun diff-refine-hunk () +(defun diff-refine-ignore-spaces-hunk () "Refine the current hunk by ignoring space differences." (interactive) (let* ((char-offset (- (point) (progn (diff-beginning-of-hunk 'try-harder)