]> code.delx.au - gnu-emacs/blobdiff - lisp/files.el
(find-file-noselect-1): Remove unused var assignment.
[gnu-emacs] / lisp / files.el
index 0b45a35190aae28da9c5e95efe7e2bfb97a91d24..61ccf00352351f2aae21b9c1325be87130e6cfa9 100644 (file)
@@ -250,7 +250,8 @@ nil means make them for files that have some already.
                 (other :tag "Always" t))
   :group 'backup
   :group 'vc)
-(put 'version-control 'safe-local-variable 'symbolp)
+(put 'version-control 'safe-local-variable
+     '(lambda (x) (or (booleanp x) (equal x 'never))))
 
 (defcustom dired-kept-versions 2
   "*When cleaning directory, number of versions to keep."
@@ -487,7 +488,7 @@ This variable does not affect the use of major modes
 specified in a -*- line.")
 
 (defcustom enable-local-eval 'maybe
-  "*Control processing of the \"variable\" `eval' in a file's local variables.
+  "Control processing of the \"variable\" `eval' in a file's local variables.
 The value can be t, nil or something else.
 A value of t means obey `eval' variables;
 nil means ignore them; anything else means query."
@@ -1313,7 +1314,7 @@ removes automounter prefixes (see the variable `automount-dir-prefix')."
                         (string-match "^[a-zA-`]:/$" filename)))))
        (setq filename
              (concat "~"
-                     (substring filename (match-beginning 1) (match-end 1))
+                     (match-string 1 filename)
                      (substring filename (match-end 0)))))
     filename))
 
@@ -1513,23 +1514,53 @@ the various files."
                           ;; hexl-mode.
                           (not (eq major-mode 'hexl-mode)))
                  (if (buffer-modified-p)
-                     (if (y-or-n-p (if rawfile
-                                       "Save file and revisit literally? "
-                                     "Save file and revisit non-literally? "))
+                     (if (y-or-n-p
+                          (format 
+                           (if rawfile
+                               "The file %s is already visited normally,
+and you have edited the buffer.  Now you have asked to visit it literally,
+meaning no coding system handling, format conversion, or local variables.
+Emacs can only visit a file in one way at a time.
+
+Do you want to save the file, and visit it literally instead? "
+                               "The file %s is already visited literally,
+meaning no coding system handling, format conversion, or local variables.
+You have edited the buffer.  Now you have asked to visit the file normally,
+but Emacs can only visit a file in one way at a time.
+
+Do you want to save the file, and visit it normally instead? ")
+                           (file-name-nondirectory filename)))
                          (progn
                            (save-buffer)
                            (find-file-noselect-1 buf filename nowarn
                                                  rawfile truename number))
-                       (if (y-or-n-p (if rawfile
-                                         "Discard your edits and revisit file literally? "
-                                       "Discard your edits and revisit file non-literally? "))
+                       (if (y-or-n-p
+                            (format 
+                             (if rawfile
+                                 "\
+Do you want to discard your changes, and visit the file literally now? "
+                               "\
+Do you want to discard your changes, and visit the file normally now? ")))
                            (find-file-noselect-1 buf filename nowarn
                                                  rawfile truename number)
                          (error (if rawfile "File already visited non-literally"
                                   "File already visited literally"))))
-                   (if (y-or-n-p (if rawfile
-                                     "Revisit file literally? "
-                                   "Revisit file non-literally? "))
+                   (if (y-or-n-p 
+                        (format 
+                         (if rawfile
+                             "The file %s is already visited normally.
+You have asked to visit it literally,
+meaning no coding system decoding, format conversion, or local variables.
+But Emacs can only visit a file in one way at a time.
+
+Do you want to revisit the file literally now? "
+                           "The file %s is already visited literally,
+meaning no coding system decoding, format conversion, or local variables.
+You have asked to visit it normally,
+but Emacs can only visit a file in one way at a time.
+
+Do you want to revisit the file normally now? ")
+                         (file-name-nondirectory filename)))
                        (find-file-noselect-1 buf filename nowarn
                                              rawfile truename number)
                      (error (if rawfile "File already visited non-literally"
@@ -1576,7 +1607,7 @@ the various files."
             (kill-buffer buf)
             (signal 'file-error (list "File is not readable"
                                       filename)))
-          ;; Run find-file-not-found-hooks until one returns non-nil.
+          ;; Run find-file-not-found-functions until one returns non-nil.
           (or (run-hook-with-args-until-success 'find-file-not-found-functions)
               ;; If they fail too, set error.
               (setq error t)))))
@@ -1596,9 +1627,7 @@ the various files."
             (not (member logical find-file-not-true-dirname-list)))
           (setq buffer-file-name buffer-file-truename))
       (if find-file-visit-truename
-         (setq buffer-file-name
-               (setq filename
-                     (expand-file-name buffer-file-truename))))
+         (setq buffer-file-name (expand-file-name buffer-file-truename)))
       ;; Set buffer's default directory to that of the file.
       (setq default-directory (file-name-directory buffer-file-name))
       ;; Turn off backup files for certain file names.  Since
@@ -1846,13 +1875,14 @@ in that case, this function acts as if `enable-local-variables' were t."
      ("\\.ad[bs].dg\\'" . ada-mode)
      ("\\.\\([pP]\\([Llm]\\|erl\\|od\\)\\|al\\)\\'" . perl-mode)
      ("Imakefile\\'" . makefile-imake-mode)
+     ("Makeppfile\\(?:\\.mk\\)?\\'" . makefile-makepp-mode) ; Put this before .mk
+     ("\\.makepp\\'" . makefile-makepp-mode)
      ,@(if (memq system-type '(berkeley-unix next-mach darwin))
           '(("\\.mk\\'" . makefile-bsdmake-mode)
             ("GNUmakefile\\'" . makefile-gmake-mode)
             ("[Mm]akefile\\'" . makefile-bsdmake-mode))
         '(("\\.mk\\'" . makefile-gmake-mode)   ; Might be any make, give Gnu the host advantage
           ("[Mm]akefile\\'" . makefile-gmake-mode)))
-     ("Makeppfile\\'" . makefile-makepp-mode)
      ("\\.am\\'" . makefile-automake-mode)
      ;; Less common extensions come here
      ;; so more common ones above are found faster.
@@ -1896,8 +1926,8 @@ in that case, this function acts as if `enable-local-variables' were t."
      ("\\.tar\\'" . tar-mode)
      ;; The list of archive file extensions should be in sync with
      ;; `auto-coding-alist' with `no-conversion' coding system.
-     ("\\.\\(arc\\|zip\\|lzh\\|zoo\\|[jew]ar\\|xpi\\)\\'" . archive-mode)
-     ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\|XPI\\)\\'" . archive-mode)
+     ("\\.\\(arc\\|zip\\|lzh\\|lha\\|zoo\\|[jew]ar\\|xpi\\)\\'" . archive-mode)
+     ("\\.\\(ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\)\\'" . archive-mode)
      ("\\.\\(sx[dmicw]\\|odt\\)\\'" . archive-mode)    ; OpenOffice.org
      ;; Mailer puts message to be edited in
      ;; /tmp/Re.... or Message
@@ -2404,7 +2434,9 @@ n  -- to ignore the local variables list.")
                   (insert "    ")))
            (princ (car elt) buf)
            (insert " : ")
-           (princ (cdr elt) buf)
+            ;; Make strings with embedded whitespace easier to read.
+            (let ((print-escape-newlines t))
+              (prin1 (cdr elt) buf))
            (insert "\n"))
          (setq prompt
                (format "Please type %s%s: "
@@ -2475,9 +2507,7 @@ and VAL is the specified value."
               ;; There used to be a downcase here,
               ;; but the manual didn't say so,
               ;; and people want to set var names that aren't all lc.
-              (let ((key (intern (buffer-substring
-                                  (match-beginning 1)
-                                  (match-end 1))))
+              (let ((key (intern (match-string 1)))
                     (val (save-restriction
                            (narrow-to-region (point) end)
                            (read (current-buffer)))))
@@ -2629,8 +2659,8 @@ is specified, returning t if it is specified."
                      (hack-local-variables-confirm
                       result unsafe-vars risky-vars))
                  (dolist (elt result)
-                   (hack-one-local-variable (car elt) (cdr elt))))))
-         (run-hooks 'hack-local-variables-hook))))))
+                   (hack-one-local-variable (car elt) (cdr elt)))))))
+       (run-hooks 'hack-local-variables-hook)))))
 
 (defun safe-local-variable-p (sym val)
   "Non-nil if SYM is safe as a file-local variable with value VAL.
@@ -2688,7 +2718,10 @@ It is dangerous if either of these conditions are met:
                    (or (numberp val) (equal val ''defun)))
                   ((eq prop 'edebug-form-spec)
                    ;; Only allow indirect form specs.
-                   (edebug-basic-spec val)))))
+                   ;; During bootstrapping, edebug-basic-spec might not be
+                   ;; defined yet.
+                    (and (fboundp 'edebug-basic-spec)
+                         (edebug-basic-spec val))))))
       ;; Allow expressions that the user requested.
       (member exp safe-local-eval-forms)
       ;; Certain functions can be allowed with safe arguments
@@ -2713,17 +2746,16 @@ It is dangerous if either of these conditions are met:
 (defun hack-one-local-variable (var val)
   "Set local variable VAR with value VAL."
   (cond ((eq var 'mode)
-        (funcall (intern (concat (downcase (symbol-name val))
-                                 "-mode"))))
+        (funcall (intern (concat (downcase (symbol-name val)) "-mode"))))
        ((eq var 'eval)
         (save-excursion (eval val)))
-       (t (make-local-variable var)
-          ;; Make sure the string has no text properties.
-          ;; Some text properties can get evaluated in various ways,
-          ;; so it is risky to put them on with a local variable list.
-          (if (stringp val)
-              (set-text-properties 0 (length val) nil val))
-          (set var val))))
+       (t
+         ;; Make sure the string has no text properties.
+         ;; Some text properties can get evaluated in various ways,
+         ;; so it is risky to put them on with a local variable list.
+         (if (stringp val)
+             (set-text-properties 0 (length val) nil val))
+         (set (make-local-variable var) val))))
 
 \f
 (defcustom change-major-mode-with-file-name t
@@ -2993,7 +3025,7 @@ BACKUPNAME is the backup file name, which is the old file renamed."
                       (condition-case nil
                           (delete-file to-name)
                         (file-error nil))
-                      (copy-file from-name to-name t t 'excl)
+                      (copy-file from-name to-name nil t)
                       nil)
                   (file-already-exists t))
            ;; The file was somehow created by someone else between
@@ -3061,6 +3093,7 @@ except that a leading `.', if any, doesn't count."
 (defun file-name-extension (filename &optional period)
   "Return FILENAME's final \"extension\".
 The extension, in a file name, is the part that follows the last `.',
+excluding version numbers and backup suffixes,
 except that a leading `.', if any, doesn't count.
 Return nil for extensionless file names such as `foo'.
 Return the empty string for file names such as `foo.'.
@@ -3620,8 +3653,10 @@ Before and after saving the buffer, this function runs
                (set-visited-file-modtime old-modtime)))
            ;; Since we have created an entirely new file,
            ;; make sure it gets the right permission bits set.
-           (setq setmodes (or setmodes (cons (file-modes buffer-file-name)
-                                             buffer-file-name)))
+           (setq setmodes (or setmodes
+                              (cons (or (file-modes buffer-file-name)
+                                        (logand ?\666 umask))
+                                    buffer-file-name)))
            ;; We succeeded in writing the temp file,
            ;; so rename it.
            (rename-file tempname buffer-file-name t))
@@ -4103,7 +4138,7 @@ non-nil, it is called instead of rereading visited file contents."
           (let ((inhibit-read-only t)
                 ;; Keep the current buffer-file-coding-system.
                 (coding-system buffer-file-coding-system)
-                ;; Auto-saved file shoule be read with special coding.
+                ;; Auto-saved file should be read with special coding.
                 (coding-system-for-read 'auto-save-coding))
             (erase-buffer)
             (insert-file-contents file-name nil)
@@ -4178,9 +4213,7 @@ This command is used in the special Dired buffer created by
                      (setq autofile
                            (buffer-substring-no-properties
                             (point)
-                            (save-excursion
-                              (end-of-line)
-                              (point))))
+                            (line-end-position)))
                      (setq thisfile
                            (expand-file-name
                             (substring