* 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.
This commit is contained in:
Michael Albinus 2012-06-17 20:54:39 +02:00
parent ddfbf826bc
commit 298551496f
5 changed files with 46 additions and 12 deletions

View file

@ -1,3 +1,13 @@
2012-06-17 Michael Albinus <michael.albinus@gmx.de>
* 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 <rudalics@gmx.at>
* window.el (special-display-p): Signal an error if BUFFER-NAME

View file

@ -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))

View file

@ -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)))

View file

@ -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)))

View file

@ -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)