]> code.delx.au - gnu-emacs/blobdiff - lisp/files.el
(find-file): Fix last change.
[gnu-emacs] / lisp / files.el
index 8e6fb9ff7250881c6bd953f0edc0ce7ef17464b4..6397a5ded6609ca343a942835fbbb118c6ec3742 100644 (file)
@@ -1068,6 +1068,13 @@ Interactively, the default if you just type RET is the current directory,
 but the visited file name is available through the minibuffer history:
 type M-n to pull it into the minibuffer.
 
+You can visit files on remote machines by specifying something
+like /ssh:SOME_REMOTE_MACHINE:FILE for the file name.  You can
+also visit local files as a different user by specifying
+/sudo::FILE for the file name.
+See the Info node `(tramp)Filename Syntax' in the Tramp Info
+manual, for more about this.
+
 Interactively, or if WILDCARDS is non-nil in a call from Lisp,
 expand wildcards (if any) and visit multiple files.  You can
 suppress wildcard expansion by setting `find-file-wildcards' to nil.
@@ -1082,8 +1089,9 @@ automatically choosing a major mode, use \\[find-file-literally]."
 
 (defun find-file-other-window (filename &optional wildcards)
   "Edit file FILENAME, in another window.
-May create a new window, or reuse an existing one.
-See the function `display-buffer'.
+
+Like \\[find-file] (which see), but creates a new window or reuses
+an existing one.  See the function `display-buffer'.
 
 Interactively, the default if you just type RET is the current directory,
 but the visited file name is available through the minibuffer history:
@@ -1102,8 +1110,9 @@ expand wildcards (if any) and visit multiple files."
 
 (defun find-file-other-frame (filename &optional wildcards)
   "Edit file FILENAME, in another frame.
-May create a new frame, or reuse an existing one.
-See the function `display-buffer'.
+
+Like \\[find-file] (which see), but creates a new frame or reuses
+an existing one.  See the function `display-buffer'.
 
 Interactively, the default if you just type RET is the current directory,
 but the visited file name is available through the minibuffer history:
@@ -1122,7 +1131,7 @@ expand wildcards (if any) and visit multiple files."
 
 (defun find-file-existing (filename)
    "Edit the existing file FILENAME.
-Like \\[find-file] but only allow a file that exists, and do not allow
+Like \\[find-file], but only allow a file that exists, and do not allow
 file names with wildcards."
    (interactive (nbutlast (find-file-read-args "Find existing file: " t)))
    (if (and (not (interactive-p)) (not (file-exists-p filename)))
@@ -1132,7 +1141,7 @@ file names with wildcards."
 
 (defun find-file-read-only (filename &optional wildcards)
   "Edit file FILENAME but don't allow changes.
-Like \\[find-file] but marks buffer as read-only.
+Like \\[find-file], but marks buffer as read-only.
 Use \\[toggle-read-only] to permit editing."
   (interactive (find-file-read-args "Find file read-only: " nil))
   (unless (or (and wildcards find-file-wildcards
@@ -1147,7 +1156,7 @@ Use \\[toggle-read-only] to permit editing."
 
 (defun find-file-read-only-other-window (filename &optional wildcards)
   "Edit file FILENAME in another window but don't allow changes.
-Like \\[find-file-other-window] but marks buffer as read-only.
+Like \\[find-file-other-window], but marks buffer as read-only.
 Use \\[toggle-read-only] to permit editing."
   (interactive (find-file-read-args "Find file read-only other window: " nil))
   (unless (or (and wildcards find-file-wildcards
@@ -1162,7 +1171,7 @@ Use \\[toggle-read-only] to permit editing."
 
 (defun find-file-read-only-other-frame (filename &optional wildcards)
   "Edit file FILENAME in another frame but don't allow changes.
-Like \\[find-file-other-frame] but marks buffer as read-only.
+Like \\[find-file-other-frame], but marks buffer as read-only.
 Use \\[toggle-read-only] to permit editing."
   (interactive (find-file-read-args "Find file read-only other frame: " nil))
   (unless (or (and wildcards find-file-wildcards
@@ -1179,6 +1188,8 @@ Use \\[toggle-read-only] to permit editing."
   "Find file FILENAME as a replacement for the file in the next window.
 This command does not select that window.
 
+See \\[find-file] for the possible forms of the FILENAME argument.
+
 Interactively, or if WILDCARDS is non-nil in a call from Lisp,
 expand wildcards (if any) and replace the file with multiple files."
   (interactive
@@ -1204,6 +1215,8 @@ expand wildcards (if any) and replace the file with multiple files."
 If the current buffer now contains an empty file that you just visited
 \(presumably by mistake), use this command to visit the file you really want.
 
+See \\[find-file] for the possible forms of the FILENAME argument.
+
 Interactively, or if WILDCARDS is non-nil in a call from Lisp,
 expand wildcards (if any) and replace the file with multiple files.
 
@@ -1886,7 +1899,7 @@ since only a single case-insensitive search through the alist is made."
   ;; c++-mode, java-mode and more) are added through autoload
   ;; directives in that file.  That way is discouraged since it
   ;; spreads out the definition of the initial value.
-  (mapc
+  (mapcar
    (lambda (elt)
      (cons (purecopy (car elt)) (cdr elt)))
    `(;; do this first, so that .html.pl is Polish html, not Perl
@@ -2260,10 +2273,10 @@ we don't actually set it to the same mode the buffer already has."
     (unless done
       (if buffer-file-name
          (let ((name buffer-file-name)
-               (remote-id (regexp-quote (file-remote-p buffer-file-name))))
+               (remote-id (file-remote-p buffer-file-name)))
            ;; Remove remote file name identification.
            (when (and (stringp remote-id)
-                      (string-match remote-id name))
+                      (string-match (regexp-quote remote-id) name))
              (setq name (substring name (match-end 0))))
            ;; Remove backup-suffixes from file name.
            (setq name (file-name-sans-versions name))
@@ -2486,7 +2499,11 @@ asking you for confirmation."
 
 (put 'c-set-style 'safe-local-eval-function t)
 
-(defun hack-local-variables-confirm (vars unsafe-vars risky-vars)
+(defun hack-local-variables-confirm (all-vars unsafe-vars risky-vars)
+  "Get confirmation before setting up local variable values.
+ALL-VARS is the list of all variables to be set up.
+UNSAFE-VARS is the list of those that aren't marked as safe or risky.
+RISKY-VARS is the list of those that are marked as risky."
   (if noninteractive
       nil
     (let ((name (if buffer-file-name
@@ -2517,7 +2534,7 @@ n  -- to ignore the local variables list.")
 !  -- to apply the local variables list, and permanently mark these
       values (*) as safe (in the future, they will be set automatically.)\n\n")
            (insert "\n\n"))
-         (dolist (elt vars)
+         (dolist (elt all-vars)
            (cond ((member elt unsafe-vars)
                   (insert "  * "))
                  ((member elt risky-vars)
@@ -3127,17 +3144,22 @@ BACKUPNAME is the backup file name, which is the old file renamed."
          ;; loosen them later, whereas it's impossible to close the
          ;; time-window of loose permissions otherwise.
          (set-default-file-modes ?\700)
-         (while (condition-case ()
-                    (progn
-                      (condition-case nil
-                          (delete-file to-name)
-                        (file-error nil))
-                      (copy-file from-name to-name nil t)
-                      nil)
-                  (file-already-exists t))
-           ;; The file was somehow created by someone else between
-           ;; `delete-file' and `copy-file', so let's try again.
-           nil))
+         (when (condition-case nil
+                   ;; Try to overwrite old backup first.
+                   (copy-file from-name to-name t t)
+                 (error t))
+           (while (condition-case nil
+                      (progn
+                        (when (file-exists-p to-name)
+                          (delete-file to-name))
+                        (copy-file from-name to-name nil t)
+                        nil)
+                    (file-already-exists t))
+             ;; The file was somehow created by someone else between
+             ;; `delete-file' and `copy-file', so let's try again.
+             ;; rms says "I think there is also a possible race
+             ;; condition for making backup files" (emacs-devel 20070821).
+             nil)))
       ;; Reset the umask.
       (set-default-file-modes umask)))
   (and modes
@@ -3941,8 +3963,9 @@ prints a message in the minibuffer.  Instead, use `set-buffer-modified-p'."
 
 (defun toggle-read-only (&optional arg)
   "Change whether this buffer is visiting its file read-only.
-With arg, set read-only iff arg is positive.
-If visiting file read-only and `view-read-only' is non-nil, enter view mode."
+With prefix argument ARG, make the buffer read-only if ARG is
+positive, otherwise make it writable.  If visiting file read-only
+and `view-read-only' is non-nil, enter view mode."
   (interactive "P")
   (if (and arg
            (if (> (prefix-numeric-value arg) 0) buffer-read-only
@@ -4568,7 +4591,7 @@ FILENAME should lack slashes.  You can redefine this for customization."
 \f
 (defun wildcard-to-regexp (wildcard)
   "Given a shell file name pattern WILDCARD, return an equivalent regexp.
-The generated regexp will match a filename iff the filename
+The generated regexp will match a filename only if the filename
 matches that wildcard according to shell rules.  Only wildcards known
 by `sh' are supported."
   (let* ((i (string-match "[[.*+\\^$?]" wildcard))