branch: externals/agitate commit 93b2674f70820dc0b8d099cc06511bb9347b4bc5 Author: Protesilaos Stavrou <i...@protesilaos.com> Commit: Protesilaos Stavrou <i...@protesilaos.com>
Add agitate-diff-refine-cycle command --- agitate.el | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/agitate.el b/agitate.el index 7f36ab93c8..10c5f9148b 100644 --- a/agitate.el +++ b/agitate.el @@ -31,6 +31,7 @@ ;;; Code: +(require 'diff) (require 'log-edit) (require 'log-view) (require 'vc-git) @@ -39,6 +40,39 @@ "Work-in-progress." :group 'vc) +;;;; Commands for diffs + +(defvar-local agitate--refine-diff-state nil + "Current state of `agitate-diff-refine-cycle'.") + +;;;###autoload +(defun agitate-diff-refine-cycle () + "Cycle current, all, or no refined (word-wise) diff highlighting. + +Upon first invocation, refine the diff hunk at point or, when +none exists, the one closest to it. On second call, operate on +the entire buffer. And on the third time, remove all word-wise +fontification." + (interactive nil diff-mode) + (let ((point (point))) + (pcase agitate--refine-diff-state + ('current + (setq-local diff-refine 'font-lock) + (font-lock-flush) + (goto-char point) + (setq agitate--refine-diff-state 'all) + (message "Diff refine %s" (propertize "all" 'face 'success))) + ('all + (revert-buffer) + (goto-char point) + (recenter) + (setq agitate--refine-diff-state nil) + (message "Diff refine %s" (propertize "none" 'face 'success))) + (_ + (diff-refine-hunk) + (setq agitate--refine-diff-state 'current) + (message "Diff refine %s" (propertize "current" 'face 'success)))))) + ;;;; Commands for log-view (listings of commits) ;;;###autoload