Subject: bug#46876: closed (Re: bug#46876: [PATCH] Find conflict markers in opened buffers as well)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 09 Mar 2021 02:52:01 +0000

Your bug report

#46876: [PATCH] Find conflict markers in opened buffers as well

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
46876: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=46876
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#46876: [PATCH] Find conflict markers in opened buffers as well
From: Dmitry Gutov <[email-masked]>
To: Konstantin Kharlamov <[email-masked]>, [email-masked]
Date: Tue, 9 Mar 2021 04:51:00 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

On 02.03.2021 21:40, Konstantin Kharlamov wrote:
> Call to (vc-find-conflicted-file) will only result in jump to a conflict
> marker when file is a newly opened one. When a file is already open in
> Emacs, (vc-find-conflicted-file) only switches to that buffer, so we
> need to explicitly jump to a conflict marker.
> 
> * lisp/vc/smerge-mode.el (smerge-vc-next-conflict): Search for a
> conflict marker if call to (vc-find-conflicted-file) haven't resulted in
> a jump to one. And remove `buffer` variable that becomes unused.

Thank you, this makes sense. Applied and pushed to master.

This part is suboptimal:

 > When a file is already open in
 > Emacs, (vc-find-conflicted-file) only switches to that buffer

...and I had to spend some time figuring out why that happens (hint: 
vc-git-find-file-hook), and that kind of unpredictable behavior is Not 
Good(tm).

I don't have an alternative fix to propose, though. At least not at this 
time.

Subject: [PATCH] Find conflict markers in opened buffers as well
From: Konstantin Kharlamov <[email-masked]>
To: [email-masked]
Date: Tue, 2 Mar 2021 19:23:49 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

Call to (vc-find-conflicted-file) will only result in jump to a conflict
marker when file is a newly opened one. When a file is already open in
Emacs, (vc-find-conflicted-file) only switches to that buffer, so we
need to explicitly jump to a conflict marker.

* lisp/vc/smerge-mode.el (smerge-vc-next-conflict): Search for a
conflict marker if call to (vc-find-conflicted-file) haven't resulted in
a jump to one.
---
 lisp/vc/smerge-mode.el | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/lisp/vc/smerge-mode.el b/lisp/vc/smerge-mode.el
index 782c799273..383f8435f5 100644
--- a/lisp/vc/smerge-mode.el
+++ b/lisp/vc/smerge-mode.el
@@ -1468,8 +1468,10 @@ smerge-vc-next-conflict
          (if (and (buffer-modified-p) buffer-file-name)
              (save-buffer))
          (vc-find-conflicted-file)
-         (when (eq buffer (current-buffer))
-           ;; Try to find a conflict marker in current file above the point.
+         ;; At this point, the caret will only be at a conflict marker
+         ;; if the file did not correspond to an opened
+         ;; buffer. Otherwise, we need to jump to a marker explicitly.
+         (unless (looking-at "^<<<<<<<")
            (let ((prev-pos (point)))
              (goto-char (point-min))
              (unless (ignore-errors (not (smerge-next)))
-- 
2.30.1