|
|
|
@ -90,7 +90,7 @@
|
|
|
|
|
;; * Overview of modes and commands
|
|
|
|
|
;; --------------------------------
|
|
|
|
|
;; - `global-so-long-mode' - A global minor mode which enables the automated
|
|
|
|
|
;; behaviour, causing the user's preferred action to be invoked whenever a
|
|
|
|
|
;; behavior, causing the user's preferred action to be invoked whenever a
|
|
|
|
|
;; newly-visited file contains excessively long lines.
|
|
|
|
|
;; - `so-long-mode' - A major mode, and the default action.
|
|
|
|
|
;; - `so-long-minor-mode' - A minor mode version of the major mode, and an
|
|
|
|
@ -111,7 +111,7 @@
|
|
|
|
|
;;
|
|
|
|
|
;; On rare occasions you may choose to manually invoke the `so-long' command,
|
|
|
|
|
;; which invokes your preferred `so-long-action' (exactly as the automatic
|
|
|
|
|
;; behaviour would do if it had detected long lines). You might use this if a
|
|
|
|
|
;; behavior would do if it had detected long lines). You might use this if a
|
|
|
|
|
;; problematic file did not meet your configured criteria, and you wished to
|
|
|
|
|
;; trigger the performance improvements manually.
|
|
|
|
|
;;
|
|
|
|
@ -120,7 +120,7 @@
|
|
|
|
|
;; available to `so-long' but, like any other mode, they can be invoked directly
|
|
|
|
|
;; if you have a need to do that (see also "Other ways of using so-long" below).
|
|
|
|
|
;;
|
|
|
|
|
;; If the behaviour ever triggers when you did not want it to, you can use the
|
|
|
|
|
;; If the behavior ever triggers when you did not want it to, you can use the
|
|
|
|
|
;; `so-long-revert' command to restore the buffer to its original state.
|
|
|
|
|
|
|
|
|
|
;; * Basic configuration
|
|
|
|
@ -199,7 +199,7 @@
|
|
|
|
|
;;
|
|
|
|
|
;; Note that `so-long-minor-modes' is not useful for other global minor modes
|
|
|
|
|
;; (as distinguished from globalized minor modes), but in some cases it will be
|
|
|
|
|
;; possible to inhibit or otherwise counter-act the behaviour of a global mode
|
|
|
|
|
;; possible to inhibit or otherwise counter-act the behavior of a global mode
|
|
|
|
|
;; by overriding variables, or by employing hooks (see below). You would need
|
|
|
|
|
;; to inspect the code for a given global mode (on a case by case basis) to
|
|
|
|
|
;; determine whether it's possible to inhibit it for a single buffer -- and if
|
|
|
|
@ -211,7 +211,7 @@
|
|
|
|
|
;; If `so-long-action' is set to either `so-long-mode' or `so-long-minor-mode',
|
|
|
|
|
;; the buffer-local value for each variable in the list is set to the associated
|
|
|
|
|
;; value in the alist. Use this to enforce values which will improve
|
|
|
|
|
;; performance or otherwise avoid undesirable behaviours. If `so-long-revert'
|
|
|
|
|
;; performance or otherwise avoid undesirable behaviors. If `so-long-revert'
|
|
|
|
|
;; is called, then the original values are restored.
|
|
|
|
|
|
|
|
|
|
;; * Retaining minor modes and settings when switching to `so-long-mode'
|
|
|
|
@ -273,7 +273,7 @@
|
|
|
|
|
;; `so-long-mode', completely bypassing the automated decision process.
|
|
|
|
|
;; Refer to M-: (info "(emacs) Specifying File Variables") RET
|
|
|
|
|
;;
|
|
|
|
|
;; If so-long itself causes problems, disable the automated behaviour with
|
|
|
|
|
;; If so-long itself causes problems, disable the automated behavior with
|
|
|
|
|
;; M-- M-x global-so-long-mode, or M-: (global-so-long-mode 0)
|
|
|
|
|
|
|
|
|
|
;; * Example configuration
|
|
|
|
@ -313,7 +313,7 @@
|
|
|
|
|
;; (add-hook 'js-mode-hook 'my-js-mode-hook)
|
|
|
|
|
;;
|
|
|
|
|
;; (defun my-js-mode-hook ()
|
|
|
|
|
;; "Custom `js-mode' behaviours."
|
|
|
|
|
;; "Custom `js-mode' behaviors."
|
|
|
|
|
;; (setq-local so-long-max-lines 100)
|
|
|
|
|
;; (setq-local so-long-threshold 1000))
|
|
|
|
|
;;
|
|
|
|
@ -327,7 +327,7 @@
|
|
|
|
|
;; (add-hook 'nxml-mode-hook 'my-nxml-mode-hook)
|
|
|
|
|
;;
|
|
|
|
|
;; (defun my-nxml-mode-hook ()
|
|
|
|
|
;; "Custom `nxml-mode' behaviours."
|
|
|
|
|
;; "Custom `nxml-mode' behaviors."
|
|
|
|
|
;; (require 'so-long)
|
|
|
|
|
;; (setq-local so-long-variable-overrides
|
|
|
|
|
;; (remove '(bidi-inhibit-bpa . t) so-long-variable-overrides)))
|
|
|
|
@ -380,7 +380,7 @@
|
|
|
|
|
;; meaning you would need to add to `safe-local-variable-values' in order to
|
|
|
|
|
;; avoid being queried about them.
|
|
|
|
|
;;
|
|
|
|
|
;; Finally, the `so-long-predicate' user option enables the automated behaviour
|
|
|
|
|
;; Finally, the `so-long-predicate' user option enables the automated behavior
|
|
|
|
|
;; to be determined by a custom function, if greater control is needed.
|
|
|
|
|
|
|
|
|
|
;; * Implementation notes
|
|
|
|
@ -397,7 +397,7 @@
|
|
|
|
|
|
|
|
|
|
;; * Caveats
|
|
|
|
|
;; ---------
|
|
|
|
|
;; The variables affecting the automated behaviour of this library (such as
|
|
|
|
|
;; The variables affecting the automated behavior of this library (such as
|
|
|
|
|
;; `so-long-action') can be used as file- or dir-local values in Emacs 26+, but
|
|
|
|
|
;; not in previous versions of Emacs. This is on account of improvements made
|
|
|
|
|
;; to `normal-mode' in 26.1, which altered the execution order with respect to
|
|
|
|
@ -462,7 +462,7 @@
|
|
|
|
|
;; 0.6 - Added `so-long-minor-modes' and `so-long-hook'.
|
|
|
|
|
;; 0.5 - Renamed library to "so-long.el".
|
|
|
|
|
;; - Added explicit `so-long-enable' command to activate our advice.
|
|
|
|
|
;; 0.4 - Amended/documented behaviour with file-local 'mode' variables.
|
|
|
|
|
;; 0.4 - Amended/documented behavior with file-local 'mode' variables.
|
|
|
|
|
;; 0.3 - Defer to a file-local 'mode' variable.
|
|
|
|
|
;; 0.2 - Initial release to EmacsWiki.
|
|
|
|
|
;; 0.1 - Experimental.
|
|
|
|
@ -490,7 +490,7 @@
|
|
|
|
|
;; automatically."; however `so-long--ensure-enabled' may forcibly re-enable
|
|
|
|
|
;; it contrary to the user's expectations, so for the present this should be
|
|
|
|
|
;; considered internal-use only (with `global-so-long-mode' the interface
|
|
|
|
|
;; for enabling or disabling the automated behaviour). FIXME: Establish a
|
|
|
|
|
;; for enabling or disabling the automated behavior). FIXME: Establish a
|
|
|
|
|
;; way to support the original use-case, or rename to `so-long--enabled'.
|
|
|
|
|
"Internal use. Non-nil when any `so-long' functionality has been used.")
|
|
|
|
|
|
|
|
|
@ -586,7 +586,7 @@ files would prevent Emacs from handling them correctly."
|
|
|
|
|
(defcustom so-long-invisible-buffer-function #'so-long-deferred
|
|
|
|
|
"Function called in place of `so-long' when the buffer is not displayed.
|
|
|
|
|
|
|
|
|
|
This affects the behaviour of `global-so-long-mode'.
|
|
|
|
|
This affects the behavior of `global-so-long-mode'.
|
|
|
|
|
|
|
|
|
|
We treat invisible buffers differently from displayed buffers because, in
|
|
|
|
|
cases where a library is using a buffer for behind-the-scenes processing,
|
|
|
|
@ -618,7 +618,7 @@ the mentioned options might interfere with some intended processing."
|
|
|
|
|
'so-long-detected-long-line-p)
|
|
|
|
|
"Function called after `set-auto-mode' to decide whether action is needed.
|
|
|
|
|
|
|
|
|
|
This affects the behaviour of `global-so-long-mode'.
|
|
|
|
|
This affects the behavior of `global-so-long-mode'.
|
|
|
|
|
|
|
|
|
|
Only called if the major mode is a member of `so-long-target-modes'.
|
|
|
|
|
|
|
|
|
@ -703,7 +703,7 @@ will be automatically processed; but custom actions can also do these things.
|
|
|
|
|
The value `longlines-mode' causes that minor mode to be enabled. See
|
|
|
|
|
longlines.el for more details.
|
|
|
|
|
|
|
|
|
|
Each action likewise determines the behaviour of `so-long-revert'.
|
|
|
|
|
Each action likewise determines the behavior of `so-long-revert'.
|
|
|
|
|
|
|
|
|
|
If the value is nil, or not defined in `so-long-action-alist', then no action
|
|
|
|
|
will be taken."
|
|
|
|
@ -753,7 +753,7 @@ If ACTION-ARG is provided, it is used in place of `so-long-action'."
|
|
|
|
|
(defcustom so-long-file-local-mode-function 'so-long-mode-downgrade
|
|
|
|
|
"Function to call during `set-auto-mode' when a file-local mode is set.
|
|
|
|
|
|
|
|
|
|
This affects the behaviour of `global-so-long-mode'.
|
|
|
|
|
This affects the behavior of `global-so-long-mode'.
|
|
|
|
|
|
|
|
|
|
The specified function will be called with a single argument, being the
|
|
|
|
|
file-local mode which was established.
|
|
|
|
@ -855,7 +855,7 @@ By default this happens if `so-long-action' is set to either `so-long-mode'
|
|
|
|
|
or `so-long-minor-mode'. If `so-long-revert' is subsequently invoked, then the
|
|
|
|
|
disabled modes are re-enabled by calling them with the numeric argument 1.
|
|
|
|
|
|
|
|
|
|
`so-long-hook' can be used where more custom behaviour is desired.
|
|
|
|
|
`so-long-hook' can be used where more custom behavior is desired.
|
|
|
|
|
|
|
|
|
|
Please submit bug reports to recommend additional modes for this list, whether
|
|
|
|
|
they are in Emacs core, GNU ELPA, or elsewhere."
|
|
|
|
@ -1312,7 +1312,7 @@ This minor mode is a standard `so-long-action' option."
|
|
|
|
|
(if so-long-minor-mode ;; We are enabling the mode.
|
|
|
|
|
(progn
|
|
|
|
|
;; Housekeeping. `so-long-minor-mode' might be invoked directly rather
|
|
|
|
|
;; than via `so-long', so replicate the necessary behaviours. The minor
|
|
|
|
|
;; than via `so-long', so replicate the necessary behaviors. The minor
|
|
|
|
|
;; mode also cares about whether `so-long' was already active, as we do
|
|
|
|
|
;; not want to remember values which were (potentially) overridden
|
|
|
|
|
;; already.
|
|
|
|
@ -1387,9 +1387,9 @@ values), despite potential performance issues, type \\[so-long-revert].
|
|
|
|
|
Use \\[so-long-commentary] for more information.
|
|
|
|
|
|
|
|
|
|
Use \\[so-long-customize] to open the customization group `so-long' to
|
|
|
|
|
configure the behaviour."
|
|
|
|
|
configure the behavior."
|
|
|
|
|
;; Housekeeping. `so-long-mode' might be invoked directly rather than via
|
|
|
|
|
;; `so-long', so replicate the necessary behaviours. We could use this same
|
|
|
|
|
;; `so-long', so replicate the necessary behaviors. We could use this same
|
|
|
|
|
;; test in `so-long-after-change-major-mode' to run `so-long-hook', but that's
|
|
|
|
|
;; not so obviously the right thing to do, so I've omitted it for now.
|
|
|
|
|
(unless so-long--calling
|
|
|
|
@ -1435,7 +1435,7 @@ configure the behaviour."
|
|
|
|
|
This advice acts before `so-long-mode', with the previous mode still active."
|
|
|
|
|
(unless (derived-mode-p 'so-long-mode)
|
|
|
|
|
;; Housekeeping. `so-long-mode' might be invoked directly rather than
|
|
|
|
|
;; via `so-long', so replicate the necessary behaviours.
|
|
|
|
|
;; via `so-long', so replicate the necessary behaviors.
|
|
|
|
|
(unless so-long--calling
|
|
|
|
|
(so-long-remember-all :reset))
|
|
|
|
|
;; Remember the original major mode, regardless.
|
|
|
|
@ -1549,7 +1549,7 @@ This is the `so-long-revert-function' for `so-long-mode'."
|
|
|
|
|
;; Emacs 26+ has already called `hack-local-variables' (during
|
|
|
|
|
;; `run-mode-hooks'; provided there was a `buffer-file-name'), but for older
|
|
|
|
|
;; versions we need to call it here. In Emacs 26+ the revised 'HANDLE-MODE'
|
|
|
|
|
;; argument is set to `no-mode' (being the non-nil-and-non-t behaviour),
|
|
|
|
|
;; argument is set to `no-mode' (being the non-nil-and-non-t behavior),
|
|
|
|
|
;; which we mimic here by binding `so-long--hack-local-variables-no-mode',
|
|
|
|
|
;; in order to prevent a local 'mode' variable from clobbering the major
|
|
|
|
|
;; mode we have just called.
|
|
|
|
@ -1590,7 +1590,7 @@ because we do not want to downgrade the major mode in that scenario."
|
|
|
|
|
;; Act only if `so-long-mode' would be enabled by the current action.
|
|
|
|
|
(when (and (symbolp (so-long-function))
|
|
|
|
|
(provided-mode-derived-p (so-long-function) 'so-long-mode))
|
|
|
|
|
;; Downgrade from `so-long-mode' to the `so-long-minor-mode' behaviour.
|
|
|
|
|
;; Downgrade from `so-long-mode' to the `so-long-minor-mode' behavior.
|
|
|
|
|
(setq so-long-function 'turn-on-so-long-minor-mode
|
|
|
|
|
so-long-revert-function 'turn-off-so-long-minor-mode))))
|
|
|
|
|
|
|
|
|
@ -1610,7 +1610,7 @@ and cannot be conveniently intercepted, so we are forced to replicate it here.
|
|
|
|
|
|
|
|
|
|
This special-case code will ultimately be removed from Emacs, as it exists to
|
|
|
|
|
deal with a deprecated feature; but until then we need to replicate it in order
|
|
|
|
|
to inhibit our own behaviour in the presence of a header comment `mode'
|
|
|
|
|
to inhibit our own behavior in the presence of a header comment `mode'
|
|
|
|
|
declaration.
|
|
|
|
|
|
|
|
|
|
If a file-local mode is detected in the header comment, then we call the
|
|
|
|
@ -1747,7 +1747,7 @@ by testing the value against `major-mode'; but as we may have changed the
|
|
|
|
|
major mode to `so-long-mode' by this point, that protection is insufficient
|
|
|
|
|
and so we need to perform our own test.
|
|
|
|
|
|
|
|
|
|
We likewise need to support an equivalent of the `no-mode' behaviour in 26.1+
|
|
|
|
|
We likewise need to support an equivalent of the `no-mode' behavior in 26.1+
|
|
|
|
|
to ensure that `so-long-mode-revert' will not restore a file-local mode again
|
|
|
|
|
after it has already reverted to the original mode.
|
|
|
|
|
|
|
|
|
@ -1895,7 +1895,7 @@ When such files are detected by `so-long-predicate', we invoke the selected
|
|
|
|
|
Use \\[so-long-commentary] for more information.
|
|
|
|
|
|
|
|
|
|
Use \\[so-long-customize] to open the customization group `so-long' to
|
|
|
|
|
configure the behaviour."
|
|
|
|
|
configure the behavior."
|
|
|
|
|
:global t
|
|
|
|
|
:group 'so-long
|
|
|
|
|
(if global-so-long-mode
|
|
|
|
|