branch: elpa/magit
commit 415bd700992a70e50fd6fdf8e37519bf22fa2aa7
Author: Jonas Bernoulli <jo...@bernoul.li>
Commit: Jonas Bernoulli <jo...@bernoul.li>

    magit-make-margin-overlay: At bol set margin of previous line
    
    That is actually what all but one caller need.
    
    For `magit-log-wash-rev', which unlike the other callers does not
    insert texts but instead moves other existing lines, it does not
    matter.  Here we can just move the call to `magit-make-margin-overlay'
    from before the call to `forward-line' to after that.
    
    Do not just unconditionally default to set the margin of the previous
    line, in case that doesn't work for third-party callers.  Only do so
    if point is at the beginning of a line.  Also for compatibility, keep
    the optional PREVIOUS-LINE argument, but ignore it if not provided.
    I.e., unspecified means "dwim", not "nil, therefore for current line".
    
    Suggested-by: Martin Joerg <martin.jo...@gmail.com>
---
 lisp/magit-log.el    | 19 +++++++------------
 lisp/magit-margin.el | 19 ++++++++++---------
 lisp/magit-refs.el   | 18 ++++++++----------
 lisp/magit-stash.el  |  8 ++------
 4 files changed, 27 insertions(+), 37 deletions(-)

diff --git a/lisp/magit-log.el b/lisp/magit-log.el
index c623d347bf..5166617bf9 100644
--- a/lisp/magit-log.el
+++ b/lisp/magit-log.el
@@ -1448,15 +1448,11 @@ Do not add this to a hook variable."
             (setq date (+ (string-to-number (match-string 1 date))
                           (* (string-to-number (match-string 2 date)) 60 60)
                           (* (string-to-number (match-string 3 date)) 60))))
-          (save-excursion
-            (backward-char)
-            (magit-log-format-margin hash author date)))
+          (magit-log-format-margin hash author date))
         (when (and (eq style 'cherry)
                    (magit-buffer-margin-p))
-          (save-excursion
-            (backward-char)
-            (apply #'magit-log-format-margin hash
-                   (split-string (magit-rev-format "%aN%x00%ct" hash) "\0"))))
+          (apply #'magit-log-format-margin hash
+                 (split-string (magit-rev-format "%aN%x00%ct" hash) "\0")))
         (when (and graph
                    (not (eobp))
                    (not (looking-at non-graph-re)))
@@ -1487,8 +1483,8 @@ Do not add this to a hook variable."
               (while (and (not (eobp)) (not (looking-at non-graph-re)))
                 (when align
                   (save-excursion (insert align)))
-                (magit-make-margin-overlay)
-                (forward-line))
+                (forward-line)
+                (magit-make-margin-overlay))
               ;; When `--format' is used and its value isn't one of the
               ;; predefined formats, then `git-log' does not insert a
               ;; separator line.
@@ -1616,7 +1612,7 @@ The shortstat style is experimental and rather slow."
         (magit-log-format-shortstat-margin rev)
       (magit-log-format-author-margin author date))))
 
-(defun magit-log-format-author-margin (author date &optional previous-line)
+(defun magit-log-format-author-margin (author date)
   (pcase-let ((`(,_ ,style ,width ,details ,details-width)
                (or magit-buffer-margin
                    (symbol-value (magit-margin-option))
@@ -1641,8 +1637,7 @@ The shortstat style is experimental and rather slow."
                   (format (format (if abbr "%%2d%%-%dc" "%%2d %%-%ds")
                                   (- width (if details (1+ details-width) 0)))
                           cnt unit)))
-              'magit-log-date))
-     previous-line)))
+              'magit-log-date)))))
 
 (defun magit-log-format-shortstat-margin (rev)
   (magit-make-margin-overlay
diff --git a/lisp/magit-margin.el b/lisp/magit-margin.el
index 064f8c72a6..b710fbddd3 100644
--- a/lisp/magit-margin.el
+++ b/lisp/magit-margin.el
@@ -159,15 +159,16 @@ does not carry to other options."
        (and (magit-buffer-margin-p)
             (nth 2 magit-buffer-margin))))))
 
-(defun magit-make-margin-overlay (&optional string previous-line)
-  (if previous-line
-      (save-excursion
-        (forward-line -1)
-        (magit-make-margin-overlay string))
+(cl-defun magit-make-margin-overlay (&optional string (previous-line nil 
sline))
+  "Display STRING in the margin of the previous (or current) line.
+If point is at the beginning of a line, set the margin string for
+the previous line, otherwise for the current line.  Semi-obsolete
+optional PREVIOUS-LINE can be used to explicitly specify which
+line is affected."
+  (save-excursion
+    (forward-line (if (if sline previous-line (bolp)) -1 0))
     ;; Don't put the overlay on the complete line to work around #1880.
-    (let ((o (make-overlay (1+ (line-beginning-position))
-                           (line-end-position)
-                           nil t)))
+    (let ((o (make-overlay (1+ (point)) (line-end-position) nil t)))
       (overlay-put o 'evaporate t)
       (overlay-put o 'before-string
                    (propertize "o" 'display
@@ -184,7 +185,7 @@ does not carry to other options."
 (defun magit-maybe-make-margin-overlay ()
   (when (magit-section-match magit-margin-overlay-conditions
                              magit-insert-section--current)
-    (magit-make-margin-overlay nil t)))
+    (magit-make-margin-overlay)))
 
 ;;; Custom Support
 
diff --git a/lisp/magit-refs.el b/lisp/magit-refs.el
index e5132d726c..2bcee3e7e2 100644
--- a/lisp/magit-refs.el
+++ b/lisp/magit-refs.el
@@ -565,7 +565,7 @@ line is inserted at all."
                   (magit-refs--format-margin tag))
                 (magit-refs--insert-cherry-commits tag)))))
         (insert ?\n)
-        (magit-make-margin-overlay nil t)))))
+        (magit-make-margin-overlay)))))
 
 (defun magit-insert-remote-branches ()
   "Insert sections showing all remote-tracking branches."
@@ -620,7 +620,7 @@ line is inserted at all."
                     (magit-refs--format-margin branch))
                   (magit-refs--insert-cherry-commits branch))))))))
       (insert ?\n)
-      (magit-make-margin-overlay nil t))))
+      (magit-make-margin-overlay))))
 
 (defun magit-insert-local-branches ()
   "Insert sections showing all local branches."
@@ -637,7 +637,7 @@ line is inserted at all."
             (magit-refs--format-margin branch))
           (magit-refs--insert-cherry-commits branch))))
     (insert ?\n)
-    (magit-make-margin-overlay nil t)))
+    (magit-make-margin-overlay)))
 
 (defun magit-insert-shelved-branches ()
   "Insert sections showing all shelved branches."
@@ -652,7 +652,7 @@ line is inserted at all."
             (magit-refs--format-margin ref))
           (magit-refs--insert-cherry-commits ref)))
       (insert ?\n)
-      (magit-make-margin-overlay nil t))))
+      (magit-make-margin-overlay))))
 
 (defun magit-refs--format-local-branches ()
   (let ((lines (seq-keep #'magit-refs--format-local-branch
@@ -802,14 +802,12 @@ line is inserted at all."
         "cherry" "-v" (magit-abbrev-arg) magit-buffer-upstream ref)
       (if (= (point) start)
           (message "No cherries for %s" ref)
-        (magit-make-margin-overlay nil t)))))
+        (magit-make-margin-overlay)))))
 
 (defun magit-refs--format-margin (commit)
-  (save-excursion
-    (goto-char (line-beginning-position 0))
-    (if-let ((line (magit-rev-format "%cN%x00%ct" commit)))
-        (apply #'magit-log-format-margin commit (split-string line "\0"))
-      (magit-make-margin-overlay))))
+  (if-let ((line (magit-rev-format "%cN%x00%ct" commit)))
+      (apply #'magit-log-format-margin commit (split-string line "\0"))
+    (magit-make-margin-overlay)))
 
 ;;; _
 (provide 'magit-refs)
diff --git a/lisp/magit-stash.el b/lisp/magit-stash.el
index ebbcd7d267..df93ae031e 100644
--- a/lisp/magit-stash.el
+++ b/lisp/magit-stash.el
@@ -527,16 +527,12 @@ instead of \"Stashes:\"."
             (magit-insert-section (stash autostash)
               (insert (propertize "AUTOSTASH" 'font-lock-face 'magit-hash))
               (insert " " msg "\n")
-              (save-excursion
-                (backward-char)
-                (magit-log-format-margin autostash author date)))))
+              (magit-log-format-margin autostash author date))))
         (if verified
             (magit-git-wash (apply-partially #'magit-log-wash-log 'stash)
               "reflog" "--format=%gd%x00%aN%x00%at%x00%gs" ref)
           (insert ?\n)
-          (save-excursion
-            (backward-char)
-            (magit-make-margin-overlay)))))))
+          (magit-make-margin-overlay))))))
 
 ;;; List Stashes
 

Reply via email to