changeset 107870:973ae1d72536

* net/tramp.el (tramp-error-with-buffer): Don't show the connection buffer when we are in completion mode. (tramp-file-name-handler): Catch the error for some operations when we are in completion mode. This gives the user the chance to correct the file name in the minibuffer.
author Michael Albinus <albinus@detlef>
date Fri, 16 Apr 2010 00:19:01 +0200
parents 852124e6110f
children d7b161b7a686 56ac0739b76d
files lisp/ChangeLog lisp/net/tramp.el
diffstat 2 files changed, 33 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Thu Apr 15 14:52:27 2010 -0700
+++ b/lisp/ChangeLog	Fri Apr 16 00:19:01 2010 +0200
@@ -1,3 +1,11 @@
+2010-04-15  Michael Albinus  <michael.albinus@gmx.de>
+
+	* net/tramp.el (tramp-error-with-buffer): Don't show the
+	connection buffer when we are in completion mode.
+	(tramp-file-name-handler): Catch the error for some operations
+	when we are in completion mode.  This gives the user the chance to
+	correct the file name in the minibuffer.
+
 2010-04-15  Glenn Morris  <rgm@gnu.org>
 
 	* progmodes/verilog-mode.el (verilog-forward-sexp): Avoid free variable.
--- a/lisp/net/tramp.el	Thu Apr 15 14:52:27 2010 -0700
+++ b/lisp/net/tramp.el	Fri Apr 16 00:19:01 2010 +0200
@@ -2170,7 +2170,9 @@
   (save-window-excursion
     (unwind-protect
 	(apply 'tramp-error vec-or-proc signal fmt-string args)
-      (when (and vec-or-proc (not (zerop tramp-verbose)))
+      (when (and vec-or-proc
+		 (not (zerop tramp-verbose))
+		 (not (tramp-completion-mode-p)))
 	(let ((enable-recursive-minibuffers t))
 	  (pop-to-buffer
 	   (or (and (bufferp buffer) buffer)
@@ -5425,19 +5427,28 @@
 	       (completion (tramp-completion-mode-p))
 	       (foreign (tramp-find-foreign-file-name-handler filename)))
 	  (with-parsed-tramp-file-name filename nil
-	    (cond
-	     ;; When we are in completion mode, some operations
-	     ;; shouldn't be handled by backend.
-	     ((and completion (zerop (length localname))
-		   (memq operation '(file-exists-p file-directory-p)))
-	      t)
-	     ((and completion (zerop (length localname))
-		   (memq operation '(file-name-as-directory)))
-	      filename)
-	     ;; Call the backend function.
-	     (foreign (apply foreign operation args))
-	     ;; Nothing to do for us.
-	     (t (tramp-run-real-handler operation args))))))
+	    ;; Call the backend function.
+	    (if foreign
+		(condition-case err
+		    (apply foreign operation args)
+		  (error
+		   (cond
+		    ;; When we are in completion mode, some failed
+		    ;; operations shall return at least a default
+		    ;; value in order to give the user a chance to
+		    ;; correct the file name in the minibuffer.
+		    ((and completion (zerop (length localname))
+			  (memq operation '(file-exists-p file-directory-p)))
+		     t)
+		    ((and completion (zerop (length localname))
+			  (memq operation
+				'(expand-file-name file-name-as-directory)))
+		     filename)
+		    ;; Propagate the error.
+		    (t (signal (car err) (cdr err))))))
+	      ;; Nothing to do for us.
+	      (tramp-run-real-handler operation args)))))
+
     ;; When `tramp-mode' is not enabled, we don't do anything.
     (tramp-run-real-handler operation args)))