]> git.eshelyaron.com Git - emacs.git/commitdiff
* net/tramp.el (tramp-methods): Use "-H" option for "sudo". Suggested
authorMichael Albinus <michael.albinus@gmx.de>
Tue, 29 Jan 2008 21:14:04 +0000 (21:14 +0000)
committerMichael Albinus <michael.albinus@gmx.de>
Tue, 29 Jan 2008 21:14:04 +0000 (21:14 +0000)
by Trent W. Buck <trentbuck@gmail.com>.  Make ("%h") a single
element in "plinkx".
(tramp-handle-shell-command): Reuse "*Async Shell Command*" or
"*Shell Command Output*" buffers.  Check, whether there is already
an asynchronous process running.  Display always the buffer of the
asynchronous process.
(tramp-compute-multi-hops): Adapt error message.

lisp/net/tramp.el

index eb68c8302aaee8c8be3968a7092db32d71fa386e..5829635d035921223a9b5da906ad05f5283ae3b7 100644 (file)
@@ -441,7 +441,7 @@ files conditionalize this setup based on the TERM environment variable."
             (tramp-password-end-of-line nil))
     ("sudo"  (tramp-login-program        "sudo")
              (tramp-login-args           (("-u" "%u")
-                                         ("-s" "-p" "Password:")))
+                                         ("-s") ("-H") ("-p" "Password:")))
             (tramp-remote-sh            "/bin/sh")
             (tramp-copy-program         nil)
             (tramp-copy-args            nil)
@@ -519,7 +519,9 @@ files conditionalize this setup based on the TERM environment variable."
             (tramp-default-port         22))
     ("plinkx"
              (tramp-login-program        "plink")
-            (tramp-login-args           (("-load" "%h") ("-t")
+            ;; ("%h") must be a single element, see
+            ;; `tramp-compute-multi-hops'.
+            (tramp-login-args           (("-load") ("%h") ("-t")
                                          (,(format
                                             "env 'TERM=%s' 'PROMPT_COMMAND=' 'PS1=$ '"
                                             tramp-terminal-type))
@@ -3789,7 +3791,7 @@ Lisp error raised when PROGRAM is nil is trapped also, returning 1."
           ((bufferp output-buffer) output-buffer)
           ((stringp output-buffer) (get-buffer-create output-buffer))
           (output-buffer (current-buffer))
-          (t (generate-new-buffer
+          (t (get-buffer-create
               (if asynchronous
                   "*Async Shell Command*"
                 "*Shell Command Output*")))))
@@ -3801,22 +3803,42 @@ Lisp error raised when PROGRAM is nil is trapped also, returning 1."
          (if (and (not asynchronous) error-buffer)
              (with-parsed-tramp-file-name default-directory nil
                (list output-buffer (tramp-make-tramp-temp-file v)))
-           output-buffer)))
-
-    (prog1
-       ;; Run the process.
-       (if (integerp asynchronous)
+           output-buffer))
+        (proc (get-buffer-process output-buffer)))
+
+    ;; Check whether there is another process running.  Tramp does not
+    ;; support 2 (asynchronous) processes in parallel.
+    (when proc
+      (if (yes-or-no-p "A command is running.  Kill it? ")
+         (ignore-errors (kill-process proc))
+       (error "Shell command in progress")))
+
+    (with-current-buffer output-buffer
+      (setq buffer-read-only nil
+           buffer-undo-list t)
+      (erase-buffer))
+
+    (if (integerp asynchronous)
+       (prog1
+           ;; Run the process.
            (apply 'start-file-process "*Async Shell*" buffer args)
-         (apply 'process-file (car args) nil buffer nil (cdr args)))
-      ;; Insert error messages if they were separated.
-      (when (listp buffer)
-       (with-current-buffer error-buffer (insert-file-contents (cadr buffer)))
-       (delete-file (cadr buffer)))
-      ;; There's some output, display it.
-      (when (with-current-buffer output-buffer (> (point-max) (point-min)))
-       (if (functionp 'display-message-or-buffer)
-           (funcall (symbol-function 'display-message-or-buffer) output-buffer)
-         (pop-to-buffer output-buffer))))))
+         ;; Display output.
+         (pop-to-buffer output-buffer))
+
+      (prog1
+         ;; Run the process.
+         (apply 'process-file (car args) nil buffer nil (cdr args))
+       ;; Insert error messages if they were separated.
+       (when (listp buffer)
+         (with-current-buffer error-buffer
+           (insert-file-contents (cadr buffer)))
+         (delete-file (cadr buffer)))
+       ;; There's some output, display it.
+       (when (with-current-buffer output-buffer (> (point-max) (point-min)))
+         (if (functionp 'display-message-or-buffer)
+             (funcall (symbol-function 'display-message-or-buffer)
+                      output-buffer)
+           (pop-to-buffer output-buffer)))))))
 
 ;; File Editing.
 
@@ -6073,7 +6095,9 @@ Gateway hops are already opened."
            (concat "^" (regexp-opt (list "localhost" (system-name)) t) "$")
            host))
        (tramp-error
-        v 'file-error "Wrong hostname `%s' for method `%s'" host method)))
+        v 'file-error
+        "Host `%s' looks like a remote host, `%s' can only use the local host"
+        host method)))
 
     ;; Result.
     target-alist))