mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 10:30:25 -08:00
* lisp/vc/diff-mode.el (diff--font-lock-prettify): Fix mishaps
This reverts the last change so it also applies to non-git diffs again. Instead, we're now more careful not to mis-recognize file headers as addition/removal lines. In addition to that, mark the file header such that it's re-font-locked all at once, and to still recognize it after `diff-reverse-direction`.
This commit is contained in:
parent
7e4ef09aa0
commit
910cdcf8c3
1 changed files with 26 additions and 23 deletions
|
|
@ -2599,22 +2599,23 @@ fixed, visit it in a buffer."
|
|||
nil nil 'center)
|
||||
|
||||
(defun diff--font-lock-prettify (limit)
|
||||
(when (and diff-font-lock-prettify
|
||||
(eq diff-buffer-type 'git))
|
||||
(when diff-font-lock-prettify
|
||||
(save-excursion
|
||||
;; FIXME: Include the first space for context-style hunks!
|
||||
(while (re-search-forward "^[-+! ]" limit t)
|
||||
(let ((spec (alist-get (char-before)
|
||||
'((?+ . (left-fringe diff-fringe-add diff-indicator-added))
|
||||
(?- . (left-fringe diff-fringe-del diff-indicator-removed))
|
||||
(?! . (left-fringe diff-fringe-rep diff-indicator-changed))
|
||||
(?\s . (left-fringe diff-fringe-nul fringe))))))
|
||||
(put-text-property (match-beginning 0) (match-end 0) 'display spec))))
|
||||
(unless (eq (get-text-property (match-beginning 0) 'face) 'diff-header)
|
||||
(let ((spec
|
||||
(alist-get
|
||||
(char-before)
|
||||
'((?+ . (left-fringe diff-fringe-add diff-indicator-added))
|
||||
(?- . (left-fringe diff-fringe-del diff-indicator-removed))
|
||||
(?! . (left-fringe diff-fringe-rep diff-indicator-changed))
|
||||
(?\s . (left-fringe diff-fringe-nul fringe))))))
|
||||
(put-text-property (match-beginning 0) (match-end 0)
|
||||
'display spec)))))
|
||||
;; Mimicks the output of Magit's diff.
|
||||
;; FIXME: This has only been tested with Git's diff output.
|
||||
(while (re-search-forward "^diff " limit t)
|
||||
;; FIXME: Switching between context<->unified leads to messed up
|
||||
;; file headers by cutting the `display' property in chunks!
|
||||
(when (save-excursion
|
||||
(forward-line 0)
|
||||
(looking-at
|
||||
|
|
@ -2622,19 +2623,21 @@ fixed, visit it in a buffer."
|
|||
(concat "diff.*\n"
|
||||
"\\(?:\\(?:new file\\|deleted\\).*\n\\)?"
|
||||
"\\(?:index.*\n\\)?"
|
||||
"--- \\(?:" null-device "\\|a/\\(.*\\)\\)\n"
|
||||
"\\+\\+\\+ \\(?:" null-device "\\|b/\\(.*\\)\\)\n"))))
|
||||
(put-text-property (match-beginning 0) (1- (match-end 0))
|
||||
'display
|
||||
(propertize
|
||||
(cond
|
||||
((null (match-string 1))
|
||||
(concat "new file " (match-string 2)))
|
||||
((null (match-string 2))
|
||||
(concat "deleted " (match-string 1)))
|
||||
(t
|
||||
(concat "modified " (match-string 1))))
|
||||
'face '(diff-file-header diff-header))))))
|
||||
"--- \\(?:" null-device "\\|[ab]/\\(.*\\)\\)\n"
|
||||
"\\+\\+\\+ \\(?:" null-device "\\|[ab]/\\(.*\\)\\)\n"))))
|
||||
(add-text-properties
|
||||
(match-beginning 0) (1- (match-end 0))
|
||||
(list 'display
|
||||
(propertize
|
||||
(cond
|
||||
((null (match-string 1))
|
||||
(concat "new file " (match-string 2)))
|
||||
((null (match-string 2))
|
||||
(concat "deleted " (match-string 1)))
|
||||
(t
|
||||
(concat "modified " (match-string 1))))
|
||||
'face '(diff-file-header diff-header))
|
||||
'font-lock-multiline t)))))
|
||||
nil)
|
||||
|
||||
;;; Syntax highlighting from font-lock
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue