Function: so-long--set-auto-mode

so-long--set-auto-mode is a byte-compiled function defined in so-long.el.gz.

Signature

(so-long--set-auto-mode ORIG-FUN &rest ARGS)

Documentation

Maybe call so-long for files with very long lines.

This advice acts after set-auto-mode has set the buffer's major mode, if global-so-long-mode(var)/global-so-long-mode(fun) is enabled.

We can't act before this point, because some major modes must be exempt
(binary file modes, for example). Instead, we act only when the selected
major mode is a member (or derivative of a member) of so-long-target-modes.

so-long-predicate then determines whether the mode change is needed.

Source Code

;; Defined in /usr/src/emacs/lisp/so-long.el.gz
(defun so-long--set-auto-mode (orig-fun &rest args)
  ;; Advice, enabled with:
  ;; (advice-add 'set-auto-mode :around #'so-long--set-auto-mode)
  "Maybe call `so-long' for files with very long lines.

This advice acts after `set-auto-mode' has set the buffer's major mode, if
`global-so-long-mode' is enabled.

We can't act before this point, because some major modes must be exempt
\(binary file modes, for example).  Instead, we act only when the selected
major mode is a member (or derivative of a member) of `so-long-target-modes'.

`so-long-predicate' then determines whether the mode change is needed."
  (setq so-long--inhibited nil) ; is permanent-local
  (when so-long-enabled
    (so-long--check-header-modes)) ; may cause `so-long--inhibited' to be set.
  (let ((so-long--set-auto-mode t))
    ;; Call `set-auto-mode'.
    (apply orig-fun args)) ; may cause `so-long--inhibited' to be set.
  ;; Test the new major mode for long lines.
  (and so-long-enabled
       (not so-long--inhibited)
       (not so-long--calling)
       (or (eq so-long-target-modes t)
           ;; Maintain `derived-mode-p' compatibility with Emacs < 30.
           (apply #'derived-mode-p so-long-target-modes))
       (setq so-long-detected-p (funcall so-long-predicate))
       ;; `so-long' should be called; but only if and when the buffer is
       ;; displayed in a window.  Long lines in invisible buffers are generally
       ;; not problematic, whereas it might cause problems if an invisible
       ;; buffer being used for behind-the-scenes processing is manipulated
       ;; unexpectedly.  The default `so-long-invisible-buffer-function' value
       ;; is `so-long-deferred', which arranges to call `so-long' as soon as
       ;; the buffer is displayed.
       (if (or (get-buffer-window (current-buffer) t)
               (not so-long-invisible-buffer-function))
           (so-long)
         (funcall so-long-invisible-buffer-function))))