mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-02 11:21:42 +00:00
* lisp/vc/diff-mode.el (diff-font-lock-prettify): New var
(diff--font-lock-prettify): New function. (diff-font-lock-keywords): Use it.
This commit is contained in:
parent
cda7e1850f
commit
41f5de7c8a
7
etc/NEWS
7
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.
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user