# HG changeset patch # User Michael Albinus # Date 1287648323 -7200 # Node ID 15b14005a6f25fc5ab0b6735c9fbf7cd032c01da # Parent 647c0a15da320e7a81c4504d4f1f60e3c63434ac * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use space in stat format string. (tramp-send-command): Unset $PS1 when using here documents, in order not to get several prompts. (tramp-get-inline-coding): Return `nil' in case of errors. diff -r 647c0a15da32 -r 15b14005a6f2 lisp/ChangeLog --- a/lisp/ChangeLog Thu Oct 21 05:36:36 2010 +0000 +++ b/lisp/ChangeLog Thu Oct 21 10:05:23 2010 +0200 @@ -1,3 +1,11 @@ +010-10-21 Michael Albinus + + * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use + space in stat format string. + (tramp-send-command): Unset $PS1 when using here documents, in + order not to get several prompts. + (tramp-get-inline-coding): Return `nil' in case of errors. + 2010-10-21 Daiki Ueno * hexl.el (hexl-mode, hexl-mode-exit): Tweak diff -r 647c0a15da32 -r 15b14005a6f2 lisp/net/tramp-sh.el --- a/lisp/net/tramp-sh.el Thu Oct 21 05:36:36 2010 +0000 +++ b/lisp/net/tramp-sh.el Thu Oct 21 10:05:23 2010 +0200 @@ -67,7 +67,7 @@ :group 'tramp :type 'string) -;; ksh on OpenBSD 4.5 requires, that PS1 contains a `#' character for +;; ksh on OpenBSD 4.5 requires, that $PS1 contains a `#' character for ;; root users. It uses the `$' character for other users. In order ;; to guarantee a proper prompt, we use "#$" for the prompt. @@ -1241,7 +1241,7 @@ (format ;; On Opsware, pdksh (which is the true name of ksh there) doesn't ;; parse correctly the sequence "((". Therefore, we add a space. - "( (%s %s || %s -h %s) && %s -c '( (\"%%N\") %%h %s %s %%Xe0 %%Ye0 %%Ze0 %%se0 \"%%A\" t %%ie0 -1)' %s || echo nil)" + "( (%s %s || %s -h %s) && %s -c '((\"%%N\") %%h %s %s %%Xe0 %%Ye0 %%Ze0 %%se0 \"%%A\" t %%ie0 -1)' %s || echo nil)" (tramp-get-file-exists-command vec) (tramp-shell-quote-argument localname) (tramp-get-test-command vec) @@ -4359,6 +4359,11 @@ ;; We mark the command string that it can be erased in the output buffer. (tramp-set-connection-property p "check-remote-echo" t) (setq command (format "%s%s%s" tramp-echo-mark command tramp-echo-mark))) + (when (string-match "<<'EOF'" command) + ;; Unset $PS1 when using here documents, in order not to get + ;; several prompts. + (setq command (concat "(PS1= ; " command "\n)"))) + ;; Send the command. (tramp-message vec 6 "%s" command) (tramp-send-string vec command) (unless nooutput (tramp-wait-for-output p)))) @@ -4897,54 +4902,57 @@ Otherwise, either a string is returned which contains a `%s' mark to be used for the respective input or output file; or a Lisp function cell is returned to be applied on a buffer." - (let ((coding - (with-connection-property vec prop - (tramp-find-inline-encoding vec) - (tramp-get-connection-property vec prop nil))) - (prop1 (if (string-match "encoding" prop) - "inline-compress" "inline-decompress")) - compress) - ;; The connection property might have been cached. So we must send - ;; the script to the remote side - maybe. - (when (and coding (symbolp coding) (string-match "remote" prop)) - (let ((name (symbol-name coding))) - (while (string-match (regexp-quote "-") name) - (setq name (replace-match "_" nil t name))) - (tramp-maybe-send-script vec (symbol-value coding) name) - (setq coding name))) - (when coding - ;; Check for the `compress' command. - (setq compress (tramp-get-inline-compress vec prop1 size)) - ;; Return the value. - (cond - ((and compress (symbolp coding)) - (if (string-match "decompress" prop1) + ;; We must catch the errors, because we want to return `nil', when + ;; no inline coding is found. + (ignore-errors + (let ((coding + (with-connection-property vec prop + (tramp-find-inline-encoding vec) + (tramp-get-connection-property vec prop nil))) + (prop1 (if (string-match "encoding" prop) + "inline-compress" "inline-decompress")) + compress) + ;; The connection property might have been cached. So we must + ;; send the script to the remote side - maybe. + (when (and coding (symbolp coding) (string-match "remote" prop)) + (let ((name (symbol-name coding))) + (while (string-match (regexp-quote "-") name) + (setq name (replace-match "_" nil t name))) + (tramp-maybe-send-script vec (symbol-value coding) name) + (setq coding name))) + (when coding + ;; Check for the `compress' command. + (setq compress (tramp-get-inline-compress vec prop1 size)) + ;; Return the value. + (cond + ((and compress (symbolp coding)) + (if (string-match "decompress" prop1) + `(lambda (beg end) + (,coding beg end) + (let ((coding-system-for-write 'binary) + (coding-system-for-read 'binary)) + (apply + 'call-process-region (point-min) (point-max) + (car (split-string ,compress)) t t nil + (cdr (split-string ,compress))))) `(lambda (beg end) - (,coding beg end) (let ((coding-system-for-write 'binary) (coding-system-for-read 'binary)) (apply - 'call-process-region (point-min) (point-max) + 'call-process-region beg end (car (split-string ,compress)) t t nil - (cdr (split-string ,compress))))) - `(lambda (beg end) - (let ((coding-system-for-write 'binary) - (coding-system-for-read 'binary)) - (apply - 'call-process-region beg end - (car (split-string ,compress)) t t nil - (cdr (split-string ,compress)))) - (,coding (point-min) (point-max))))) - ((symbolp coding) - coding) - ((and compress (string-match "decoding" prop)) - (format "(%s | %s >%%s)" coding compress)) - (compress - (format "(%s <%%s | %s)" compress coding)) - ((string-match "decoding" prop) - (format "%s >%%s" coding)) - (t - (format "%s <%%s" coding)))))) + (cdr (split-string ,compress)))) + (,coding (point-min) (point-max))))) + ((symbolp coding) + coding) + ((and compress (string-match "decoding" prop)) + (format "(%s | %s >%%s)" coding compress)) + (compress + (format "(%s <%%s | %s)" compress coding)) + ((string-match "decoding" prop) + (format "%s >%%s" coding)) + (t + (format "%s <%%s" coding))))))) ;;; Integration of eshell.el: