unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#42870: [PATCH] Change eshell-output-filter to match the behavior of comint-output-filter
@ 2020-08-14 21:20 ` Steven Allen
  2020-08-16 12:32   ` Lars Ingebrigtsen
       [not found]   ` <handler.42870.C.15975811823483.notifdonectrl.0@debbugs.gnu.org>
  0 siblings, 2 replies; 3+ messages in thread
From: Steven Allen @ 2020-08-14 21:20 UTC (permalink / raw)
  To: 42870

This change (a) sets the current buffer to the process-buffer when
invoking preoutput filter functions and (b) only invokes them when the
process-buffer is live. Otherwise, the preoutput filter functions be
invoked in whatever buffer happens to be focused, breaking hooks that
read buffer-local variables.

* lisp/eshell/esh-mode.el: (eshell-output-filter): Match
current-buffer behavior of comint-output-filter.
---
 lisp/eshell/esh-mode.el | 75 +++++++++++++++++++++--------------------
 1 file changed, 38 insertions(+), 37 deletions(-)

diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el
index d0147b345aa..8799007c596 100644
--- a/lisp/eshell/esh-mode.el
+++ b/lisp/eshell/esh-mode.el
@@ -690,46 +690,47 @@ eshell-output-filter
   "Send the output from PROCESS (STRING) to the interactive display.
 This is done after all necessary filtering has been done."
   (let ((oprocbuf (if process (process-buffer process)
-		    (current-buffer)))
-	(inhibit-point-motion-hooks t)
-	(inhibit-modification-hooks t))
-    (let ((functions eshell-preoutput-filter-functions))
-      (while (and functions string)
-	(setq string (funcall (car functions) string))
-	(setq functions (cdr functions))))
-    (if (and string oprocbuf (buffer-name oprocbuf))
-	(let (opoint obeg oend)
-	  (with-current-buffer oprocbuf
-	    (setq opoint (point))
-	    (setq obeg (point-min))
-	    (setq oend (point-max))
-	    (let ((buffer-read-only nil)
-		  (nchars (length string))
-		  (ostart nil))
-	      (widen)
-	      (goto-char eshell-last-output-end)
-	      (setq ostart (point))
-	      (if (<= (point) opoint)
-		  (setq opoint (+ opoint nchars)))
-	      (if (< (point) obeg)
-		  (setq obeg (+ obeg nchars)))
-	      (if (<= (point) oend)
-		  (setq oend (+ oend nchars)))
+                    (current-buffer)))
+        (inhibit-point-motion-hooks t)
+        (inhibit-modification-hooks t))
+    (when (and string oprocbuf (buffer-name oprocbuf))
+      (with-current-buffer oprocbuf
+        (let ((functions eshell-preoutput-filter-functions))
+          (while (and functions string)
+            (setq string (funcall (car functions) string))
+            (setq functions (cdr functions))))
+        (when string
+          (let (opoint obeg oend)
+            (setq opoint (point))
+            (setq obeg (point-min))
+            (setq oend (point-max))
+            (let ((buffer-read-only nil)
+                  (nchars (length string))
+                  (ostart nil))
+              (widen)
+              (goto-char eshell-last-output-end)
+              (setq ostart (point))
+              (if (<= (point) opoint)
+                  (setq opoint (+ opoint nchars)))
+              (if (< (point) obeg)
+                  (setq obeg (+ obeg nchars)))
+              (if (<= (point) oend)
+                  (setq oend (+ oend nchars)))
               ;; Let the ansi-color overlay hooks run.
               (let ((inhibit-modification-hooks nil))
                 (insert-before-markers string))
-	      (if (= (window-start) (point))
-		  (set-window-start (selected-window)
-				    (- (point) nchars)))
-	      (if (= (point) eshell-last-input-end)
-		  (set-marker eshell-last-input-end
-			      (- eshell-last-input-end nchars)))
-	      (set-marker eshell-last-output-start ostart)
-	      (set-marker eshell-last-output-end (point))
-	      (force-mode-line-update))
-	    (narrow-to-region obeg oend)
-	    (goto-char opoint)
-	    (eshell-run-output-filters))))))
+              (if (= (window-start) (point))
+                  (set-window-start (selected-window)
+                                    (- (point) nchars)))
+              (if (= (point) eshell-last-input-end)
+                  (set-marker eshell-last-input-end
+                              (- eshell-last-input-end nchars)))
+              (set-marker eshell-last-output-start ostart)
+              (set-marker eshell-last-output-end (point))
+              (force-mode-line-update))
+            (narrow-to-region obeg oend)
+            (goto-char opoint)
+            (eshell-run-output-filters)))))))
 
 (defun eshell-run-output-filters ()
   "Run the `eshell-output-filter-functions' on the current output."
-- 
2.28.0






^ permalink raw reply related	[flat|nested] 3+ messages in thread

* bug#42870: [PATCH] Change eshell-output-filter to match the behavior of comint-output-filter
  2020-08-14 21:20 ` bug#42870: [PATCH] Change eshell-output-filter to match the behavior of comint-output-filter Steven Allen
@ 2020-08-16 12:32   ` Lars Ingebrigtsen
       [not found]   ` <handler.42870.C.15975811823483.notifdonectrl.0@debbugs.gnu.org>
  1 sibling, 0 replies; 3+ messages in thread
From: Lars Ingebrigtsen @ 2020-08-16 12:32 UTC (permalink / raw)
  To: Steven Allen; +Cc: 42870

Steven Allen <steven@stebalien.com> writes:

> This change (a) sets the current buffer to the process-buffer when
> invoking preoutput filter functions and (b) only invokes them when the
> process-buffer is live. Otherwise, the preoutput filter functions be
> invoked in whatever buffer happens to be focused, breaking hooks that
> read buffer-local variables.
>
> * lisp/eshell/esh-mode.el: (eshell-output-filter): Match
> current-buffer behavior of comint-output-filter.

There we a lot of unavoidable whitespace changes in the patch, so but if
I read it correctly, this sounds like the correct fix, so I've applied
your patch to Emacs 28.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#42870: acknowledged by developer (control message for bug #42870)
       [not found]   ` <handler.42870.C.15975811823483.notifdonectrl.0@debbugs.gnu.org>
@ 2020-08-16 19:43     ` Steven Allen
  0 siblings, 0 replies; 3+ messages in thread
From: Steven Allen @ 2020-08-16 19:43 UTC (permalink / raw)
  To: 42870


Thanks!

(FYI, `git show --word-diff` helps quite a bit)





^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-08-16 19:43 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <87pn7qvki4.fsf@gnus.org>
2020-08-14 21:20 ` bug#42870: [PATCH] Change eshell-output-filter to match the behavior of comint-output-filter Steven Allen
2020-08-16 12:32   ` Lars Ingebrigtsen
     [not found]   ` <handler.42870.C.15975811823483.notifdonectrl.0@debbugs.gnu.org>
2020-08-16 19:43     ` bug#42870: acknowledged by developer (control message for bug #42870) Steven Allen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).