diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi index 54835767928..668a72b4cd1 100644 --- a/doc/misc/flymake.texi +++ b/doc/misc/flymake.texi @@ -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 diff --git a/etc/NEWS b/etc/NEWS index ad824493903..fce6fd3e9dc 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -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 diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 6cc7e1f7a79..7340fed9be4 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -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)