changeset 82037:1d7514cb50ef

(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.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Sun, 22 Jul 2007 22:02:49 +0000
parents 93dd0897a398
children 7ee8cfeeb2b8
files lisp/ChangeLog lisp/diff-mode.el
diffstat 2 files changed, 24 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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  <monnier@iro.umontreal.ca>
+
+	* 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  <dann@ics.uci.edu>
 
 	* diff-mode.el (diff-mode-menu): New entries.
--- 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)