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)
(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))))