(setq len 1)\r
(cl-incf line))\r
(forward-line (- line current-line))\r
- (setq current-line line)\r
(let ((hunk-beg (point)))\r
- (while (cl-plusp len)\r
- (let ((o (make-overlay (point) (line-end-position))))\r
- (overlay-put o 'diff-hl t)\r
- (overlay-put o 'before-string\r
- (diff-hl-fringe-spec\r
- type\r
- (cond\r
- ((not diff-hl-draw-borders) 'empty)\r
- ((and (= len 1) (= line current-line)) 'single)\r
- ((= len 1) 'bottom)\r
- ((= line current-line) 'top)\r
- (t 'middle)))))\r
- (forward-line 1)\r
- (cl-incf current-line)\r
- (cl-decf len))\r
- (let ((h (make-overlay hunk-beg (point)))\r
+ (forward-line len)\r
+ (setq current-line (+ line len))\r
+ (let ((h (make-overlay hunk-beg (1- (point))))\r
(hook '(diff-hl-overlay-modified)))\r
(overlay-put h 'diff-hl t)\r
- (overlay-put h 'diff-hl-hunk t)\r
+ (if (= len 1)\r
+ (overlay-put h 'before-string (diff-hl-fringe-spec type 'single))\r
+ (overlay-put h 'before-string (diff-hl-fringe-spec type 'top))\r
+ (overlay-put h 'line-prefix (diff-hl-fringe-spec type 'middle))\r
+ (overlay-put h 'after-string (diff-hl-fringe-spec type 'bottom)))\r
(overlay-put h 'modification-hooks hook)\r
- (overlay-put h 'insert-in-front-hooks hook))))))))\r
+ (overlay-put h 'insert-in-front-hooks hook)\r
+ (overlay-put h 'insert-behind-hooks hook))))))))\r
\r
(defun diff-hl-remove-overlays ()\r
(dolist (o (overlays-in (point-min) (point-max)))\r
(when (overlay-get o 'diff-hl) (delete-overlay o))))\r
\r
(defun diff-hl-overlay-modified (ov after-p _beg _end &optional _length)\r
- "Delete the overlay and all our overlays inside it."\r
+ "Delete the overlay."\r
(unless after-p\r
(when (overlay-buffer ov)\r
- (save-restriction\r
- (narrow-to-region (overlay-start ov) (overlay-end ov))\r
- (diff-hl-remove-overlays))\r
(delete-overlay ov))))\r
\r
(defvar diff-hl-timer nil)\r
\r
(defun diff-hl-hunk-overlay-at (pos)\r
(cl-loop for o in (overlays-at pos)\r
- when (overlay-get o 'diff-hl-hunk)\r
+ when (overlay-get o 'diff-hl)\r
return o))\r
\r
(defun diff-hl-next-hunk (&optional backward)\r