summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2018-07-13 12:34:50 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2018-07-13 12:35:25 -0400
commit41f5de7c8ac3da19ccc8c96be52a6714a9b49a8f (patch)
tree25fe4bbaf3c6e893f6af60555bd72f4c3fbd20dd /lisp
parentcda7e1850f2f19a5025fd163ff2c6c6cba275acf (diff)
downloademacs-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.el35
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