diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2018-07-13 12:34:50 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2018-07-13 12:35:25 -0400 |
commit | 41f5de7c8ac3da19ccc8c96be52a6714a9b49a8f (patch) | |
tree | 25fe4bbaf3c6e893f6af60555bd72f4c3fbd20dd /lisp | |
parent | cda7e1850f2f19a5025fd163ff2c6c6cba275acf (diff) | |
download | emacs-41f5de7c8ac3da19ccc8c96be52a6714a9b49a8f.tar.gz emacs-41f5de7c8ac3da19ccc8c96be52a6714a9b49a8f.tar.bz2 emacs-41f5de7c8ac3da19ccc8c96be52a6714a9b49a8f.zip |
* lisp/vc/diff-mode.el (diff-font-lock-prettify): New var
(diff--font-lock-prettify): New function.
(diff-font-lock-keywords): Use it.
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/vc/diff-mode.el | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index ffbd9e5479a..b91a2ba45a4 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -96,6 +96,11 @@ when editing big diffs)." :version "27.1" :type 'boolean) +(defcustom diff-font-lock-prettify nil + "If non-nil, font-lock will try and make the format prettier." + :version "27.1" + :type 'boolean) + (defvar diff-vc-backend nil "The VC backend that created the current Diff buffer, if any.") @@ -396,6 +401,7 @@ and the face `diff-added' for added lines.") (1 font-lock-comment-delimiter-face) (2 font-lock-comment-face)) ("^[^-=+*!<>#].*\n" (0 'diff-context)) + (,#'diff--font-lock-prettify) (,#'diff--font-lock-refined))) (defconst diff-font-lock-defaults @@ -2195,6 +2201,35 @@ fixed, visit it in a buffer." modified-buffers ", ")) (message "No trailing whitespace to delete."))))) + +;;; Prettifying from font-lock + +(defun diff--font-lock-prettify (limit) + ;; Mimicks the output of Magit's diff. + ;; FIXME: This has only been tested with Git's diff output. + (when diff-font-lock-prettify + (while (re-search-forward "^diff " limit t) + (when (save-excursion + (forward-line 0) + (looking-at (eval-when-compile + (concat "diff.*\n" + "\\(?:\\(?:new file\\|deleted\\).*\n\\)?" + "\\(?:index.*\n\\)?" + "--- \\(?:/dev/null\\|a/\\(.*\\)\\)\n" + "\\+\\+\\+ \\(?:/dev/null\\|b/\\(.*\\)\\)\n")))) + (put-text-property (match-beginning 0) + (or (match-beginning 2) (match-beginning 1)) + 'display (propertize + (cond + ((null (match-beginning 1)) "new file ") + ((null (match-beginning 2)) "deleted ") + (t "modified ")) + 'face '(diff-file-header diff-header))) + (unless (match-beginning 2) + (put-text-property (match-end 1) (1- (match-end 0)) + 'display ""))))) + nil) + ;;; Support for converting a diff to diff3 markers via `wiggle'. ;; Wiggle can be found at http://neil.brown.name/wiggle/ or in your nearest |