[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 41f5de7: * lisp/vc/diff-mode.el (diff-font-lock-pre
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] master 41f5de7: * lisp/vc/diff-mode.el (diff-font-lock-prettify): New var |
Date: |
Fri, 13 Jul 2018 12:35:30 -0400 (EDT) |
branch: master
commit 41f5de7c8ac3da19ccc8c96be52a6714a9b49a8f
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>
* lisp/vc/diff-mode.el (diff-font-lock-prettify): New var
(diff--font-lock-prettify): New function.
(diff-font-lock-keywords): Use it.
---
etc/NEWS | 7 +++++++
lisp/vc/diff-mode.el | 35 +++++++++++++++++++++++++++++++++++
2 files changed, 42 insertions(+)
diff --git a/etc/NEWS b/etc/NEWS
index 1a1e0d8..c69bbe9 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -212,6 +212,13 @@ navigation and editing of large files.
* Changes in Specialized Modes and Packages in Emacs 27.1
+** diff-mode
+*** Hunks are now automatically refined by default
+To disable it, set the new defcustom 'diff-font-lock-refine' to nil.
+
+*** File headers can be shortened, mimicking Magit's diff format
+To enable it, set the new defcustom 'diff-font-lock-prettify to t.
+
** Browse-url
*** The function 'browse-url-emacs' can now visit a URL in selected window.
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index ffbd9e5..b91a2ba 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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 41f5de7: * lisp/vc/diff-mode.el (diff-font-lock-prettify): New var,
Stefan Monnier <=