emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/eat f54af22d6a 2/3: Fix invoking commands with eshell/sudo


From: ELPA Syncer
Subject: [nongnu] elpa/eat f54af22d6a 2/3: Fix invoking commands with eshell/sudo from Tramp
Date: Sat, 10 Dec 2022 13:58:35 -0500 (EST)

branch: elpa/eat
commit f54af22d6a1e468b747f9563ca4a0a50ad89d9f1
Author: Akib Azmain Turja <akib@disroot.org>
Commit: Akib Azmain Turja <akib@disroot.org>

    Fix invoking commands with eshell/sudo from Tramp
    
    * eat.el (eat--eshell-adjust-make-process-args): Override
    'start-file-process' on Emacs 28, used by Eshell on Emacs 28.
    Don't override 'make-process' on Emacs 28, Eshell doesn't use
    that on Emacs 28.  Set process filter and sentinel in
    'eshell-exec-hook' instead of 'make-process' advice.
---
 eat.el | 67 +++++++++++++++++++++++++++++++++++-------------------------------
 1 file changed, 36 insertions(+), 31 deletions(-)

diff --git a/eat.el b/eat.el
index b8e58c49f1..0009f307ff 100644
--- a/eat.el
+++ b/eat.el
@@ -5470,41 +5470,46 @@ Call FN with COMMAND and ARGS, and whenever 
`make-process' is called,
 modify its argument to change the filter, the sentinel and invoke
 `stty' from the new process."
   (cl-letf*
-      ((make-process (symbol-function #'make-process))
+      (;; For Emacs 29 and above.
+       (make-process (symbol-function #'make-process))
        ((symbol-function #'make-process)
-        (lambda (&rest plist)
-          ;; Make sure we don't attack wrong process.
-          (if (not (and (equal (plist-get plist :command)
-                               (cons (file-local-name
-                                      (expand-file-name command))
-                                     args))
-                        ;; Eshell on Emacs 28 uses
-                        ;; `start-file-process', so `:filter' and
-                        ;; `:sentinel' are nil now.
-                        (or (< emacs-major-version 29)
-                            (and (eq (plist-get plist :filter)
-                                     #'eshell-output-filter)
-                                 (eq (plist-get plist :sentinel)
-                                     #'eshell-sentinel)))))
-              (apply make-process plist)
-            (unless (< emacs-major-version 29)
-              (setf (plist-get plist :filter) #'eat--eshell-filter)
-              (setf (plist-get plist :sentinel)
-                    #'eat--eshell-sentinel))
-            (setf (plist-get plist :command)
-                  `("/usr/bin/env" "sh" "-c"
-                    ,(format "stty -nl echo rows %d columns %d \
+        (if (< emacs-major-version 29)
+            make-process
+          (lambda (&rest plist)
+            ;; Make sure we don't attack wrong process.
+            (if (not (equal (plist-get plist :command)
+                            (cons (file-local-name
+                                   (expand-file-name command))
+                                  args)))
+                (apply make-process plist)
+              (setf (plist-get plist :command)
+                    `("/usr/bin/env" "sh" "-c"
+                      ,(format "stty -nl echo rows %d columns %d \
+sane 2>%s ; if [ $1 = .. ]; then shift; fi; exec \"$@\""
+                               (floor (window-screen-lines))
+                               (window-max-chars-per-line)
+                               null-device)
+                      ".." ,@(plist-get plist :command)))
+              (apply make-process plist)))))
+       ;; For Emacs 28.
+       (start-file-process (symbol-function #'start-file-process))
+       ((symbol-function #'start-file-process)
+        (if (< emacs-major-version 29)
+            (lambda (name buffer &rest command)
+              (apply start-file-process name buffer
+                     `("/usr/bin/env" "sh" "-c"
+                       ,(format "stty -nl echo rows %d columns %d \
 sane 2>%s ; if [ $1 = .. ]; then shift; fi; exec \"$@\""
-                             (floor (window-screen-lines))
-                             (window-max-chars-per-line) null-device)
-                    ".."
-                    ,@(plist-get plist :command)))
-            (apply make-process plist)))))
+                                (floor (window-screen-lines))
+                                (window-max-chars-per-line)
+                                null-device)
+                       ".." ,@command)))
+          ;; Don't override on Emacs 28.
+          start-file-process)))
     (let ((hook
            (lambda (proc)
-             (when (< emacs-major-version 29)
-               (set-process-filter proc #'eat--eshell-filter)
-               (set-process-sentinel proc #'eat--eshell-sentinel))
+             (set-process-filter proc #'eat--eshell-filter)
+             (set-process-sentinel proc #'eat--eshell-sentinel)
              (eat--eshell-setup-proc-and-term proc))))
       (unwind-protect
           (progn



reply via email to

[Prev in Thread] Current Thread [Next in Thread]