]> git.eshelyaron.com Git - emacs.git/commitdiff
Ensure that the prompt is kept on the final line
authorLars Ingebrigtsen <larsi@gnus.org>
Wed, 23 Oct 2019 09:55:13 +0000 (11:55 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Wed, 23 Oct 2019 09:55:13 +0000 (11:55 +0200)
* lisp/erc/erc-goodies.el (erc-possibly-scroll-to-bottom): New
function.
(scrolltobottom): Add to erc-insert-done-hook.

* lisp/erc/erc.el (erc-insert-done-hook): New hook (bug#11697).
(erc-display-line-1): Use it.

etc/NEWS
lisp/erc/erc-goodies.el
lisp/erc/erc.el

index 43411b7d4f1c93e4498afd99e4bc062368c257ba..01fdf39ab04924f43a8f49d77bf50c24e8571a2e 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1233,6 +1233,13 @@ fail.
 
 ** erc
 
+---
+*** New hook 'erc-insert-done-hook'.
+This hook is called after strings have been inserted into the buffer,
+and is free to alter point and window configurations, as it's not
+called from inside a 'save-excursion', as opposed to
+'erc-insert-post-hook'.
+
 ---
 *** 'erc-button-google-url' has been renamed to 'erc-button-search-url'
 and its value has been changed to Duck Duck Go.
index 5e7946810be924de3fa4afa80bd59e2ec8d9edac..b08970d258587e66005fa4a4912f462ace101f29 100644 (file)
@@ -55,14 +55,21 @@ argument to `recenter'."
 (define-erc-module scrolltobottom nil
   "This mode causes the prompt to stay at the end of the window."
   ((add-hook 'erc-mode-hook 'erc-add-scroll-to-bottom)
+   (add-hook 'erc-insert-done-hook 'erc-possibly-scroll-to-bottom)
    (dolist (buffer (erc-buffer-list))
      (with-current-buffer buffer
        (erc-add-scroll-to-bottom))))
   ((remove-hook 'erc-mode-hook 'erc-add-scroll-to-bottom)
+   (remove-hook 'erc-insert-done-hook 'erc-possibly-scroll-to-bottom)
    (dolist (buffer (erc-buffer-list))
      (with-current-buffer buffer
        (remove-hook 'post-command-hook 'erc-scroll-to-bottom t)))))
 
+(defun erc-possibly-scroll-to-bottom ()
+  "Like `erc-add-scroll-to-bottom', but only if window is selected."
+  (when (eq (selected-window) (get-buffer-window))
+    (erc-scroll-to-bottom)))
+
 (defun erc-add-scroll-to-bottom ()
   "A hook function for `erc-mode-hook' to recenter output at bottom of window.
 
index 86f103ef23151b4b46015c8615d703f661119328..1c5ecf99c6b660061a943573df978af5ec93d4a3 100644 (file)
@@ -1097,6 +1097,14 @@ At this point, all modifications from prior hook functions are done."
              erc-make-read-only
              erc-save-buffer-in-logs))
 
+(defcustom erc-insert-done-hook nil
+  "This hook is called after inserting strings into the buffer.
+This hook is not called from inside `save-excursion' and should
+preserve point if needed."
+  :group 'erc-hooks
+  :version "27.1"
+  :type 'hook)
+
 (defcustom erc-send-modify-hook nil
   "Sending hook for functions that will change the text's appearance.
 This hook is called just after `erc-send-pre-hook' when the values
@@ -2419,6 +2427,7 @@ If STRING is nil, the function does nothing."
                   (when erc-remove-parsed-property
                     (remove-text-properties (point-min) (point-max)
                                             '(erc-parsed nil))))))))
+        (run-hooks 'erc-insert-done-hook)
         (erc-update-undo-list (- (or (marker-position erc-insert-marker)
                                      (point-max))
                                  insert-position))))))