+2005-05-14 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.49.
+
+ * tramp.el (tramp-handle-dired-call-process)
+ (tramp-handle-insert-directory):`insert-buffer' cannot be used
+ because the contents of the Tramp buffer is changed before
+ insertion (`expand-file' and alike).
+ (tramp-handle-insert-directory): If `localname' has an empty
+ nondirectory name, it must not be quoted.
+ (tramp-pre-connection): Add parameter CHUNKSIZE. Make local
+ variable `tramp-chunksize'. Change callees.
+ (tramp-open-connection-setup-interactive-shell): Check remote host
+ for buggy `send-process-string' implementation. Set
+ `tramp-chunksize' if found. Reported by Michael Kifer
+ <kifer@cs.sunysb.edu> (and a lot of other people all the years).
+ (tramp-handle-shell-command): `insert-buffer' cannot be used
+ because the contents of the Tramp buffer is changed before
+ insertion (`expand-file' and alike). Reported by Frédéric Bothamy
+ <frederic.bothamy@free.fr>.
+ (tramp-set-auto-save): Actions should be done for Tramp file name
+ handler only. Ange-FTP has its own auto-save mechanism. Reported
+ by Richard G. Bielawski <Richard.G.Bielawski@wellsfargo.com>.
+ (tramp-set-auto-save-file-modes): Set file modes of
+ `buffer-auto-save-file-name' to ?\600 as fallback solution.
+ Reported by Ferenc Wagner <wferi@tba.elte.hu>.
+ (tramp-bug): Remove obsolete variable.
+ (tramp-append-tramp-buffers): Rewrite partly. More suitable check
+ for presence of `mml-mode'. Make it running for older Emacsen as
+ well.
+
2005-05-14 John Paul Wallington <jpw@pobox.com>
- * ibuf-ext.el (define-ibuffer-filter filename):
+ * ibuf-ext.el (define-ibuffer-filter filename):
If `dired-directory' is a list, use its car.
2005-05-14 Daniel Brockman <daniel@brockman.se> (tiny change)
* mail/supercite.el (sc-cite-frame-alist, sc-uncite-frame-alist)
(sc-recite-frame-alist, sc-default-cite-frame)
(sc-default-uncite-frame, sc-default-recite-frame)
- (sc-attrib-selection-list, sc-rewrite-header-list):
+ (sc-attrib-selection-list, sc-rewrite-header-list):
Mark as risky-local-variable.
* international/ogonek.el (ogonek-jak, ogonek-how):
;; Chunked sending kluge. We set this to 500 for black-listed constellations
;; known to have a bug in `process-send-string'; some ssh connections appear
-;; to drop bytes when data is sent too quickly.
+;; to drop bytes when data is sent too quickly. There is also a connection
+;; buffer local variable, which is computed depending on remote host properties
+;; when `tramp-chunksize' is zero or nil.
(defcustom tramp-chunksize
(when (and (not (featurep 'xemacs))
(memq system-type '(hpux)))
(mapconcat #'tramp-shell-quote-argument (cons program arguments) " "))
(tramp-wait-for-output))
(unless discard
- (insert-buffer (tramp-get-buffer multi-method method user host)))
+ ;; We cannot use `insert-buffer' because the tramp buffer
+ ;; changes its contents before insertion due to calling
+ ;; `expand-file' and alike.
+ (insert
+ (with-current-buffer
+ (tramp-get-buffer multi-method method user host)
+ (buffer-string))))
(save-excursion
(prog1
(tramp-send-command-and-check multi-method method user host nil)
switches
(if wildcard
localname
- (tramp-shell-quote-argument
- (file-name-nondirectory localname))))))
+ (if (zerop (length (file-name-nondirectory localname)))
+ ""
+ (tramp-shell-quote-argument
+ (file-name-nondirectory localname)))))))
(sit-for 1) ;needed for rsh but not ssh?
(tramp-wait-for-output))
;; The following let-binding is used by code that's commented
;; that the commented-out code is really not needed. Commenting-out
;; happened on 2003-03-13.
(let ((old-pos (point)))
- (insert-buffer-substring
- (tramp-get-buffer multi-method method user host))
+ ;; We cannot use `insert-buffer' because the tramp buffer
+ ;; changes its contents before insertion due to calling
+ ;; `expand-file' and alike.
+ (insert
+ (with-current-buffer
+ (tramp-get-buffer multi-method method user host)
+ (buffer-string)))
;; On XEmacs, we want to call (exchange-point-and-mark t), but
;; that doesn't exist on Emacs, so we use this workaround instead.
;; Since zmacs-region-stays doesn't exist in Emacs, this ought to
(unless asynchronous
(tramp-wait-for-output)))
(unless asynchronous
- (insert-buffer (tramp-get-buffer multi-method method user host)))
+ ;; We cannot use `insert-buffer' because the tramp buffer
+ ;; changes its contents before insertion due to calling
+ ;; `expand-file' and alike.
+ (insert
+ (with-current-buffer
+ (tramp-get-buffer multi-method method user host)
+ (buffer-string))))
(when error-buffer
(save-excursion
(unless (bufferp error-buffer)
"cat /tmp/tramp.$$.err")
(tramp-wait-for-output)
(set-buffer error-buffer)
- (insert-buffer (tramp-get-buffer multi-method method user host))
+ ;; Same comment as above
+ (insert
+ (with-current-buffer
+ (tramp-get-buffer multi-method method user host)
+ (buffer-string)))
(tramp-send-command-and-check
multi-method method user host "rm -f /tmp/tramp.$$.err")))
(save-excursion
(defun tramp-set-auto-save ()
(when (and (buffer-file-name)
(tramp-tramp-file-p (buffer-file-name))
+ ;; ange-ftp has its own auto-save mechanism
+ (eq (tramp-find-foreign-file-name-handler (buffer-file-name))
+ 'tramp-sh-file-name-handler)
auto-save-default)
(auto-save-mode 1)))
(add-hook 'find-file-hooks 'tramp-set-auto-save t)
method))
(when multi-method
(error "Cannot multi-connect using telnet connection method"))
- (tramp-pre-connection multi-method method user host)
+ (tramp-pre-connection multi-method method user host tramp-chunksize)
(tramp-message 7 "Opening connection for %s@%s using %s..."
(or user (user-login-name)) host method)
(let ((process-environment (copy-sequence process-environment)))
(save-match-data
(when multi-method
(error "Cannot multi-connect using rsh connection method"))
- (tramp-pre-connection multi-method method user host)
+ (tramp-pre-connection multi-method method user host tramp-chunksize)
(if (and user (not (string= user "")))
(tramp-message 7 "Opening connection for %s@%s using %s..."
user host method)
(error
"Cannot connect to different host `%s' with `su' connection method"
host))
- (tramp-pre-connection multi-method method user host)
+ (tramp-pre-connection multi-method method user host tramp-chunksize)
(tramp-message 7 "Opening connection for `%s' using `%s'..."
(or user "<root>") method)
(let ((process-environment (copy-sequence process-environment)))
(unless (and (= (length method) (length user))
(= (length method) (length host)))
(error "Arrays METHOD, USER, HOST must have equal length"))
- (tramp-pre-connection multi-method method user host)
+ (tramp-pre-connection multi-method method user host tramp-chunksize)
(tramp-message 7 "Opening `%s' connection..." multi-method)
(let ((process-environment (copy-sequence process-environment)))
(setenv "TERM" tramp-terminal-type)
;; HHH: Not Changed. This might handle the case where USER is not
;; given in the "File name" very poorly. Then, the local
;; variable tramp-current-user will be set to nil.
-(defun tramp-pre-connection (multi-method method user host)
+(defun tramp-pre-connection (multi-method method user host chunksize)
"Do some setup before actually logging in.
METHOD, USER and HOST specify the connection."
(set-buffer (tramp-get-buffer multi-method method user host))
(set (make-local-variable 'tramp-current-method) method)
(set (make-local-variable 'tramp-current-user) user)
(set (make-local-variable 'tramp-current-host) host)
+ (set (make-local-variable 'tramp-chunksize) chunksize)
(set (make-local-variable 'inhibit-eol-conversion) nil)
(erase-buffer))
(erase-buffer)
(tramp-send-command-internal multi-method method user host
"TERM=dumb; export TERM")
+ (erase-buffer)
+ ;; Check whether the remote host suffers from buggy `send-process-string'.
+ ;; This is known for FreeBSD (see comment in `send_process', file process.c).
+ ;; I've tested sending 624 bytes successfully, sending 625 bytes failed.
+ ;; Emacs makes a hack when this host type is detected locally. It cannot
+ ;; handle remote hosts, though.
+ (when (or (not tramp-chunksize) (zerop tramp-chunksize))
+ (tramp-message 9 "Checking remote host type for `send-process-string' bug")
+ (tramp-send-command-internal multi-method method user host
+ "(uname -sr) 2>/dev/null")
+ (goto-char (point-min))
+ (when (looking-at "FreeBSD")
+ (setq tramp-chunksize 500)))
+
;; Try to set up the coding system correctly.
;; CCC this can't be the right way to do it. Hm.
(save-excursion
;; Permissions should be set always, because there might be an old
;; auto-saved file belonging to another original file. This could
;; be a security threat.
- (set-file-modes buffer-auto-save-file-name (file-modes bfn)))))
+ (set-file-modes buffer-auto-save-file-name
+ (or (file-modes bfn) ?\600)))))
(unless (or (> emacs-major-version 21)
(and (featurep 'xemacs)
tramp-yesno-prompt-regexp
tramp-yn-prompt-regexp
tramp-terminal-prompt-regexp
- tramp-out-of-band-prompt-regexp
tramp-temp-name-prefix
tramp-file-name-structure
tramp-file-name-regexp
(defun tramp-append-tramp-buffers ()
"Append Tramp buffers into the bug report."
- ;; We load mml.el from Gnus.
+ ;; We load message.el and mml.el from Gnus.
(if (featurep 'xemacs)
- (load "mml" 'noerror)
+ (progn
+ (load "message" 'noerror)
+ (load "mml" 'noerror))
+ (require 'message nil 'noerror)
(require 'mml nil 'noerror))
+ (when (functionp 'message-mode)
+ (funcall 'message-mode))
+ (when (functionp 'mml-mode)
+ (funcall 'mml-mode t))
(when (and
- ;; We don't want to add another dependency.
- (functionp 'mml-insert-empty-tag)
- ;; 2nd parameter since Emacs 22.
- (condition-case nil
- (list-buffers-noselect nil nil)
- (t nil)))
- (let ((buffer-list
- (delq nil
- (mapcar '(lambda (b)
- (when (string-match "^\\*\\(debug \\)?tramp/" (buffer-name b)) b))
- (buffer-list))))
- (curbuf (current-buffer)))
+ (eq major-mode 'message-mode)
+ (boundp 'mml-mode)
+ (symbol-value 'mml-mode))
+
+ (let* ((tramp-buf-regexp "\\*\\(debug \\)?tramp/")
+ (buffer-list
+ (delq nil
+ (mapcar '(lambda (b)
+ (when (string-match tramp-buf-regexp (buffer-name b)) b))
+ (buffer-list))))
+ (curbuf (current-buffer)))
;; There is at least one Tramp buffer.
(when buffer-list
- (switch-to-buffer (list-buffers-noselect nil buffer-list))
+ (switch-to-buffer (list-buffers-noselect nil))
(delete-other-windows)
(setq buffer-read-only nil)
- (goto-char (point-max))
+ (goto-char (point-min))
+ (while (not (eobp))
+ (if (re-search-forward tramp-buf-regexp (tramp-point-at-eol) t)
+ (forward-line 1)
+ (forward-line 0)
+ (let ((start (point)))
+ (forward-line 1)
+ (kill-region start (point)))))
(insert "
The buffer(s) above will be appended to this message. If you don't want
to append a buffer because it contains sensible data, or because the buffer