]> git.eshelyaron.com Git - emacs.git/commitdiff
(require-final-newline): Allow `visit' and `visit-save'.
authorRichard M. Stallman <rms@gnu.org>
Fri, 31 Dec 2004 14:48:12 +0000 (14:48 +0000)
committerRichard M. Stallman <rms@gnu.org>
Fri, 31 Dec 2004 14:48:12 +0000 (14:48 +0000)
(mode-require-final-newline): New option.
(after-find-file): Handle require-final-newline with new values.
(basic-save-buffer): Handle new values of require-final-newline.

lisp/files.el

index 4853e46095d85c2b9117d5d68a01d2d6dfe0cda1..d1340235ea5c1c7f449a4239969fb07bb6401122 100644 (file)
@@ -273,14 +273,40 @@ Includes the new backup.  Must be > 0"
   :group 'backup)
 
 (defcustom require-final-newline nil
-  "*Value of t says silently ensure a file ends in a newline when it is saved.
-Non-nil but not t says ask user whether to add a newline when there isn't one.
-nil means don't add newlines."
-  :type '(choice (const :tag "Off" nil)
-                (const :tag "Add" t)
+  "*Whether to add a newline automatically at the end of the file.
+
+A value of t means do this only when the file is about to be saved.
+A value of `visit' means do this right after the file is visited.
+A value of `visit-save' means do it at both of those times.
+Any other non-nil value means ask user whether to add a newline, when saving.
+nil means don't add newlines.
+
+Certain major modes set this locally to the value obtained
+from `mode-require-final-newline'."
+  :type '(choice (const :tag "When visiting" visit)
+                (const :tag "When saving" t)
+                (const :tag "When visiting or saving" visit-save)
+                (const :tag "Never" nil)
                 (other :tag "Ask" ask))
   :group 'editing-basics)
 
+(defcustom mode-require-final-newline t
+  "*Whether to add a newline at the end of the file, in certain major modes.
+Those modes set `require-final-newline' to this value when you enable them.
+They do so because they are used for files that are supposed
+to end in newlines, and the question is how to arrange that.
+
+A value of t means do this only when the file is about to be saved.
+A value of `visit' means do this right after the file is visited.
+A value of `visit-save' means do it at both of those times.
+Any other non-nil value means ask user whether to add a newline, when saving."
+  :type '(choice (const :tag "When visiting" visit)
+                (const :tag "When saving" t)
+                (const :tag "When visiting or saving" visit-save)
+                (other :tag "Ask" ask))
+  :group 'editing-basics
+  :version "21.4")
+
 (defcustom auto-save-default t
   "*Non-nil says by default do auto-saving of every file-visiting buffer."
   :type 'boolean
@@ -1627,6 +1653,15 @@ unless NOMODES is non-nil."
     (when (and view-read-only view-mode)
       (view-mode-disable))
     (normal-mode t)
+    ;; If requested, add a newline at the end of the file.
+    (and (memq require-final-newline '(visit visit-save))
+        (> (point-max) (point-min))
+        (/= (char-after (1- (point-max))) ?\n)
+        (not (and (eq selective-display t)
+                  (= (char-after (1- (point-max))) ?\r)))
+        (save-excursion
+          (goto-char (point-max))
+          (insert "\n")))
     (when (and buffer-read-only
               view-read-only
               (not (eq (get major-mode 'mode-class) 'special)))
@@ -3194,6 +3229,7 @@ Before and after saving the buffer, this function runs
                   (not (and (eq selective-display t)
                             (= (char-after (1- (point-max))) ?\r)))
                   (or (eq require-final-newline t)
+                      (eq require-final-newline 'visit-save)
                       (and require-final-newline
                            (y-or-n-p
                             (format "Buffer %s does not end in newline.  Add one? "