From 298551496fd9011dc68f8a463a69820573a3abd2 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Sun, 17 Jun 2012 20:54:39 +0200 Subject: [PATCH] * minibuffer.el (read-file-name-default): Bind `non-essential' to `t'. * net/tramp.el (tramp-file-name-handler): Catch 'non-essential. * net/ange-ftp.el (ange-ftp-gwp-start, ange-ftp-start-process): * net/tramp-sh.el (tramp-maybe-open-connection): Throw if `non-essential' is non-nil. --- lisp/ChangeLog | 10 ++++++++++ lisp/minibuffer.el | 3 ++- lisp/net/ange-ftp.el | 8 ++++++++ lisp/net/tramp-sh.el | 5 +++++ lisp/net/tramp.el | 32 +++++++++++++++++++++----------- 5 files changed, 46 insertions(+), 12 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 560f1212b71..fbcff3e97c0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2012-06-17 Michael Albinus + + * minibuffer.el (read-file-name-default): Bind `non-essential' to `t'. + + * net/tramp.el (tramp-file-name-handler): Catch 'non-essential. + + * net/ange-ftp.el (ange-ftp-gwp-start, ange-ftp-start-process): + * net/tramp-sh.el (tramp-maybe-open-connection): + Throw if `non-essential' is non-nil. + 2012-06-17 Martin Rudalics * window.el (special-display-p): Signal an error if BUFFER-NAME diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 6cd7af7fd01..e4453afe046 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -2335,7 +2335,8 @@ See `read-file-name' for the meaning of the arguments." (if (consp default-filename) (mapcar 'abbreviate-file-name default-filename) (abbreviate-file-name default-filename)))) - (let ((insdef (cond + (let ((non-essential t) + (insdef (cond ((and insert-default-directory (stringp dir)) (if initial (cons (minibuffer--double-dollars (concat dir initial)) diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el index 447549f58cd..4ca40fdabef 100644 --- a/lisp/net/ange-ftp.el +++ b/lisp/net/ange-ftp.el @@ -1774,6 +1774,10 @@ good, skip, fatal, or unknown." (defun ange-ftp-gwp-start (host user name args) "Login to the gateway machine and fire up an FTP process." + ;; If `non-essential' is non-nil, don't reopen a new connection. It + ;; will be catched in Tramp. + (when non-essential + (throw 'non-essential 'non-essential)) (let (;; It would be nice to make process-connection-type nil, ;; but that doesn't work: ftp never responds. ;; Can anyone find a fix for that? @@ -1905,6 +1909,10 @@ been queued with no result. CONT will still be called, however." "Spawn a new FTP process ready to connect to machine HOST and give it NAME. If HOST is only FTP-able through a gateway machine then spawn a shell on the gateway machine to do the FTP instead." + ;; If `non-essential' is non-nil, don't reopen a new connection. It + ;; will be catched in Tramp. + (when non-essential + (throw 'non-essential 'non-essential)) (let* ((use-gateway (ange-ftp-use-gateway-p host)) (use-smart-ftp (and (not ange-ftp-gateway-host) (ange-ftp-use-smart-gateway-p host))) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 47aaa4a8e57..1ef602cf6da 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -4292,6 +4292,11 @@ connection if a previous connection has died for some reason." ;; We call `tramp-get-buffer' in order to get a debug ;; buffer for messages from the beginning. (tramp-get-buffer vec) + + ;; If `non-essential' is non-nil, don't reopen a new connection. + (when non-essential + (throw 'non-essential 'non-essential)) + (tramp-with-progress-reporter vec 3 (if (zerop (length (tramp-file-name-user vec))) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index e9621c5d44e..d0e8b35d6ca 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -1928,22 +1928,32 @@ Falls back to normal file name handler if no Tramp file name handler exists." (let ((default-directory (tramp-compat-temporary-file-directory))) (load (cadr sf) 'noerror 'nomessage))) + ;; If `non-essential' is non-nil, Tramp shall + ;; not open a new connection. ;; If Tramp detects that it shouldn't continue - ;; to work, it throws the `suppress' event. We - ;; try the default handler then. + ;; to work, it throws the `suppress' event. ;; This could happen for example, when Tramp ;; tries to open the same connection twice in a ;; short time frame. + ;; In both cases, we try the default handler then. (setq result - (catch 'suppress (apply foreign operation args))) - (if (eq result 'suppress) - (let (tramp-message-show-message) - (tramp-message - v 1 "Suppress received in operation %s" - (append (list operation) args)) - (tramp-cleanup v) - (tramp-run-real-handler operation args)) - result)) + (catch 'non-essential + (catch 'suppress + (apply foreign operation args)))) + (cond + ((eq result 'non-essential) + (tramp-message + v 5 "Non-essential received in operation %s" + (append (list operation) args)) + (tramp-run-real-handler operation args)) + ((eq result 'suppress) + (let (tramp-message-show-message) + (tramp-message + v 1 "Suppress received in operation %s" + (append (list operation) args)) + (tramp-cleanup v) + (tramp-run-real-handler operation args))) + (t result))) ;; Trace that somebody has interrupted the operation. ((debug quit) -- 2.11.4.GIT