* lisp/so-long.el (so-long): Firstly revert the existing action, if any

This makes `so-long' consistent with the action commands in the menu.

If multiple actions were to be layered on top of one another, we would
lose the ability to revert to the normal state.  Custom actions
combining multiple other actions can be defined if necessary.
This commit is contained in:
Phil Sainty 2019-11-17 02:11:20 +13:00
parent 6b361d9530
commit 83c50cc6ef

View file

@ -1576,8 +1576,12 @@ This command is called automatically when long lines are detected, when
The effects of the action can be undone by calling `so-long-revert'.
If ACTION is provided, it is used instead of `so-long-action'. With a prefix
argument, select the action to use interactively."
If ACTION is provided, it is used instead of `so-long-action'.
With a prefix argument, select the action to use interactively.
If an action was already active in the buffer, it will be reverted before
invoking the new action."
(interactive
(list (and current-prefix-arg
(intern
@ -1587,6 +1591,10 @@ argument, select the action to use interactively."
;; Ensure that `so-long-deferred' only triggers `so-long' once (at most).
(remove-hook 'window-configuration-change-hook #'so-long :local)
(unless so-long--calling
;; Revert the existing action, if any.
(when so-long--active
(so-long-revert))
;; Invoke the new action.
(let ((so-long--calling t))
(so-long--ensure-enabled)
;; ACTION takes precedence if supplied.