]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/so-long.el (so-long): Firstly revert the existing action, if any
authorPhil Sainty <psainty@orcon.net.nz>
Sat, 16 Nov 2019 13:11:20 +0000 (02:11 +1300)
committerPhil Sainty <psainty@orcon.net.nz>
Mon, 18 Nov 2019 08:25:36 +0000 (21:25 +1300)
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.

lisp/so-long.el

index 6928c902d12094fc07fdc1bddce0b0ec86ce6a00..e80abc76a5354ad0e09aacd50c6ce8299be677a5 100644 (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.