;;; time-stamp.el --- Maintain last change time stamps in files edited by Emacs
-;; Copyright 1989, 1993, 1994, 1995, 1997, 2000, 2001
-;;; Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1993, 1994, 1995, 1997, 2000, 2001, 2002, 2003,
+;; 2004, 2005, 2006 Free Software Foundation, Inc.
;; This file is part of GNU Emacs.
-;; Maintainer's Time-stamp: <2004-06-13 14:22:25 teirllm>
+;; Maintainer's Time-stamp: <2006-04-12 20:30:56 rms>
;; Maintainer: Stephen Gildea <gildea@stop.mail-abuse.org>
;; Keywords: tools
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
:type 'string
:group 'time-stamp
:version "20.1")
+;;;###autoload(put 'time-stamp-format 'safe-local-variable 'stringp)
(defcustom time-stamp-active t
"*Non-nil to enable time-stamping of buffers by \\[time-stamp].
file to be time-stamped by \\[time-stamp]. A value of 0 searches the
entire buffer (use with care).
-Do not change `time-stamp-line-limit', `time-stamp-start', or
-`time-stamp-end' for yourself or you will be incompatible
-with other people's files! If you must change them for some application,
-do so in the local variables section of the time-stamped file itself.")
+This value can also be set with the variable `time-stamp-pattern'.
+Do not change `time-stamp-line-limit', `time-stamp-start',
+`time-stamp-end', or `time-stamp-pattern' for yourself or you will be
+incompatible with other people's files! If you must change them for some
+application, do so in the local variables section of the time-stamped file
+itself.")
+;;;###autoload(put 'time-stamp-line-limit 'safe-local-variable 'integerp)
(defvar time-stamp-start "Time-stamp:[ \t]+\\\\?[\"<]+" ;Do not change!
"Regexp after which the time stamp is written by \\[time-stamp].
See also the variables `time-stamp-end' and `time-stamp-line-limit'.
-Do not change `time-stamp-line-limit', `time-stamp-start', or
-`time-stamp-end' for yourself or you will be incompatible
-with other people's files! If you must change them for some application,
-do so in the local variables section of the time-stamped file itself.")
+This value can also be set with the variable `time-stamp-pattern'.
+Do not change `time-stamp-line-limit', `time-stamp-start',
+`time-stamp-end', or `time-stamp-pattern' for yourself or you will be
+incompatible with other people's files! If you must change them for some
+application, do so in the local variables section of the time-stamped file
+itself.")
+;;;###autoload(put 'time-stamp-start 'safe-local-variable t)
(defvar time-stamp-end "\\\\?[\">]" ;Do not change!
"Regexp marking the text after the time stamp.
and the following match of `time-stamp-end', then writes the
time stamp specified by `time-stamp-format' between them.
+This value can also be set with the variable `time-stamp-pattern'.
+
The end text normally starts on the same line as the start text ends,
but if there are any newlines in `time-stamp-format', the same number
of newlines must separate the start and end. \\[time-stamp] tries
to not change the number of lines in the buffer. `time-stamp-inserts-lines'
controls this behavior.
-Do not change `time-stamp-line-limit', `time-stamp-start', `time-stamp-end',
+Do not change `time-stamp-start', `time-stamp-end', `time-stamp-pattern',
or `time-stamp-inserts-lines' for yourself or you will be incompatible
with other people's files! If you must change them for some application,
do so in the local variables section of the time-stamped file itself.")
+;;;###autoload(put 'time-stamp-end 'safe-local-variable t)
(defvar time-stamp-inserts-lines nil ;Do not change!
yourself or you will be incompatible with other people's files!
If you must change them for some application, do so in the local
variables section of the time-stamped file itself.")
+;;;###autoload(put 'time-stamp-inserts-lines 'safe-local-variable t)
(defvar time-stamp-count 1 ;Do not change!
incompatible with other people's files! If you must change it for
some application, do so in the local variables section of the
time-stamped file itself.")
+;;;###autoload(put 'time-stamp-count 'safe-local-variable 'integerp)
(defvar time-stamp-pattern nil ;Do not change!
\"@set Time-stamp: %:b %:d, %:y$\"
\"newcommand{\\\\\\\\timestamp}{%%}\"
-Do not change `time-stamp-pattern' for yourself or you will be incompatible
-with other people's files! Set it only in the local variables section
-of the time-stamped file itself.")
+Do not change `time-stamp-pattern' `time-stamp-line-limit',
+`time-stamp-start', or `time-stamp-end' for yourself or you will be
+incompatible with other people's files! If you must change them for
+some application, do so only in the local variables section of the
+time-stamped file itself.")
+;;;###autoload(put 'time-stamp-pattern 'safe-local-variable 'stringp)
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 .emacs file:
(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:
Time-stamp: <>
The time stamp is written between the brackets or quotes:
Time-stamp: <2001-02-18 10:20:51 gildea>
The time stamp is updated only if the variable `time-stamp-active' is non-nil.
-The format of the time stamp is set by the variable `time-stamp-format'.
-The variables `time-stamp-line-limit', `time-stamp-start', `time-stamp-end',
-`time-stamp-count', and `time-stamp-inserts-lines' control finding the
-template."
+The format of the time stamp is set by the variable `time-stamp-pattern' or
+`time-stamp-format'. The variables `time-stamp-pattern',
+`time-stamp-line-limit', `time-stamp-start', `time-stamp-end',
+`time-stamp-count', and `time-stamp-inserts-lines' control finding
+the template."
(interactive)
(let ((line-limit time-stamp-line-limit)
(ts-start time-stamp-start)
(string-match "\\`\\(\\(-?[0-9]+\\)/\\)?\\([^%]+\\)?\\(\\(%[-.,:@+_ #^()0-9]*[A-Za-z%][^%]*\\)*%[-.,:@+_ #^()0-9]*[A-Za-z%]\\)?\\([^%]+\\)?\\'" time-stamp-pattern)
(and (match-beginning 2)
(setq line-limit
- (string-to-int (match-string 2 time-stamp-pattern))))
+ (string-to-number (match-string 2 time-stamp-pattern))))
(and (match-beginning 3)
(setq ts-start (match-string 3 time-stamp-pattern)))
(and (match-beginning 4)
((eq cur-char ?y) ;year
(or alt-form (not (string-equal field-width ""))
(time-stamp-conv-warn "%y" "%:y"))
- (string-to-int (format-time-string "%Y" time)))
+ (string-to-number (format-time-string "%Y" time)))
((eq cur-char ?Y) ;4-digit year, new style
- (string-to-int (format-time-string "%Y" time)))
+ (string-to-number (format-time-string "%Y" time)))
((eq cur-char ?z) ;time zone lower case
(if change-case
"" ;discourage %z variations
(user-full-name))
((eq cur-char ?h) ;mail host name
(time-stamp-mail-host-name))
+ ((eq cur-char ?q) ;(undocumented unqual hostname)
+ (let ((qualname (system-name)))
+ (if (string-match "\\." qualname)
+ (substring qualname 0 (match-beginning 0))
+ qualname)))
+ ((eq cur-char ?Q) ;(undocumented fully-qualified host)
+ (system-name))
))
(let ((padded-result
(format (format "%%%s%c"
(let* ((initial-length (length padded-result))
(desired-length (if (string-equal field-width "")
initial-length
- (string-to-int field-width))))
+ (string-to-number field-width))))
(if (> initial-length desired-length)
;; truncate strings on right, years on left
(if (stringp field-result)
(format "%%:%c" format-char)))
(if (and alt-form (not (string-equal field-width "")))
"" ;discourage "%:2d" and the like
- (string-to-int (format-time-string format-string time)))))
+ (string-to-number (format-time-string format-string time)))))
(defvar time-stamp-conversion-warn t
"Warn about soon-to-be-unsupported forms in `time-stamp-format'.