Mercurial > emacs
diff lisp/net/tramp.el @ 108377:7827d5a5c826
* net/tramp-compat.el (byte-compile-not-obsolete-vars): Define if
not bound.
(tramp-compat-copy-file): Add PRESERVE-SELINUX-CONTEXT.
(tramp-compat-funcall): New defmacro.
(tramp-compat-line-beginning-position)
(tramp-compat-line-end-position)
(tramp-compat-temporary-file-directory)
(tramp-compat-make-temp-file, tramp-compat-file-attributes)
(tramp-compat-copy-file, tramp-compat-copy-directory)
(tramp-compat-delete-file, tramp-compat-delete-directory)
(tramp-compat-number-sequence, tramp-compat-process-running-p)
* net/tramp.el (top, with-progress-reporter)
(tramp-rfn-eshadow-setup-minibuffer)
(tramp-rfn-eshadow-update-overlay, tramp-handle-set-file-times)
(tramp-handle-dired-compress-file, tramp-handle-shell-command)
(tramp-completion-mode-p, tramp-check-for-regexp)
(tramp-open-connection-setup-interactive-shell)
(tramp-compute-multi-hops, tramp-read-passwd, tramp-clear-passwd)
(tramp-time-diff, tramp-coding-system-change-eol-conversion)
(tramp-set-process-query-on-exit-flag, tramp-unload-tramp)
* net/tramp-cmds.el (tramp-cleanup-all-connections)
(tramp-reporter-dump-variable, tramp-load-report-modules)
(tramp-append-tramp-buffers)
* net/tramp-gvfs.el (tramp-gvfs-handle-file-selinux-context): Use it.
* net/tramp-imap.el (top): Autoload `epg-make-context'.
author | Michael Albinus <albinus@detlef> |
---|---|
date | Sun, 09 May 2010 21:57:55 +0200 |
parents | 96984953f99e |
children | acaefbe07157 |
line wrap: on
line diff
--- a/lisp/net/tramp.el Sat May 08 16:51:08 2010 -0400 +++ b/lisp/net/tramp.el Sun May 09 21:57:55 2010 +0200 @@ -145,8 +145,7 @@ ;; this would load dbus.el. (when (and (featurep 'dbusbind) (condition-case nil - (funcall (symbol-function 'dbus-get-unique-name) - :session) + (tramp-compat-funcall 'dbus-get-unique-name :session) (error nil)) (tramp-compat-process-running-p "gvfs-fuse-daemon")) 'tramp-gvfs) @@ -2274,14 +2273,14 @@ ;; introduced in Emacs 24.1. (when (<= ,level tramp-verbose) (condition-case nil - (setq pr (funcall (symbol-function 'make-progress-reporter) ,message) - tm (run-at-time 3 0.1 'progress-reporter-update pr)) + (setq pr (tramp-compat-funcall 'make-progress-reporter ,message) + tm (if pr (run-at-time 3 0.1 'progress-reporter-update pr))) (error nil))) (unwind-protect ;; Execute the body. (progn ,@body) ;; Stop progress reporter. - (if tm (cancel-timer tm)) + (if tm (tramp-compat-funcall 'cancel-timer tm)) (tramp-message ,vec ,level "%s...done" ,message)))) (put 'with-progress-reporter 'lisp-indent-function 3) @@ -2398,15 +2397,16 @@ special handling of `substitute-in-file-name'." (when (symbol-value 'minibuffer-completing-file-name) (setq tramp-rfn-eshadow-overlay - (funcall (symbol-function 'make-overlay) - (funcall (symbol-function 'minibuffer-prompt-end)) - (funcall (symbol-function 'minibuffer-prompt-end)))) + (tramp-compat-funcall + 'make-overlay + (tramp-compat-funcall 'minibuffer-prompt-end) + (tramp-compat-funcall 'minibuffer-prompt-end))) ;; Copy rfn-eshadow-overlay properties. - (let ((props (funcall (symbol-function 'overlay-properties) - (symbol-value 'rfn-eshadow-overlay)))) + (let ((props (tramp-compat-funcall + 'overlay-properties (symbol-value 'rfn-eshadow-overlay)))) (while props - (funcall (symbol-function 'overlay-put) - tramp-rfn-eshadow-overlay (pop props) (pop props)))))) + (tramp-compat-funcall + 'overlay-put tramp-rfn-eshadow-overlay (pop props) (pop props)))))) (when (boundp 'rfn-eshadow-setup-minibuffer-hook) (add-hook 'rfn-eshadow-setup-minibuffer-hook @@ -2425,10 +2425,12 @@ `file-name-shadow-mode'; the minibuffer should have already been set up by `rfn-eshadow-setup-minibuffer'." ;; In remote files name, there is a shadowing just for the local part. - (let ((end (or (funcall (symbol-function 'overlay-end) - (symbol-value 'rfn-eshadow-overlay)) - (funcall (symbol-function 'minibuffer-prompt-end))))) - (when (file-remote-p (buffer-substring-no-properties end (point-max))) + (let ((end (or (tramp-compat-funcall + 'overlay-end (symbol-value 'rfn-eshadow-overlay)) + (tramp-compat-funcall 'minibuffer-prompt-end)))) + (when + (file-remote-p + (tramp-compat-funcall 'buffer-substring-no-properties end (point-max))) (save-excursion (save-restriction (narrow-to-region @@ -2438,8 +2440,9 @@ (point-max)) (let ((rfn-eshadow-overlay tramp-rfn-eshadow-overlay) (rfn-eshadow-update-overlay-hook nil)) - (move-overlay rfn-eshadow-overlay (point-max) (point-max)) - (funcall (symbol-function 'rfn-eshadow-update-overlay)))))))) + (tramp-compat-funcall + 'move-overlay rfn-eshadow-overlay (point-max) (point-max)) + (tramp-compat-funcall 'rfn-eshadow-update-overlay))))))) (when (boundp 'rfn-eshadow-update-overlay-hook) (add-hook 'rfn-eshadow-update-overlay-hook @@ -2989,9 +2992,8 @@ ;; local host. (and (functionp 'subr-arity) (subrp (symbol-function 'format-time-string)) - (= 3 (cdr (funcall (symbol-function 'subr-arity) - (symbol-function - 'format-time-string))))))) + (= 3 (cdr (tramp-compat-funcall + 'subr-arity 'format-time-string)))))) (tramp-send-command-and-check v (format "%s touch -t %s %s" (if utc "TZ=UTC; export TZ;" "") @@ -4157,8 +4159,8 @@ (tramp-send-command-and-check v (concat (nth 2 suffix) " " (tramp-shell-quote-argument localname)))) - ;; `dired-remove-file' is not defined in XEmacs - (funcall (symbol-function 'dired-remove-file) file) + ;; `dired-remove-file' is not defined in XEmacs. + (tramp-compat-funcall 'dired-remove-file file) (string-match (car suffix) file) (concat (substring file 0 (match-beginning 0)))))) (t @@ -4169,8 +4171,8 @@ (tramp-send-command-and-check v (concat "gzip -f " (tramp-shell-quote-argument localname)))) - ;; `dired-remove-file' is not defined in XEmacs - (funcall (symbol-function 'dired-remove-file) file) + ;; `dired-remove-file' is not defined in XEmacs. + (tramp-compat-funcall 'dired-remove-file file) (cond ((file-exists-p (concat file ".gz")) (concat file ".gz")) ((file-exists-p (concat file ".z")) @@ -4714,8 +4716,7 @@ ;; There's some output, display it. (when (with-current-buffer output-buffer (> (point-max) (point-min))) (if (functionp 'display-message-or-buffer) - (funcall (symbol-function 'display-message-or-buffer) - output-buffer) + (tramp-compat-funcall 'display-message-or-buffer output-buffer) (pop-to-buffer output-buffer)))))))) ;; File Editing. @@ -5638,7 +5639,8 @@ (featurep 'tramp) ;; If it's loaded, we may as well use it. ;; `partial-completion-mode' does not exist in XEmacs. ;; It is obsoleted with Emacs 24.1. - (and (boundp 'partial-completion-mode) partial-completion-mode) + (and (boundp 'partial-completion-mode) + (symbol-value 'partial-completion-mode)) ;; FIXME: These may have been loaded even if the user never ;; intended to use them. (featurep 'ido) @@ -5730,19 +5732,18 @@ ;; `last-input-event' might be nil. (not (null last-input-event)) ;; `last-input-event' may have no character approximation. - (funcall (symbol-function 'event-to-character) last-input-event) + (tramp-compat-funcall 'event-to-character last-input-event) (or ;; ?\t has event-modifier 'control. (equal - (funcall (symbol-function 'event-to-character) - last-input-event) ?\t) + (tramp-compat-funcall 'event-to-character last-input-event) ?\t) (and (not (event-modifiers last-input-event)) (or (equal - (funcall (symbol-function 'event-to-character) - last-input-event) ?\?) + (tramp-compat-funcall 'event-to-character last-input-event) + ?\?) (equal - (funcall (symbol-function 'event-to-character) - last-input-event) ?\ ))))))) + (tramp-compat-funcall 'event-to-character last-input-event) + ?\ ))))))) (defun tramp-connectable-p (filename) "Check, whether it is possible to connect the remote host w/o side-effects. @@ -6777,10 +6778,11 @@ (when (or (not (tramp-get-connection-property proc "check-remote-echo" nil)) ;; Sometimes, the echo string is suppressed on the remote side. (not (string-equal - (substring-no-properties - tramp-echo-mark-marker + (tramp-compat-funcall + 'substring-no-properties tramp-echo-mark-marker 0 (min tramp-echo-mark-marker-length (1- (point-max)))) - (buffer-substring-no-properties + (tramp-compat-funcall + 'buffer-substring-no-properties 1 (min (1+ tramp-echo-mark-marker-length) (point-max)))))) ;; No echo to be handled, now we can look for the regexp. (goto-char (point-min)) @@ -6907,7 +6909,7 @@ (if (featurep 'mule) ;; Use MULE to select the right EOL convention for communicating ;; with the process. - (let* ((cs (or (funcall (symbol-function 'process-coding-system) proc) + (let* ((cs (or (tramp-compat-funcall 'process-coding-system proc) (cons 'undecided 'undecided))) cs-decode cs-encode) (when (symbolp cs) (setq cs (cons cs cs))) @@ -6920,8 +6922,8 @@ (when (search-forward "\r" nil t) (setq cs-decode (tramp-coding-system-change-eol-conversion cs-decode 'dos))) - (funcall (symbol-function 'set-buffer-process-coding-system) - cs-decode cs-encode) + (tramp-compat-funcall + 'set-buffer-process-coding-system cs-decode cs-encode) (tramp-message vec 5 "Setting coding system to `%s' and `%s'" cs-decode cs-encode)) ;; Look for ^M and do something useful if found. @@ -6950,7 +6952,7 @@ ;; Keep the debug buffer. (rename-buffer (generate-new-buffer-name tramp-temp-buffer-name) 'unique) - (funcall (symbol-function 'tramp-cleanup-connection) vec) + (tramp-compat-funcall 'tramp-cleanup-connection vec) (if (= (point-min) (point-max)) (kill-buffer nil) (rename-buffer (tramp-debug-buffer-name vec) 'unique)) @@ -7333,7 +7335,7 @@ 'target-alist (vector (tramp-file-name-method hop) (tramp-file-name-user hop) - (funcall (symbol-function 'tramp-gw-open-connection) vec gw hop) nil)) + (tramp-compat-funcall 'tramp-gw-open-connection vec gw hop) nil)) ;; For the password prompt, we need the correct values. ;; Therefore, we must remember the gateway vector. But we ;; cannot do it as connection property, because it shouldn't @@ -8612,16 +8614,17 @@ (and (boundp 'auth-sources) (tramp-get-connection-property v "first-password-request" nil) ;; Try with Tramp's current method. - (funcall (symbol-function 'auth-source-user-or-password) - "password" tramp-current-host tramp-current-method)) + (tramp-compat-funcall + 'auth-source-user-or-password + "password" tramp-current-host tramp-current-method)) ;; Try the password cache. (when (functionp 'password-read) (unless (tramp-get-connection-property v "first-password-request" nil) - (funcall (symbol-function 'password-cache-remove) key)) + (tramp-compat-funcall 'password-cache-remove key)) (let ((password - (funcall (symbol-function 'password-read) pw-prompt key))) - (funcall (symbol-function 'password-cache-add) key password) + (tramp-compat-funcall 'password-read pw-prompt key))) + (tramp-compat-funcall 'password-cache-add key password) password)) ;; Else, get the password interactively. (read-passwd pw-prompt)) @@ -8629,14 +8632,13 @@ (defun tramp-clear-passwd (vec) "Clear password cache for connection related to VEC." - (when (functionp 'password-cache-remove) - (funcall - (symbol-function 'password-cache-remove) - (tramp-make-tramp-file-name - (tramp-file-name-method vec) - (tramp-file-name-user vec) - (tramp-file-name-host vec) - "")))) + (tramp-compat-funcall + 'password-cache-remove + (tramp-make-tramp-file-name + (tramp-file-name-method vec) + (tramp-file-name-user vec) + (tramp-file-name-host vec) + ""))) ;; Snarfed code from time-date.el and parse-time.el @@ -8673,16 +8675,17 @@ ;; Pacify byte-compiler with `symbol-function'. (cond ((and (fboundp 'subtract-time) (fboundp 'float-time)) - (funcall (symbol-function 'float-time) - (funcall (symbol-function 'subtract-time) t1 t2))) + (tramp-compat-funcall + 'float-time (tramp-compat-funcall 'subtract-time t1 t2))) ((and (fboundp 'subtract-time) (fboundp 'time-to-seconds)) - (funcall (symbol-function 'time-to-seconds) - (funcall (symbol-function 'subtract-time) t1 t2))) + (tramp-compat-funcall + 'time-to-seconds (tramp-compat-funcall 'subtract-time t1 t2))) ((fboundp 'itimer-time-difference) - (funcall (symbol-function 'itimer-time-difference) - (if (< (length t1) 3) (append t1 '(0)) t1) - (if (< (length t2) 3) (append t2 '(0)) t2))) + (tramp-compat-funcall + 'itimer-time-difference + (if (< (length t1) 3) (append t1 '(0)) t1) + (if (< (length t2) 3) (append t2 '(0)) t2))) (t (let ((time (tramp-time-subtract t1 t2))) (+ (* (car time) 65536.0) @@ -8693,18 +8696,18 @@ "Return a coding system like CODING-SYSTEM but with given EOL-TYPE. EOL-TYPE can be one of `dos', `unix', or `mac'." (cond ((fboundp 'coding-system-change-eol-conversion) - (funcall (symbol-function 'coding-system-change-eol-conversion) - coding-system eol-type)) + (tramp-compat-funcall + 'coding-system-change-eol-conversion coding-system eol-type)) ((fboundp 'subsidiary-coding-system) - (funcall (symbol-function 'subsidiary-coding-system) - coding-system - (cond ((eq eol-type 'dos) 'crlf) - ((eq eol-type 'unix) 'lf) - ((eq eol-type 'mac) 'cr) - (t - (error "Unknown EOL-TYPE `%s', must be %s" - eol-type - "`dos', `unix', or `mac'"))))) + (tramp-compat-funcall + 'subsidiary-coding-system coding-system + (cond ((eq eol-type 'dos) 'crlf) + ((eq eol-type 'unix) 'lf) + ((eq eol-type 'mac) 'cr) + (t + (error "Unknown EOL-TYPE `%s', must be %s" + eol-type + "`dos', `unix', or `mac'"))))) (t (error "Can't change EOL conversion -- is MULE missing?")))) (defun tramp-set-process-query-on-exit-flag (process flag) @@ -8712,8 +8715,8 @@ If the second argument flag is non-nil, Emacs will query the user before exiting if process is running." (if (fboundp 'set-process-query-on-exit-flag) - (funcall (symbol-function 'set-process-query-on-exit-flag) process flag) - (funcall (symbol-function 'process-kill-without-query) process flag))) + (tramp-compat-funcall 'set-process-query-on-exit-flag process flag) + (tramp-compat-funcall 'process-kill-without-query) process flag)) ;; ------------------------------------------------------------ @@ -8773,8 +8776,7 @@ ;; When Tramp is not loaded yet, its autoloads are still active. (tramp-unload-file-name-handlers) ;; ange-ftp settings must be enabled. - (when (functionp 'tramp-ftp-enable-ange-ftp) - (funcall (symbol-function 'tramp-ftp-enable-ange-ftp))) + (tramp-compat-funcall 'tramp-ftp-enable-ange-ftp) ;; Maybe its not loaded yet. (condition-case nil (unload-feature 'tramp 'force)