emacs-diffs
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]