diff options
Diffstat (limited to 'lisp/files.el')
-rw-r--r-- | lisp/files.el | 75 |
1 files changed, 49 insertions, 26 deletions
diff --git a/lisp/files.el b/lisp/files.el index 40b6e7d56b4..f15c523400d 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -1,6 +1,6 @@ ;;; files.el --- file input and output commands for Emacs -;; Copyright (C) 1985-1987, 1992-2011 Free Software Foundation, Inc. +;; Copyright (C) 1985-1987, 1992-2012 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Package: emacs @@ -917,24 +917,41 @@ See `load-file' for a different interface to `load'." (defun file-remote-p (file &optional identification connected) "Test whether FILE specifies a location on a remote system. -Returns nil or a string identifying the remote connection (ideally -a prefix of FILE). For example, the remote identification for filename -\"/user@host:/foo\" could be \"/user@host:\". -A file is considered \"remote\" if accessing it is likely to be slower or -less reliable than accessing local files. -Furthermore, relative file names do not work across remote connections. - -IDENTIFICATION specifies which part of the identification shall -be returned as string. IDENTIFICATION can be the symbol -`method', `user', `host' or `localname'; any other value is -handled like nil and means to return the complete identification -string. - -If CONNECTED is non-nil, the function returns an identification only -if FILE is located on a remote system, and a connection is established -to that remote system. - -`file-remote-p' will never open a connection on its own." +A file is considered remote if accessing it is likely to +be slower or less reliable than accessing local files. + +`file-remote-p' never opens a new remote connection. It can +only reuse a connection that is already open. + +Return nil or a string identifying the remote connection +\(ideally a prefix of FILE). Return nil if FILE is a relative +file name. + +When IDENTIFICATION is nil, the returned string is a complete +remote identifier: with components method, user, and host. The +components are those present in FILE, with defaults filled in for +any that are missing. + +IDENTIFICATION can specify which part of the identification to +return. IDENTIFICATION can be the symbol `method', `user', +`host', or `localname'. Any other value is handled like nil and +means to return the complete identification. The string returned +for IDENTIFICATION `localname' can differ depending on whether +there is an existing connection. + +If CONNECTED is non-nil, return an identification only if FILE is +located on a remote system and a connection is established to +that remote system. + +Tip: You can use this expansion of remote identifier components + to derive a new remote file name from an existing one. For + example, if FILE is \"/sudo::/path/to/file\" then + + \(concat \(file-remote-p FILE) \"/bin/sh\") + + returns a remote file name for file \"/bin/sh\" that has the + same remote identifier as FILE but expanded; a name such as + \"/sudo:root@myhost:/bin/sh\"." (let ((handler (find-file-name-handler file 'file-remote-p))) (if handler (funcall handler 'file-remote-p file identification connected) @@ -3277,7 +3294,7 @@ It is dangerous if either of these conditions are met: (and (symbolp (car exp)) ;; Allow (minor)-modes calls with no arguments. ;; This obsoletes the use of "mode:" for such things. (Bug#8613) - (or (and (member (cdr exp) '(nil (1) (-1))) + (or (and (member (cdr exp) '(nil (1) (0) (-1))) (string-match "-mode\\'" (symbol-name (car exp)))) (let ((prop (get (car exp) 'safe-local-eval-function))) (cond ((eq prop t) @@ -3560,6 +3577,10 @@ and `file-local-variables-alist', without applying them." (hack-local-variables-filter variables dir-name))))))) (defun hack-dir-local-variables-non-file-buffer () + "Apply directory-local variables to a non-file buffer. +For non-file buffers, such as Dired buffers, directory-local +variables are looked for in `default-directory' and its parent +directories." (hack-dir-local-variables) (hack-local-variables-apply)) @@ -6440,12 +6461,14 @@ Otherwise, trash FILENAME using the freedesktop.org conventions, ;; Ensure that the trash directory exists; otherwise, create it. (let ((saved-default-file-modes (default-file-modes))) - (set-default-file-modes ?\700) - (unless (file-exists-p trash-files-dir) - (make-directory trash-files-dir t)) - (unless (file-exists-p trash-info-dir) - (make-directory trash-info-dir t)) - (set-default-file-modes saved-default-file-modes)) + (unwind-protect + (progn + (set-default-file-modes #o700) + (unless (file-exists-p trash-files-dir) + (make-directory trash-files-dir t)) + (unless (file-exists-p trash-info-dir) + (make-directory trash-info-dir t))) + (set-default-file-modes saved-default-file-modes))) ;; Try to move to trash with .trashinfo undo information (save-excursion |