Commit c9c0e4bb authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

(time-stamp-am-pm): Variable deleted.

(time-stamp-weekday-full-names): Likewise.
(time-stamp-weekday-numbers): Likewise.
(time-stamp-old-format-warn): Doc fix.

(time-stamp-strftime): Function deleted.
(time-stamp-string): Use format-time-string.
(time-stamp-format): Change default value
to work with format-time-string.
parent a39a6e40
......@@ -40,7 +40,7 @@
;; Originally based on the 19 Dec 88 version of
;; date.el by John Sturdy <mcvax!harlqn.co.uk!jcgs@uunet.uu.net>
;; Version 2, January 1995: replaced functions with %-escapes
;; $Id: time-stamp.el,v 1.19 1996/09/22 22:20:58 kwzh Exp rms $
;; $Id: time-stamp.el,v 1.20 1996/11/05 18:27:41 rms Exp rms $
;;; Code:
......@@ -56,44 +56,18 @@ a time stamp template that would otherwise have been updated.")
(defvar time-stamp-old-format-warn 'ask
"Action to take if `time-stamp-format' is an old-style list.
If 'error, the format is not used. If 'ask, the user is queried about
using the time-stamp-format. If 'warn, a warning is displayed.
If `error', the format is not used. If `ask', the user is queried about
using the time-stamp-format. If `warn', a warning is displayed.
If nil, no notification is given.")
(defvar time-stamp-format "%y-%02m-%02d %02H:%02M:%02S %u"
(defvar time-stamp-format "%y-%m-%d %H:%M:%S %u"
"*Format of the string inserted by \\[time-stamp].
Value may be a string or a list. (Lists are supported only for
backward compatibility; see variable `time-stamp-old-format-warn'.)
A string is used verbatim except for character sequences beginning with %:
%a weekday name: `Monday'. %A gives uppercase: `MONDAY'
%b month name: `January'. %B gives uppercase: `JANUARY'
%d day of month
%H 24-hour clock hour
%I 12-hour clock hour
%m month number
%M minute
%p `am' or `pm'. %P gives uppercase: `AM' or `PM'
%S seconds
%w day number of week, Sunday is 0
%y year: `1995'
%z time zone name: `est'. %Z gives uppercase: `EST'
Non-date items:
%% a literal percent character: `%'
%f file name without directory %F gives absolute pathname
%s system name
%u user's login name
%h mail host name
Decimal digits between the % and the type character specify the
field width. Strings are truncated on the right; numbers on the left.
A leading zero causes numbers to be zero-filled.
The value may be a string or a list. Lists are supported only for
backward compatibility; see variable `time-stamp-old-format-warn'.
A string is used with `format-time-string'.
For example, to get the format used by the `date' command,
use \"%3a %3b %2d %02H:%02M:%02S %Z %y\"")
use \"%3a %3b %2d %H:%M:%S %Z %y\"")
;;; Do not change time-stamp-line-limit, time-stamp-start, or
;;; time-stamp-end in your .emacs or you will be incompatible
......@@ -224,7 +198,7 @@ With arg, turn time stamping on if and only if arg is positive."
(defun time-stamp-string ()
"Generate the new string to be inserted by \\[time-stamp]."
(if (stringp time-stamp-format)
(time-stamp-strftime time-stamp-format)
(format-time-string time-stamp-format (current-time))
;; handle version 1 compatibility
(cond ((or (eq time-stamp-old-format-warn 'error)
(and (eq time-stamp-old-format-warn 'ask)
......@@ -247,171 +221,9 @@ With arg, turn time stamping on if and only if arg is positive."
["(zero)" "January" "February" "March" "April" "May" "June"
"July" "August" "September" "October" "November" "December"])
(defconst time-stamp-weekday-numbers
'(("Sun" . 0) ("Mon" . 1) ("Tue" . 2) ("Wed" . 3)
("Thu" . 4) ("Fri" . 5) ("Sat" . 6))
"Alist of weekdays and their number.")
(defconst time-stamp-weekday-full-names
["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"])
(defconst time-stamp-am-pm '("am" "pm")
"List of strings used to denote morning and afternoon.")
(defconst time-stamp-no-file "(no file)"
"String to use when the buffer is not associated with a file.")
(defun time-stamp-strftime (format &optional time)
"Uses a FORMAT to format date, time, file, and user information.
Optional second argument TIME will be used instead of the current time.
See the documentation of the variable `time-stamp-format' for a description
of the format string."
(let ((time-string (cond ((stringp time)
time)
(time
(current-time-string time))
(t
(current-time-string))))
(fmt-len (length format))
(ind 0)
cur-char
(prev-char nil)
(result "")
field-index
field-width
field-result
(paren-level 0))
(while (< ind fmt-len)
(setq cur-char (aref format ind))
(setq
result
(concat result
(cond
((eq cur-char ?%)
(setq field-index (1+ ind))
(while (progn
(setq ind (1+ ind))
(setq cur-char (if (< ind fmt-len)
(aref format ind)
?\0))
(and (<= ?0 cur-char) (>= ?9 cur-char))))
(setq field-width (substring format field-index ind))
;; eat any additional args to allow for future expansion
(while (or (and (<= ?0 cur-char) (>= ?9 cur-char)) (eq ?. cur-char)
(eq ?, cur-char) (eq ?: cur-char) (eq ?@ cur-char)
(eq ?- cur-char) (eq ?+ cur-char)
(eq ?\ cur-char) (eq ?# cur-char)
(and (eq ?\( cur-char)
(not (eq prev-char ?\\))
(setq paren-level (1+ paren-level)))
(if (and (eq ?\) cur-char)
(not (eq prev-char ?\\))
(> paren-level 0))
(setq paren-level (1- paren-level))
(and (> paren-level 0)
(< ind fmt-len))))
(setq ind (1+ ind))
(setq prev-char cur-char)
(setq cur-char (if (< ind fmt-len)
(aref format ind)
?\0)))
(setq field-result
(cond
((eq cur-char ?%)
"%")
((or (eq cur-char ?a) ;weekday name
(eq cur-char ?A))
(let ((name
(aref time-stamp-weekday-full-names
(cdr (assoc (substring time-string 0 3)
time-stamp-weekday-numbers)))))
(if (eq cur-char ?a)
name
(upcase name))))
((or (eq cur-char ?b) ;month name
(eq cur-char ?B))
(let ((name
(aref time-stamp-month-full-names
(cdr (assoc (substring time-string 4 7)
time-stamp-month-numbers)))))
(if (eq cur-char ?b)
name
(upcase name))))
((eq cur-char ?d) ;day of month, 1-31
(string-to-int (substring time-string 8 10)))
((eq cur-char ?H) ;hour, 0-23
(string-to-int (substring time-string 11 13)))
((eq cur-char ?I) ;hour, 1-12
(let ((hour (string-to-int (substring time-string 11 13))))
(cond ((< hour 1)
(+ hour 12))
((> hour 12)
(- hour 12))
(t
hour))))
((eq cur-char ?m) ;month number, 1-12
(cdr (assoc (substring time-string 4 7)
time-stamp-month-numbers)))
((eq cur-char ?M) ;minute, 0-59
(string-to-int (substring time-string 14 16)))
((or (eq cur-char ?p) ;am or pm
(eq cur-char ?P))
(let ((name
(if (> 12 (string-to-int (substring time-string 11 13)))
(car time-stamp-am-pm)
(car (cdr time-stamp-am-pm)))))
(if (eq cur-char ?p)
name
(upcase name))))
((eq cur-char ?S) ;seconds, 00-60
(string-to-int (substring time-string 17 19)))
((eq cur-char ?w) ;weekday number, Sunday is 0
(cdr (assoc (substring time-string 0 3) time-stamp-weekday-numbers)))
((eq cur-char ?y) ;year
(string-to-int (substring time-string -4)))
((or (eq cur-char ?z) ;time zone
(eq cur-char ?Z))
(let ((name
(if (fboundp 'current-time-zone)
(car (cdr (current-time-zone time))))))
(or name (setq name ""))
(if (eq cur-char ?z)
(downcase name)
(upcase name))))
((eq cur-char ?f) ;buffer-file-name, base name only
(if buffer-file-name
(file-name-nondirectory buffer-file-name)
time-stamp-no-file))
((eq cur-char ?F) ;buffer-file-name, full path
(or buffer-file-name
time-stamp-no-file))
((eq cur-char ?s) ;system name
(system-name))
((eq cur-char ?u) ;user name
(user-login-name))
((eq cur-char ?h) ;mail host name
(time-stamp-mail-host-name))
))
(if (string-equal field-width "")
field-result
(let ((padded-result
(format (format "%%%s%c"
field-width
(if (numberp field-result) ?d ?s))
(or field-result ""))))
(let ((initial-length (length padded-result))
(desired-length (string-to-int field-width)))
(if (> initial-length desired-length)
;; truncate strings on right, numbers on left
(if (stringp field-result)
(substring padded-result 0 desired-length)
(substring padded-result (- desired-length)))
padded-result)))))
(t
(char-to-string cur-char)))))
(setq ind (1+ ind)))
result))
(defun time-stamp-mail-host-name ()
"Return the name of the host where the user receives mail.
This is the value of `mail-host-address' if bound and a string,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment