diff options
author | Juri Linkov <juri@linkov.net> | 2018-12-19 00:55:15 +0200 |
---|---|---|
committer | Juri Linkov <juri@linkov.net> | 2018-12-19 00:55:15 +0200 |
commit | 8cbbf4ba25bef2c6c1b525aa380a1cd3f0b0d012 (patch) | |
tree | e08309ab9586f4798660b7e194a68966a63031b8 /lisp/vc/diff-mode.el | |
parent | cdaaaf2e1bd1f8ad2784ffc8265aa642da2d1190 (diff) | |
download | emacs-8cbbf4ba25bef2c6c1b525aa380a1cd3f0b0d012.tar.gz emacs-8cbbf4ba25bef2c6c1b525aa380a1cd3f0b0d012.tar.bz2 emacs-8cbbf4ba25bef2c6c1b525aa380a1cd3f0b0d012.zip |
Fontify one-line diffs without the final newline (bug#33567)
* lisp/vc/diff-mode.el (diff-hunk-text, diff-syntax-fontify-hunk):
Skip lines beginning with backslash like "\ No newline at end of file".
(diff-syntax-fontify-hunk): Use string-trim-right.
For one-line diffs use 1 explicitly in the list of line numbers.
Diffstat (limited to 'lisp/vc/diff-mode.el')
-rw-r--r-- | lisp/vc/diff-mode.el | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index ed953deb21a..549f49a8d13 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -1697,10 +1697,11 @@ char-offset in TEXT." (delete-region divider-pos (point-max))) (delete-region (point-min) keep)) ;; Remove line-prefix characters, and unneeded lines (unified diffs). - (let ((kill-char (if destp ?- ?+))) + ;; Also skip lines like "\ No newline at end of file" + (let ((kill-chars (list (if destp ?- ?+) ?\\))) (goto-char (point-min)) (while (not (eobp)) - (if (eq (char-after) kill-char) + (if (memq (char-after) kill-chars) (delete-region (point) (progn (forward-line 1) (point))) (delete-char num-pfx-chars) (forward-line 1))))) @@ -2394,19 +2395,23 @@ and the position in MAX." (defvar diff-syntax-fontify-revisions (make-hash-table :test 'equal)) +(eval-when-compile (require 'subr-x)) ; for string-trim-right + (defun diff-syntax-fontify-hunk (beg end old) "Highlight source language syntax in diff hunk between BEG and END. When OLD is non-nil, highlight the hunk from the old source." (remove-overlays beg end 'diff-mode 'syntax) (goto-char beg) (let* ((hunk (buffer-substring-no-properties beg end)) - (text (or (ignore-errors (diff-hunk-text hunk (not old) nil)) "")) + (text (string-trim-right (or (ignore-errors (diff-hunk-text hunk (not old) nil)) ""))) (line (if (looking-at "\\(?:\\*\\{15\\}.*\n\\)?[-@* ]*\\([0-9,]+\\)\\([ acd+]+\\([0-9,]+\\)\\)?") (if old (match-string 1) (if (match-end 3) (match-string 3) (match-string 1))))) - (line-nb (and line (string-match "\\([0-9]+\\),\\([0-9]+\\)" line) - (list (string-to-number (match-string 1 line)) - (string-to-number (match-string 2 line))))) + (line-nb (when line + (if (string-match "\\([0-9]+\\),\\([0-9]+\\)" line) + (list (string-to-number (match-string 1 line)) + (string-to-number (match-string 2 line))) + (list (string-to-number line) 1)))) ; One-line diffs props) (cond ((and diff-vc-backend (not (eq diff-font-lock-syntax 'hunk-only))) @@ -2470,18 +2475,19 @@ When OLD is non-nil, highlight the hunk from the old source." (while (< (progn (forward-line 1) (point)) end) (when (or (and (not old) (not (looking-at-p "[-<]"))) (and old (not (looking-at-p "[+>]")))) - (if (and old (not (looking-at-p "[-<]"))) - ;; Fontify context lines only from new source, - ;; don't refontify context lines from old source. - (pop props) - (let ((line-props (pop props)) - (bol (1+ (point)))) - (dolist (prop line-props) - (let ((ol (make-overlay (+ bol (nth 0 prop)) - (+ bol (nth 1 prop)) - nil 'front-advance nil))) - (overlay-put ol 'evaporate t) - (overlay-put ol 'face (nth 2 prop))))))))))) + (unless (looking-at-p "\\\\") ; skip "\ No newline at end of file" + (if (and old (not (looking-at-p "[-<]"))) + ;; Fontify context lines only from new source, + ;; don't refontify context lines from old source. + (pop props) + (let ((line-props (pop props)) + (bol (1+ (point)))) + (dolist (prop line-props) + (let ((ol (make-overlay (+ bol (nth 0 prop)) + (+ bol (nth 1 prop)) + nil 'front-advance nil))) + (overlay-put ol 'evaporate t) + (overlay-put ol 'face (nth 2 prop)))))))))))) (defun diff-syntax-fontify-props (file text line-nb &optional no-init hunk-only) "Get font-lock properties from the source code. |