From: Paul Eggert <eggert@cs.ucla.edu>
To: Glenn Morris <rgm@gnu.org>
Cc: 22302-done@debbugs.gnu.org, Harald Hanche-Olsen <hanche@math.ntnu.no>
Subject: bug#22302: 25.1.50; time-stamp ignores time-stamp-time-zone
Date: Tue, 12 Jan 2016 09:14:49 -0800 [thread overview]
Message-ID: <56953489.20700@cs.ucla.edu> (raw)
In-Reply-To: <3tziwb4dgz.fsf@fencepost.gnu.org>
[-- Attachment #1: Type: text/plain, Size: 796 bytes --]
On 01/11/2016 08:40 PM, Glenn Morris wrote:
> Harald Hanche-Olsen wrote:
>
>> Run emacs -Q and insert this text:
>> Time-stamp: <>
>>
>> Then do:
>> M-: (require 'time-stamp) RET
>> M-x set-variable RET time-stamp-time-zone RET "UTC" RET
>> M-x time-stamp
>>
>> Expected result: A UTC time stamp is inserted.
>> Actual result: A time stamp in the local time zone is inserted.
> This is due to af32fa956. Paul, could you have a look please?
Thanks for reporting this. I fixed the bug by installing the attached
patch to emacs-25.
By the way, the value "UTC" is not portable to non-GNU systems, and
POSIX says that in theory it could cause Emacs to crash. The value
should be "UTC0" or (in Emacs 25) t. I see that some of Emacs's own
source files have this issue, and plan to look into that.
[-- Attachment #2: 0001-Fix-time-stamp-time-zone-bugs-introduced-in-July.patch --]
[-- Type: text/x-patch, Size: 7956 bytes --]
From 92f27b6928b99b75630cda663c4a726c0b8ec0bf Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Tue, 12 Jan 2016 09:09:27 -0800
Subject: [PATCH] Fix time-stamp-time-zone bugs introduced in July
This fixes a bug introduced when the July changes to
format-time-string installed, as the changes were not
correctly handled in this module (Bug#22302).
Also, document time stamp time zones.
* lisp/time-stamp.el (time-stamp-time-zone): Document values better.
(time-stamp--format): New private function.
(time-stamp-string, time-stamp-string-preprocess)
(time-stamp-do-number): Use it.
* doc/emacs/files.texi (Time Stamps): Mention time zones.
* doc/misc/autotype.texi (Timestamps): Document time-stamp-time-zone.
---
doc/emacs/files.texi | 7 ++++---
doc/misc/autotype.texi | 8 +++++---
lisp/time-stamp.el | 48 ++++++++++++++++++++++++++----------------------
3 files changed, 35 insertions(+), 28 deletions(-)
diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi
index bfa55d3..3d5562d 100644
--- a/doc/emacs/files.texi
+++ b/doc/emacs/files.texi
@@ -881,9 +881,10 @@ Time Stamps
@code{before-save-hook} (@pxref{Hooks}). When you save the file, this
function then automatically updates the time stamp with the current
date and time. You can also use the command @kbd{M-x time-stamp} to
-update the time stamp manually. For other customizations, see the
-Custom group @code{time-stamp}. Note that the time stamp is formatted
-according to your locale setting (@pxref{Environment}).
+update the time stamp manually. By default the time stamp is
+formatted according to your locale setting (@pxref{Environment}) and
+time zone (@pxref{Time of Day,,, elisp, The Emacs Lisp Reference
+Manual}). For customizations, see the Custom group @code{time-stamp}.
@node Reverting
@section Reverting a Buffer
diff --git a/doc/misc/autotype.texi b/doc/misc/autotype.texi
index 839782a..6bdbd34 100644
--- a/doc/misc/autotype.texi
+++ b/doc/misc/autotype.texi
@@ -531,15 +531,17 @@ Timestamps
customization buffer.
@vindex time-stamp-active
+@findex time-stamp-toggle-active
@vindex time-stamp-format
-@vindex time-stamp-start
+@vindex time-stamp-time-zone
The time stamp is updated only if the customizable variable
@code{time-stamp-active} is on, which it is by default; the command
@code{time-stamp-toggle-active} can be used to toggle it. The format of
-the time stamp is set by the customizable variable
-@code{time-stamp-format}.
+the time stamp is set by the customizable variables
+@code{time-stamp-format} and @code{time-stamp-time-zone}.
@vindex time-stamp-line-limit
+@vindex time-stamp-start
@vindex time-stamp-end
@vindex time-stamp-count
@vindex time-stamp-inserts-lines
diff --git a/lisp/time-stamp.el b/lisp/time-stamp.el
index 46c993e..dffd590 100644
--- a/lisp/time-stamp.el
+++ b/lisp/time-stamp.el
@@ -121,9 +121,12 @@ time-stamp-old-format-warn
: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)
@@ -412,6 +415,8 @@ time-stamp-toggle-active
(> (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,8 +425,7 @@ time-stamp-string
(or ts-format
(setq ts-format time-stamp-format))
(if (stringp ts-format)
- (format-time-string (time-stamp-string-preprocess ts-format)
- nil time-stamp-time-zone)
+ (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)
@@ -515,32 +519,32 @@ time-stamp-string-preprocess
"%%")
((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
@@ -554,27 +558,27 @@ time-stamp-string-preprocess
((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)
@@ -634,7 +638,7 @@ time-stamp-do-number
(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'.
--
2.5.0
next prev parent reply other threads:[~2016-01-12 17:14 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-04 0:18 bug#22302: 25.1.50; time-stamp ignores time-stamp-time-zone Harald Hanche-Olsen
2016-01-12 4:40 ` Glenn Morris
2016-01-12 17:14 ` Paul Eggert [this message]
2016-01-12 17:47 ` Glenn Morris
2016-01-12 20:19 ` Paul Eggert
2016-01-12 20:51 ` Eli Zaretskii
2016-01-12 21:29 ` Paul Eggert
2016-01-13 15:47 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56953489.20700@cs.ucla.edu \
--to=eggert@cs.ucla.edu \
--cc=22302-done@debbugs.gnu.org \
--cc=hanche@math.ntnu.no \
--cc=rgm@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).