flymake: fall back to margins on text terminals

Previously, flymake-indicator-type defaulted to either fringes
or margins.  But fringes should be used on graphical frames, and
margins on TTY frames.  So default to fringes instead, and
simply fall back to margins automatically on text frames.

* lisp/progmodes/flymake.el (flymake-indicator-type): Set to
fringes.  (bug#77313)
(flymake-mode): Fallback to margins if there's no fringes.
* doc/misc/flymake.texi (Customizable variables): Mention
fallback behavior.
* etc/NEWS: Announce fallback behavior.
This commit is contained in:
Spencer Baugh 2025-04-08 08:43:37 -04:00 committed by Eli Zaretskii
parent 3b841700a8
commit 861e7f8b60
3 changed files with 25 additions and 6 deletions

View file

@ -313,6 +313,9 @@ The indicator type which Flymake should use to indicate lines with
errors or warnings.
Depending on your preference, this can either use @code{fringes} or
@code{margins} for indicating errors.
If set to @code{fringes} (the default), it will automatically fall back
to using margins in windows or frames without fringes, such as text
terminals.
@item flymake-error-bitmap
A bitmap used in the fringe to mark lines for which an error has

View file

@ -1747,6 +1747,14 @@ change their face if the current line exceeds the 'fill-column'. The
new face 'display-fill-column-indicator-warning-face' is used to
highlight the fill-column indicators. By default this is disabled.
---
** Flymake
*** Windows without fringes now automatically use margin indicators
When flymake-indicator-type is set to 'fringes', as is now the default,
flymake will automatically fall back to using margin indicators in
windows without fringes, including any window in a text terminal.
* New Modes and Packages in Emacs 31.1

View file

@ -185,22 +185,23 @@ See `flymake-error-bitmap' and `flymake-warning-bitmap'."
(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 "31.1"
: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
@ -1439,6 +1440,13 @@ special *Flymake log* buffer." :group 'flymake :lighter
(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)