diff options
| author | Jonas Bernoulli <jonas@bernoul.li> | 2015-07-10 09:37:42 +0200 |
|---|---|---|
| committer | Jonas Bernoulli <jonas@bernoul.li> | 2015-07-10 09:37:42 +0200 |
| commit | 4b7d2ad90cdd54cb46d36ec4ecd8690fff01712a (patch) | |
| tree | 183dfdeed79ad180c24aaded47769dcbc3e37bdb | |
| parent | 4da008cb9e1e06f1524052a76b4bff36d9b4dace (diff) | |
| parent | a8e2edcea0dbd9abef903283c51b65e0192ed345 (diff) | |
Merge branch 'diff-commands'
| -rw-r--r-- | lisp/magit-diff.el | 49 |
1 files changed, 45 insertions, 4 deletions
diff --git a/lisp/magit-diff.el b/lisp/magit-diff.el index 444b6bc..856d91b 100644 --- a/lisp/magit-diff.el +++ b/lisp/magit-diff.el @@ -505,10 +505,13 @@ The following `format'-like specs are supported: (?c "Detect copies" "-C" read-from-minibuffer) (?a "Diff algorithm" "--diff-algorithm=" magit-diff-select-algorithm)) - :actions '((?g "Refresh" magit-diff-refresh) - (?s "Set defaults" magit-diff-set-default-arguments) - (?w "Save defaults" magit-diff-save-default-arguments) - (?t "Toggle hunk refinement" magit-diff-toggle-refine-hunk)))) + :actions '((?g "Refresh" magit-diff-refresh) + (?t "Toggle hunk refinement" magit-diff-toggle-refine-hunk) + (?s "Set defaults" magit-diff-set-default-arguments) + (?r "Switch range type" magit-diff-switch-range-type) + (?w "Save defaults" magit-diff-save-default-arguments) + (?f "Flip revisions" magit-diff-flip-revs)) + :max-action-columns 2)) (defadvice magit-diff-refresh-popup (around get-current-arguments activate) (if (derived-mode-p 'magit-diff-mode) @@ -727,6 +730,44 @@ for a commit." (kill-local-variable 'magit-diff-section-arguments))) (magit-refresh)) +(defconst magit-diff-range-re + (concat "\\`\\([^ \t]*[^.]\\)?" ; revA + "\\(\\.\\.\\.?\\)" ; range marker + "\\([^.][^ \t]*\\)?\\'")) ; revB + +(defun magit-diff-switch-range-type (args) + "Convert diff range type. +Change \"revA..revB\" to \"revB...revA\", or vice versa." + (interactive (list (magit-diff-refresh-arguments))) + (let ((range (car magit-refresh-args))) + (if (and (derived-mode-p 'magit-diff-mode) + (string-match magit-diff-range-re range)) + (progn + (setcar magit-refresh-args + (concat (match-string 1 range) + (if (string= (match-string 2 range) "..") + "..." + "..") + (match-string 3 range))) + (magit-refresh)) + (user-error "No range to change")))) + +(defun magit-diff-flip-revs (args) + "Swap revisions in diff range. +Change \"revA..revB\" to \"revB..revA\"." + (interactive (list (magit-diff-refresh-arguments))) + (let ((range (car magit-refresh-args))) + (if (and range + (derived-mode-p 'magit-diff-mode) + (string-match magit-diff-range-re range)) + (progn + (setcar magit-refresh-args + (concat (match-string 3 range) + (match-string 2 range) + (match-string 1 range))) + (magit-refresh)) + (user-error "No range to swap")))) + (defun magit-diff-less-context (&optional count) "Decrease the context for diff hunks by COUNT lines." (interactive "p") |
