]> code.delx.au - gnu-emacs/blobdiff - lisp/time-stamp.el
Publicize cl--generic-all-functions
[gnu-emacs] / lisp / time-stamp.el
index 8fa5d99794595c947c0e96d949060dcbd9cfdab0..d4cddc92f9463b6438abd64cf903a5d7918716f6 100644 (file)
@@ -1,11 +1,10 @@
 ;;; time-stamp.el --- Maintain last change time stamps in files edited by Emacs
 
-;; Copyright (C) 1989, 1993-1995, 1997, 2000-2013 Free Software
+;; Copyright (C) 1989, 1993-1995, 1997, 2000-2016 Free Software
 ;; Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
-;; Maintainer's Time-stamp: <2006-04-12 20:30:56 rms>
 ;; Maintainer: Stephen Gildea <gildea@stop.mail-abuse.org>
 ;; Keywords: tools
 
@@ -27,7 +26,6 @@
 ;; A template in a file can be updated with a new time stamp when
 ;; you save the file.  For example:
 ;;     static char *ts = "sdmain.c Time-stamp: <2001-08-13 10:20:51 gildea>";
-;; See the top of `time-stamp.el' for another example.
 
 ;; To use time-stamping, add this line to your init file:
 ;;     (add-hook 'before-save-hook 'time-stamp)
@@ -121,9 +119,12 @@ If nil, no notification is given."
   :group 'time-stamp)
 
 (defcustom time-stamp-time-zone nil
-  "If non-nil, a string naming the timezone to be used by \\[time-stamp].
-Format is the same as that used by the environment variable TZ on your system."
-  :type '(choice (const nil) string)
+  "The time zone to be used by \\[time-stamp].
+Its format is that of the ZONE argument of the `format-time-string' function."
+  :type '(choice (const :tag "Emacs local time" nil)
+                 (const :tag "Universal Time" t)
+                 (const :tag "system wall clock time" wall)
+                 (string :tag "TZ environment variable value"))
   :group 'time-stamp
   :version "20.1")
 ;;;###autoload(put 'time-stamp-time-zone 'safe-local-variable 'string-or-null-p)
@@ -255,7 +256,7 @@ time-stamped file itself.")
   "Update the time stamp string(s) in the buffer.
 A template in a file can be automatically updated with a new time stamp
 every time you save the file.  Add this line to your init file:
-    (add-hook 'before-save-hook 'time-stamp)
+    (add-hook \\='before-save-hook \\='time-stamp)
 or customize `before-save-hook' through Custom.
 Normally the template must appear in the first 8 lines of a file and
 look like one of the following:
@@ -412,6 +413,8 @@ With ARG, turn time stamping on if and only if arg is positive."
          (> (prefix-numeric-value arg) 0)))
   (message "time-stamp is now %s." (if time-stamp-active "active" "off")))
 
+(defun time-stamp--format (format time)
+  (format-time-string format time time-stamp-time-zone))
 
 (defun time-stamp-string (&optional ts-format)
   "Generate the new string to be inserted by \\[time-stamp].
@@ -420,16 +423,7 @@ format the string."
   (or ts-format
       (setq ts-format time-stamp-format))
   (if (stringp ts-format)
-      (if (stringp time-stamp-time-zone)
-         (let ((ts-real-time-zone (getenv "TZ")))
-           (unwind-protect
-               (progn
-                 (setenv "TZ" time-stamp-time-zone)
-                 (format-time-string
-                  (time-stamp-string-preprocess ts-format)))
-             (setenv "TZ" ts-real-time-zone)))
-       (format-time-string
-        (time-stamp-string-preprocess ts-format)))
+      (time-stamp--format (time-stamp-string-preprocess ts-format) nil)
     ;; handle version 1 compatibility
     (cond ((or (eq time-stamp-old-format-warn 'error)
               (and (eq time-stamp-old-format-warn 'ask)
@@ -523,32 +517,32 @@ and all `time-stamp-format' compatibility."
          "%%")
         ((eq cur-char ?a)              ;day of week
          (if change-case
-             (format-time-string "%#a" time)
+             (time-stamp--format "%#a" time)
            (or alt-form (not (string-equal field-width ""))
                (time-stamp-conv-warn "%a" "%:a"))
            (if (and alt-form (not (string-equal field-width "")))
                ""                      ;discourage "%:3a"
-             (format-time-string "%A" time))))
+             (time-stamp--format "%A" time))))
         ((eq cur-char ?A)
          (if alt-form
-             (format-time-string "%A" time)
+             (time-stamp--format "%A" time)
            (or change-case (not (string-equal field-width ""))
                (time-stamp-conv-warn "%A" "%#A"))
-           (format-time-string "%#A" time)))
+           (time-stamp--format "%#A" time)))
         ((eq cur-char ?b)              ;month name
          (if change-case
-             (format-time-string "%#b" time)
+             (time-stamp--format "%#b" time)
            (or alt-form (not (string-equal field-width ""))
                (time-stamp-conv-warn "%b" "%:b"))
            (if (and alt-form (not (string-equal field-width "")))
                ""                      ;discourage "%:3b"
-           (format-time-string "%B" time))))
+           (time-stamp--format "%B" time))))
         ((eq cur-char ?B)
          (if alt-form
-             (format-time-string "%B" time)
+             (time-stamp--format "%B" time)
            (or change-case (not (string-equal field-width ""))
                (time-stamp-conv-warn "%B" "%#B"))
-           (format-time-string "%#B" time)))
+           (time-stamp--format "%#B" time)))
         ((eq cur-char ?d)              ;day of month, 1-31
          (time-stamp-do-number cur-char alt-form field-width time))
         ((eq cur-char ?H)              ;hour, 0-23
@@ -562,27 +556,27 @@ and all `time-stamp-format' compatibility."
         ((eq cur-char ?p)              ;am or pm
          (or change-case
              (time-stamp-conv-warn "%p" "%#p"))
-         (format-time-string "%#p" time))
+         (time-stamp--format "%#p" time))
         ((eq cur-char ?P)              ;AM or PM
-         (format-time-string "%p" time))
+         (time-stamp--format "%p" time))
         ((eq cur-char ?S)              ;seconds, 00-60
          (time-stamp-do-number cur-char alt-form field-width time))
         ((eq cur-char ?w)              ;weekday number, Sunday is 0
-         (format-time-string "%w" time))
+         (time-stamp--format "%w" time))
         ((eq cur-char ?y)              ;year
          (or alt-form (not (string-equal field-width ""))
              (time-stamp-conv-warn "%y" "%:y"))
-         (string-to-number (format-time-string "%Y" time)))
+         (string-to-number (time-stamp--format "%Y" time)))
         ((eq cur-char ?Y)              ;4-digit year, new style
-         (string-to-number (format-time-string "%Y" time)))
+         (string-to-number (time-stamp--format "%Y" time)))
         ((eq cur-char ?z)              ;time zone lower case
          (if change-case
              ""                        ;discourage %z variations
-           (format-time-string "%#Z" time)))
+           (time-stamp--format "%#Z" time)))
         ((eq cur-char ?Z)
          (if change-case
-             (format-time-string "%#Z" time)
-           (format-time-string "%Z" time)))
+             (time-stamp--format "%#Z" time)
+           (time-stamp--format "%Z" time)))
         ((eq cur-char ?f)              ;buffer-file-name, base name only
          (if buffer-file-name
              (file-name-nondirectory buffer-file-name)
@@ -642,7 +636,7 @@ width specification or \"\".  TIME is the time to convert."
                               (format "%%:%c" format-char)))
     (if (and alt-form (not (string-equal field-width "")))
        ""                              ;discourage "%:2d" and the like
-      (string-to-number (format-time-string format-string time)))))
+      (string-to-number (time-stamp--format format-string time)))))
 
 (defvar time-stamp-conversion-warn t
   "Warn about soon-to-be-unsupported forms in `time-stamp-format'.
@@ -685,7 +679,7 @@ otherwise the value of the function `system-name'."
 ;;; the rest of this file is for version 1 compatibility
 
 (defun time-stamp-fconcat (list sep)
-  "Similar to (mapconcat 'funcall LIST SEP) but LIST allows literals.
+  "Similar to (mapconcat \\='funcall LIST SEP) but LIST allows literals.
 If an element of LIST is a symbol, it is funcalled to get the string to use;
 the separator SEP is used between two strings obtained by funcalling a
 symbol.  Otherwise the element itself is inserted; no separator is used