@trampfn{ssh@value{postfixhop}user2@@host2|docker,name,}
@end example
+If you use the shortened name @samp{@trampfn{docker,name,}}, the last
+used proxy definition is expanded for.
+
@node Home directories
@section Expanding @file{~} to home directory
v 'file-error "Cannot apply multibyte command `%s'" command))
(with-tramp-saved-connection-properties
- v '("process-name" "process-buffer")
+ v '(" process-name" " process-buffer")
;; Set the new process properties.
- (tramp-set-connection-property v "process-name" name)
- (tramp-set-connection-property v "process-buffer" buffer)
+ (tramp-set-connection-property v " process-name" name)
+ (tramp-set-connection-property v " process-buffer" buffer)
(with-current-buffer (tramp-get-connection-buffer v)
(unwind-protect
;; We catch this event. Otherwise, `make-process'
;; We must flush them here already;
;; otherwise `rename-file', `delete-file'
;; or `insert-file-contents' will fail.
- (tramp-flush-connection-property v "process-name")
- (tramp-flush-connection-property v "process-buffer")
+ (tramp-flush-connection-property v " process-name")
+ (tramp-flush-connection-property v " process-buffer")
;; Copy tmpstderr file.
(when (and (stringp stderr)
(not (tramp-tramp-file-p stderr)))
(with-tramp-debug-message vec "Opening connection"
(let ((p (tramp-get-connection-process vec))
- (process-name (tramp-get-connection-property vec "process-name"))
+ (process-name (tramp-get-connection-property vec " process-name"))
(process-environment (copy-sequence process-environment)))
;; Open a new connection.
(condition-case err
;; Some properties are handled special:
;;
-;; - "process-name", "process-buffer" and "first-password-request" are
+;; - Properties which start with a space, like " process-name", are
;; not saved in the file `tramp-persistency-file-name', although
;; being connection properties related to a `tramp-file-name'
;; structure.
(lambda (key)
(and (tramp-file-name-p key)
(null (tramp-file-name-localname key))
- (tramp-connection-property-p key "process-buffer")
+ (tramp-connection-property-p key " process-buffer")
key))
(hash-table-keys tramp-cache-data))))
(not (tramp-file-name-localname key))
(not (gethash "login-as" value))
(not (gethash "started" value)))
- (progn
- (remhash "process-name" value)
- (remhash "process-buffer" value)
- (remhash "first-password-request" value))
+ (dolist (k (hash-table-keys value))
+ (when (string-prefix-p " " k)
+ (remhash k value)))
(remhash key cache)))
cache)
;; Dump it.
(get-buffer (tramp-debug-buffer-name vec)))
(unless keep-debug
(get-buffer (tramp-trace-buffer-name vec)))
- (tramp-get-connection-property vec "process-buffer")))
+ (tramp-get-connection-property vec " process-buffer")))
(when (bufferp buf) (kill-buffer buf)))
;; Flush file cache.
(tramp-compat-make-temp-file " .nocrypt" 'dir-flag))))
;; Enable `auth-source', unless "emacs -Q" has been called.
(tramp-set-connection-property
- vec "first-password-request" tramp-cache-read-persistent-data)
+ vec " first-password-request" tramp-cache-read-persistent-data)
(with-temp-buffer
(insert
(tramp-read-passwd
(args (delq nil args)))
;; Enable `auth-source', unless "emacs -Q" has been called.
(tramp-set-connection-property
- vec "first-password-request" tramp-cache-read-persistent-data)
+ vec " first-password-request" tramp-cache-read-persistent-data)
(insert
(tramp-read-passwd
(tramp-get-connection-process vec)
(setq domain (read-string "Domain name: ")))
(tramp-message l 6 "%S %S %S %d" message user domain flags)
- (unless (tramp-get-connection-property l "first-password-request")
+ (unless (tramp-get-connection-property l " first-password-request")
(tramp-clear-passwd l))
(setq password (tramp-read-passwd
;; Enable `auth-source'.
(tramp-set-connection-property
- vec "first-password-request" tramp-cache-read-persistent-data)
+ vec " first-password-request" tramp-cache-read-persistent-data)
;; There will be a callback of "askPassword" when a password is needed.
(dbus-register-method
(with-temp-buffer
(unwind-protect
(with-tramp-saved-connection-properties
- v '("process-name" "process-buffer")
+ v '(" process-name" " process-buffer")
;; The default directory must be remote.
(let ((default-directory
(file-name-directory (if v1 filename newname)))
(process-environment (copy-sequence process-environment)))
;; Set the transfer process properties.
(tramp-set-connection-property
- v "process-name" (buffer-name (current-buffer)))
+ v " process-name" (buffer-name (current-buffer)))
(tramp-set-connection-property
- v "process-buffer" (current-buffer))
+ v " process-buffer" (current-buffer))
(when copy-env
(tramp-message
v 6 "%s=\"%s\""
:file-handler t))
(with-tramp-saved-connection-properties
- v '("process-name" "process-buffer")
+ v '(" process-name" " process-buffer")
;; Set the new process properties.
- (tramp-set-connection-property v "process-name" name)
- (tramp-set-connection-property v "process-buffer" buffer)
+ (tramp-set-connection-property v " process-name" name)
+ (tramp-set-connection-property v " process-buffer" buffer)
(with-current-buffer (tramp-get-connection-buffer v)
(unwind-protect
;; We catch this event. Otherwise, `make-process'
(set-marker (process-mark p) (point)))
;; We must flush them here already; otherwise
;; `delete-file' will fail.
- (tramp-flush-connection-property v "process-name")
- (tramp-flush-connection-property v "process-buffer")
+ (tramp-flush-connection-property v " process-name")
+ (tramp-flush-connection-property v " process-buffer")
;; Kill stderr process and delete named pipe.
(when (bufferp stderr)
(add-function
(defun tramp-find-shell (vec)
"Open a shell on the remote host which groks tilde expansion."
;; If we are in `make-process', we don't need another shell.
- (unless (tramp-get-connection-property vec "process-name")
+ (unless (tramp-get-connection-property vec " process-name")
(with-current-buffer (tramp-get-buffer vec)
(let ((default-shell (tramp-get-method-parameter vec 'tramp-remote-shell))
shell)
(let* ((old-uname (tramp-get-connection-property vec "uname"))
(uname
;; If we are in `make-process', we don't need to recompute.
- (if (and old-uname (tramp-get-connection-property vec "process-name"))
+ (if (and old-uname (tramp-get-connection-property vec " process-name"))
old-uname
(tramp-set-connection-property
vec "uname"
(and config-check-function
;; If we are in `make-process', we don't need to recompute.
(if (and old-config-check
- (tramp-get-connection-property vec "process-name"))
+ (tramp-get-connection-property vec " process-name"))
old-config-check
(tramp-set-connection-property
vec "config-check-data"
(with-tramp-debug-message vec "Opening connection"
(let ((p (tramp-get-connection-process vec))
- (process-name (tramp-get-connection-property vec "process-name"))
+ (process-name (tramp-get-connection-property vec " process-name"))
(process-environment (copy-sequence process-environment))
(pos (with-current-buffer (tramp-get-connection-buffer vec) (point))))
(unwind-protect
(with-tramp-saved-connection-properties
- v '("process-name" "process-buffer")
+ v '(" process-name" " process-buffer")
(with-temp-buffer
;; Set the transfer process properties.
(tramp-set-connection-property
- v "process-name" (buffer-name (current-buffer)))
+ v " process-name" (buffer-name (current-buffer)))
(tramp-set-connection-property
- v "process-buffer" (current-buffer))
+ v " process-buffer" (current-buffer))
(when t1
;; The smbclient tar command creates
(concat "2>" (tramp-get-remote-null-device v)))))
(with-tramp-saved-connection-properties
- v '("process-name" "process-buffer")
+ v '(" process-name" " process-buffer")
(with-temp-buffer
;; Set the transfer process properties.
(tramp-set-connection-property
- v "process-name" (buffer-name (current-buffer)))
+ v " process-name" (buffer-name (current-buffer)))
(tramp-set-connection-property
- v "process-buffer" (current-buffer))
+ v " process-buffer" (current-buffer))
;; Use an asynchronous process. By this, password
;; can be handled.
;; Call it.
(condition-case nil
(with-tramp-saved-connection-properties
- v '("process-name" "process-buffer")
+ v '(" process-name" " process-buffer")
;; Set the new process properties.
- (tramp-set-connection-property v "process-name" name1)
+ (tramp-set-connection-property v " process-name" name1)
(tramp-set-connection-property
- v "process-buffer"
+ v " process-buffer"
(or outbuf (generate-new-buffer tramp-temp-buffer-name)))
(with-current-buffer (tramp-get-connection-buffer v)
;; Preserve buffer contents.
;; Cleanup. We remove all file cache values for the connection,
;; because the remote process could have changed them.
(when tmpinput (delete-file tmpinput))
- ;; FIXME: Does connection-property "process-buffer" still exist?
+ ;; FIXME: Does connection-property " process-buffer" still exist?
(unless outbuf
- (kill-buffer (tramp-get-connection-property v "process-buffer")))
+ (kill-buffer (tramp-get-connection-property v " process-buffer")))
(when process-file-side-effects
(tramp-flush-directory-properties v "/"))
"||" "echo" "tramp_exit_status" "1")))
(with-tramp-saved-connection-properties
- v '("process-name" "process-buffer")
+ v '(" process-name" " process-buffer")
(with-temp-buffer
;; Set the transfer process properties.
(tramp-set-connection-property
- v "process-name" (buffer-name (current-buffer)))
+ v " process-name" (buffer-name (current-buffer)))
(tramp-set-connection-property
- v "process-buffer" (current-buffer))
+ v " process-buffer" (current-buffer))
;; Use an asynchronous process. By this, password
;; can be handled.
p)
(unwind-protect
(with-tramp-saved-connection-properties
- v '("process-name" "process-buffer")
+ v '(" process-name" " process-buffer")
(save-excursion
(save-restriction
(while (get-process name1)
(setq i (1+ i)
name1 (format "%s<%d>" name i)))
;; Set the new process properties.
- (tramp-set-connection-property v "process-name" name1)
- (tramp-set-connection-property v "process-buffer" buffer)
+ (tramp-set-connection-property v " process-name" name1)
+ (tramp-set-connection-property v " process-buffer" buffer)
;; Activate narrowing in order to save BUFFER contents.
(with-current-buffer (tramp-get-connection-buffer v)
(let ((buffer-undo-list t))
(or (get-buffer (tramp-buffer-name vec))
(unless dont-create
(with-current-buffer (get-buffer-create (tramp-buffer-name vec))
- ;; We use the existence of connection property "process-buffer"
+ ;; We use the existence of connection property " process-buffer"
;; as indication, whether a connection is active.
(tramp-set-connection-property
- vec "process-buffer"
- (tramp-get-connection-property vec "process-buffer"))
+ vec " process-buffer"
+ (tramp-get-connection-property vec " process-buffer"))
(setq buffer-undo-list t
default-directory
(tramp-make-tramp-file-name vec 'noloc))
Unless DONT-CREATE, the buffer is created when it doesn't exist yet.
In case a second asynchronous communication has been started, it is different
from `tramp-get-buffer'."
- (or (tramp-get-connection-property vec "process-buffer")
+ (or (tramp-get-connection-property vec " process-buffer")
(tramp-get-buffer vec dont-create)))
(defun tramp-get-connection-name (vec)
"Get the connection name to be used for VEC.
In case a second asynchronous communication has been started, it is different
from the default one."
- (or (tramp-get-connection-property vec "process-name")
+ (or (tramp-get-connection-property vec " process-name")
(tramp-buffer-name vec)))
(defun tramp-get-unique-process-name (name)
(with-tramp-debug-message
v (format "Running `%S'" (cons operation args))
;; We flush connection properties
- ;; "process-name" and "process-buffer",
+ ;; " process-name" and " process-buffer",
;; because the operations shall be applied
;; in the main connection process. In order
;; to avoid superfluous debug buffers during
;; a short time frame.
;; In both cases, we try the default handler then.
(with-tramp-saved-connection-properties
- v '("process-name" "process-buffer")
+ v '(" process-name" " process-buffer")
(let ((tramp-verbose
(if minibuffer-completing-file-name
0 tramp-verbose)))
- (tramp-flush-connection-property v "process-name")
- (tramp-flush-connection-property v "process-buffer"))
+ (tramp-flush-connection-property v " process-name")
+ (tramp-flush-connection-property v " process-buffer"))
(setq result
(catch 'non-essential
(catch 'suppress
;; Sometimes, the process returns a new password request
;; immediately after rejecting the previous (wrong) one.
(unless (or tramp-password-prompt-not-unique
- (tramp-get-connection-property vec "first-password-request"))
+ (tramp-get-connection-property vec " first-password-request"))
(tramp-clear-passwd vec))
(goto-char (point-min))
(tramp-check-for-regexp proc tramp-process-action-regexp)
(tramp-set-connection-property
(tramp-get-connection-property
proc "password-vector" (process-get proc 'tramp-vector))
- "first-password-request" tramp-cache-read-persistent-data)
+ " first-password-request" tramp-cache-read-persistent-data)
(save-restriction
(with-tramp-progress-reporter
proc 3 "Waiting for prompts from remote shell"
;; See if auth-sources contains something useful.
(ignore-errors
(and auth-sources
- (tramp-get-connection-property vec "first-password-request")
+ (tramp-get-connection-property vec " first-password-request")
;; Try with Tramp's current method. If there is no
;; user name, `:create' triggers to ask for. We
;; suppress it.
(lambda () (password-cache-add key auth-passwd)))
auth-passwd))
- (tramp-set-connection-property vec "first-password-request" nil))))
+ (tramp-set-connection-property vec " first-password-request" nil))))
(defun tramp-read-passwd-without-cache (proc &optional prompt)
"Read a password from user (compat function)."