Subject: Re: bug#77313: 30.1.50; Regression: flymake indicators are erroneously using margins

From: Spencer Baugh <[email-masked]>
Date: Thu, 17 Apr 2025 16:23:40 -0400

Eli Zaretskii <[email-masked]> writes:

>> From: Spencer Baugh <[email-masked]>
>> Cc: [email-masked],  [email-masked]
>> Date: Wed, 16 Apr 2025 13:57:03 -0400
>> 
>> Eli Zaretskii <[email-masked]> writes:
>> >> From: Spencer Baugh <[email-masked]>
>> >> Date: Sat, 12 Apr 2025 07:43:11 -0400
>> >> Cc: [email-masked], Juri Linkov <[email-masked]>
>> >> 
>> >> On Sat, Apr 12, 2025, 7:13 AM Eli Zaretskii <[email-masked]> wrote:
>> >> 
>> >>  Thanks, installed on master.
>> >> 
>> >>  Should we now close this bug?
>> >> 
>> >> No, we need to backport it to Emacs 30.2 to fix the regression.
>> >
>> > OK, but it cannot be cherry-picked as is, because it includes a NEWS
>> > entry.  So the fix for emacs-30, when we decide to install it, will
>> > need to be a separate commit.
>> 
>> OK, here is a version ready for backporting to emacs-30, with a NEWS
>> entry appropriate for 30.2.
>
> I don't understand: this seems to be identical to the commit on
> master.  Did you show a wrong patch?
>
> What I had in mind was a change only to flymake.el, with "Do not
> merge" in the commit log message, since you say this is basically a
> bugfix.  I see no reason to announce this in NEWS, let alone with an
> entry that is identical to what we have on master.

I see, that makes sense.  OK, here's a patch like that.

>From b111266fdc8411f0852088d9eaec22042e841a04 Mon Sep 17 00:00:00 2001
From: Spencer Baugh <[email-masked]>
Date: Thu, 17 Apr 2025 16:22:08 -0400
Subject: [PATCH] Backport: fix flymake margin indicator fallback logic

Backport 861e7f8b60e4bf076bf5991d25a22b3a012746bd to fix bug#77313, so
that fringe indicators are once again reliably the default on frames
that support them.

Do not merge to master.

* lisp/progmodes/flymake.el (flymake-indicator-type)
(flymake-mode): Fix margin fallback behavior.
---
 lisp/progmodes/flymake.el | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index f8a294908ba..a9e15fbbb12 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -185,22 +185,23 @@ flymake-fringe-indicator-position
 		 (const right-fringe)
 		 (const :tag "No fringe indicators" nil)))
 
-(defcustom flymake-indicator-type (if (display-graphic-p)
-                                      'fringes
-                                    'margins)
+(defcustom flymake-indicator-type 'fringes
   "Indicate which indicator type to use for display errors.
 
 The value can be nil (don't indicate errors but just highlight them),
-fringes (use fringes) or margins (use margins)
+the symbol `fringes' (use fringes) or the symbol `margins' (use
+margins).
 
 Difference between fringes and margin is that fringes support displaying
 bitmaps on graphical displays and margins display text in a blank area
 from current buffer that works in both graphical and text displays.
+Thus, even when `fringes' is selected, margins will still be used on
+text displays and also when fringes are disabled.
 
 See Info node `Fringes' and Info node `(elisp)Display Margins'."
-  :version "30.1"
+  :version "30.2"
   :type '(choice (const :tag "Use Fringes" fringes)
-                 (const :tag "Use Margins "margins)
+                 (const :tag "Use Margins" margins)
                  (const :tag "No indicators" nil)))
 
 (defcustom flymake-margin-indicators-string
@@ -1393,6 +1394,13 @@ flymake-mode
     (add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook nil t)
     (add-hook 'eldoc-documentation-functions 'flymake-eldoc-function t t)
 
+    (when (and (eq flymake-indicator-type 'fringes)
+               (not (cl-case flymake-fringe-indicator-position
+                      (left-fringe (< 0 (nth 0 (window-fringes))))
+                      (right-fringe (< 0 (nth 1 (window-fringes)))))))
+      ;; There are no fringes in the buffer, fallback to margins.
+      (setq-local flymake-indicator-type 'margins))
+
     ;; AutoResize margins.
     (flymake--resize-margins)
 
-- 
2.39.3