Mercurial > emacs
annotate lisp/time-stamp.el @ 13027:48358e0fa98e
(call_mod_hooks): Moved from intevals.c
(verify_interval_modification): Moved from intervals.c.
(interval_insert_behind_hooks, interval_insert_in_front_hooks): New variables.
(report_interval_modification): New function.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 12 Sep 1995 17:37:32 +0000 |
parents | 091ae363ac1c |
children | a2a68cba7996 |
rev | line source |
---|---|
3854 | 1 ;;; time-stamp.el --- Maintain last change time stamps in files edited by Emacs |
11404
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
2 ;;; Copyright 1989, 1993, 1994, 1995 Free Software Foundation, Inc. |
12044
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
3 ;;; Maintainer's Time-stamp: <95/05/31 10:47:14 gildea> |
3854 | 4 |
5 ;; Maintainer: Stephen Gildea <gildea@lcs.mit.edu> | |
6 ;; Keywords: tools | |
7 | |
8 ;; This file is free software; you can redistribute it and/or modify | |
9 ;; it under the terms of the GNU General Public License as published by | |
10 ;; the Free Software Foundation; either version 2, or (at your option) | |
11 ;; any later version. | |
12 | |
13 ;; This file is distributed in the hope that it will be useful, | |
14 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 ;; GNU General Public License for more details. | |
17 | |
18 ;; You should have received a copy of the GNU General Public License | |
19 ;; along with GNU Emacs; see the file COPYING. If not, write to | |
20 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
21 | |
22 ;;; Commentary: | |
23 | |
24 ;;; If you put a time stamp template anywhere in the first 8 lines of a file, | |
25 ;;; it can be updated every time you save the file. See the top of | |
26 ;;; time-stamp.el for a sample. The template looks like one of the following: | |
27 ;;; Time-stamp: <> | |
4325 | 28 ;;; Time-stamp: " " |
3854 | 29 ;;; The time stamp is written between the brackets or quotes, resulting in |
11404
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
30 ;;; Time-stamp: <95/01/18 10:20:51 gildea> |
3854 | 31 ;;; Here is an example which puts the file name and time stamp in the binary: |
32 ;;; static char *time_stamp = "sdmain.c Time-stamp: <>"; | |
33 | |
11404
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
34 ;;; To activate automatic time stamping in GNU Emacs 19, add this code |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
35 ;;; to your .emacs file: |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
36 ;;; (add-hook 'write-file-hooks 'time-stamp) |
3854 | 37 ;;; |
11404
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
38 ;;; In Emacs 18 you will need to do this instead: |
3854 | 39 ;;; (if (not (memq 'time-stamp write-file-hooks)) |
40 ;;; (setq write-file-hooks | |
41 ;;; (cons 'time-stamp write-file-hooks))) | |
5072 | 42 ;;; (autoload 'time-stamp "time-stamp" "Update the time stamp in a buffer." t) |
3854 | 43 |
11404
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
44 ;;; See the documentation for the function `time-stamp' for more details. |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
45 |
3854 | 46 ;;; Change Log: |
47 | |
48 ;;; Originally based on the 19 Dec 88 version of | |
49 ;;; date.el by John Sturdy <mcvax!harlqn.co.uk!jcgs@uunet.uu.net> | |
11404
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
50 ;;; version 2, January 1995: replaced functions with %-escapes |
12044
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
51 ;;; $Id: time-stamp.el,v 1.13 1995/05/30 21:20:09 kwzh Exp kwzh $ |
3854 | 52 |
53 ;;; Code: | |
54 | |
55 (defvar time-stamp-active t | |
11404
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
56 "*Non-nil to enable time-stamping of files. |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
57 Can be toggled by \\[time-stamp-toggle-active]. |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
58 See also the variable time-stamp-warn-inactive.") |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
59 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
60 (defvar time-stamp-warn-inactive t |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
61 "*Non-nil to have time-stamp warn if time-stamp-active is nil.") |
3854 | 62 |
11404
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
63 (defvar time-stamp-format "%02y/%02m/%02d %02H:%02M:%02S %u" |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
64 "*Template for the string inserted by the time-stamp function. |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
65 Value may be a string or a list. (Lists are supported only for |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
66 backward compatibility.) A string is used verbatim except for character |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
67 sequences beginning with %. See the documentation for the function |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
68 time-stamp-strftime for a list of %-escapes. |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
69 Each element of a list is called as a function and the results are |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
70 concatenated together separated by spaces. List elements may also be |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
71 strings, which are included verbatim. Spaces are not inserted around |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
72 literal strings.") |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
73 |
3854 | 74 |
75 ;;; Do not change time-stamp-line-limit, time-stamp-start, or | |
76 ;;; time-stamp-end in your .emacs or you will be incompatible | |
77 ;;; with other people's files! If you must change them, | |
78 ;;; do so only in the local variables section of the file itself. | |
79 | |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
80 (defvar time-stamp-line-limit 8 ;Do not change! |
3854 | 81 "Number of lines at the beginning of a file that are searched. |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
82 The patterns `time-stamp-start' and `time-stamp-end' must be found on one |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
83 of the first `time-stamp-line-limit' lines of the file for the file to |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
84 be time-stamped by \\[time-stamp]. |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
85 |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
86 Do not change `time-stamp-line-limit', `time-stamp-start', or |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
87 `time-stamp-end' for yourself or you will be incompatible |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
88 with other people's files! If you must change them for some application, |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
89 do so in the local variables section of the time-stamped file itself.") |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
90 |
3854 | 91 |
5971
f97f4938fffa
(time-stamp-start): Allow more white space
Richard M. Stallman <rms@gnu.org>
parents:
5632
diff
changeset
|
92 (defvar time-stamp-start "Time-stamp:[ \t]+\\\\?[\"<]+" ;Do not change! |
3854 | 93 "Regexp after which the time stamp is written by \\[time-stamp]. |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
94 See also the variables `time-stamp-end' and `time-stamp-line-limit'. |
3854 | 95 |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
96 Do not change `time-stamp-line-limit', `time-stamp-start', or |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
97 `time-stamp-end' for yourself or you will be incompatible |
3854 | 98 with other people's files! If you must change them for some application, |
99 do so in the local variables section of the time-stamped file itself.") | |
100 | |
101 | |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
102 (defvar time-stamp-end "\\\\?[\">]" ;Do not change! |
3854 | 103 "Regexp marking the text after the time stamp. |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
104 \\[time-stamp] deletes the text between the first match of `time-stamp-start' |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
105 and the following match of `time-stamp-end' on the same line, |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
106 then writes the time stamp specified by `time-stamp-format' between them. |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
107 |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
108 Do not change `time-stamp-line-limit', `time-stamp-start', or |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
109 `time-stamp-end' for yourself or you will be incompatible |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
110 with other people's files! If you must change them for some application, |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
111 do so in the local variables section of the time-stamped file itself.") |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
112 |
3854 | 113 |
4327
771786f5d8c2
(time-stamp): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
4325
diff
changeset
|
114 ;;;###autoload |
3854 | 115 (defun time-stamp () |
116 "Update the time stamp string in the buffer. | |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
117 If you put a time stamp template anywhere in the first 8 lines of a file, |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
118 it can be updated every time you save the file. See the top of |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
119 `time-stamp.el' for a sample. The template looks like one of the following: |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
120 Time-stamp: <> |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
121 Time-stamp: \" \" |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
122 The time stamp is written between the brackets or quotes, resulting in |
11404
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
123 Time-stamp: <95/01/18 10:20:51 gildea> |
3854 | 124 Only does its thing if the variable time-stamp-active is non-nil. |
125 Typically used on write-file-hooks for automatic time-stamping. | |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
126 The format of the time stamp is determined by the variable time-stamp-format. |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
127 The variables time-stamp-line-limit, time-stamp-start, and time-stamp-end |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
128 control finding the template." |
3854 | 129 (interactive) |
12023
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
130 (let ((case-fold-search nil) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
131 (need-to-warn nil)) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
132 (if (and (stringp time-stamp-start) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
133 (stringp time-stamp-end)) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
134 (save-excursion |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
135 (save-restriction |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
136 (widen) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
137 (goto-char (point-min)) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
138 (if (re-search-forward time-stamp-start |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
139 (save-excursion |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
140 (forward-line time-stamp-line-limit) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
141 (point)) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
142 t) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
143 (let ((start (point))) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
144 (if (re-search-forward time-stamp-end |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
145 (save-excursion |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
146 (end-of-line) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
147 (point)) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
148 t) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
149 (if time-stamp-active |
11404
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
150 (let ((end (match-beginning 0))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
151 (delete-region start end) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
152 (goto-char start) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
153 (insert (time-stamp-string)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
154 (setq end (point)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
155 ;; remove any tabs used to format the time stamp |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
156 (goto-char start) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
157 (if (search-forward "\t" end t) |
12023
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
158 (untabify start end))) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
159 (if time-stamp-warn-inactive |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
160 ;; do the actual warning outside save-excursion |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
161 (setq need-to-warn t)))))))) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
162 ;; don't signal an error in a write-file-hook |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
163 (message "time-stamp-start or time-stamp-end is not a string") |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
164 (sit-for 1)) |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
165 (if need-to-warn |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
166 (progn |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
167 (message "Warning: did not time-stamp buffer.") |
1a3e7aef5f8a
(time-stamp): only warn about time-stamping
Karl Heuer <kwzh@gnu.org>
parents:
11429
diff
changeset
|
168 (sit-for 1)))) |
3854 | 169 ;; be sure to return nil so can be used on write-file-hooks |
170 nil) | |
171 | |
11404
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
172 ;;;###autoload |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
173 (defun time-stamp-toggle-active (&optional arg) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
174 "Toggle time-stamp-active, which enables time stamping of files. |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
175 With arg, turn time stamping on if and only if arg is positive." |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
176 (interactive "P") |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
177 (setq time-stamp-active |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
178 (if (null arg) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
179 (not time-stamp-active) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
180 (> (prefix-numeric-value arg) 0))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
181 (message "time-stamp is now %s." (if time-stamp-active "active" "off"))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
182 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
183 |
3854 | 184 (defun time-stamp-string () |
185 "Generate the new string to be inserted by \\[time-stamp]." | |
11404
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
186 (if (stringp time-stamp-format) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
187 (time-stamp-strftime time-stamp-format) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
188 (time-stamp-fconcat time-stamp-format " "))) ;version 1 compatibility |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
189 |
12044
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
190 (defconst time-stamp-month-numbers |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
191 '(("Jan" . 1) ("Feb" . 2) ("Mar" . 3) ("Apr" . 4) ("May" . 5) ("Jun" . 6) |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
192 ("Jul" . 7) ("Aug" . 8) ("Sep" . 9) ("Oct" . 10) ("Nov" . 11) ("Dec" . 12)) |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
193 "Alist of months and their number.") |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
194 |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
195 (defconst time-stamp-month-full-names |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
196 ["(zero)" "January" "February" "March" "April" "May" "June" |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
197 "July" "August" "September" "October" "November" "December"]) |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
198 |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
199 (defconst time-stamp-weekday-numbers |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
200 '(("Sun" . 0) ("Mon" . 1) ("Tue" . 2) ("Wed" . 3) |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
201 ("Thu" . 4) ("Fri" . 5) ("Sat" . 6)) |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
202 "Alist of weekdays and their number.") |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
203 |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
204 (defconst time-stamp-weekday-full-names |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
205 ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"]) |
091ae363ac1c
Move defconsts to avoid byte-compiler warnings.
Karl Heuer <kwzh@gnu.org>
parents:
12023
diff
changeset
|
206 |
11404
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
207 (defun time-stamp-strftime (format &optional time) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
208 "Uses a FORMAT to format date, time, file, and user information. |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
209 Optional second argument TIME will be used instead of the current time. |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
210 Characters in the format are copied literally except for %-directives: |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
211 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
212 %a weekday name: `Monday'. %A gives uppercase: `MONDAY' |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
213 %b month name: `January'. %B gives uppercase: `JANUARY' |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
214 %d day of month |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
215 %H 24-hour clock hour |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
216 %I 12-hour clock hour |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
217 %m month number |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
218 %M minute |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
219 %p `am' or `pm'. %P gives uppercase: `AM' or `PM' |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
220 %S seconds |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
221 %w day number of week, Sunday is 0 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
222 %y year: `1995' |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
223 %z time zone name: `est'. %Z gives uppercase: `EST' |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
224 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
225 Non-date items: |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
226 %% a literal percent character: `%' |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
227 %f file name without directory %F gives absolute pathname |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
228 %s system name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
229 %u user's login name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
230 %h mail host name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
231 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
232 Decimal digits between the % and the type character specify the |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
233 field width. Strings are truncated on the right; numbers on the left. |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
234 A leading zero causes numbers to be zero-filled. |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
235 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
236 For example, to get the format used by the `date' command, |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
237 use \"%3a %3b %2d %02H:%02M:%02S %Z %y\"" |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
238 (let ((time-string (cond ((stringp time) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
239 time) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
240 (time |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
241 (current-time-string time)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
242 (t |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
243 (current-time-string)))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
244 (fmt-len (length format)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
245 (ind 0) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
246 cur-char |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
247 (result "") |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
248 field-index |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
249 field-width |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
250 field-result) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
251 (while (< ind fmt-len) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
252 (setq cur-char (aref format ind)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
253 (setq |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
254 result |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
255 (concat result |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
256 (cond |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
257 ((and (eq cur-char ?%) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
258 (< (1+ ind) fmt-len)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
259 (setq field-index (1+ ind)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
260 (while (progn |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
261 (setq ind (1+ ind)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
262 (setq cur-char (aref format ind)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
263 (and (<= ?0 cur-char) (>= ?9 cur-char)))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
264 (setq field-width (substring format field-index ind)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
265 (setq field-result |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
266 (cond |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
267 ((eq cur-char ?%) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
268 "%") |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
269 ((or (eq cur-char ?a) ;weekday name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
270 (eq cur-char ?A)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
271 (let ((name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
272 (aref time-stamp-weekday-full-names |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
273 (cdr (assoc (substring time-string 0 3) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
274 time-stamp-weekday-numbers))))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
275 (if (eq cur-char ?a) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
276 name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
277 (upcase name)))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
278 ((or (eq cur-char ?b) ;month name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
279 (eq cur-char ?B)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
280 (let ((name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
281 (aref time-stamp-month-full-names |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
282 (cdr (assoc (substring time-string 4 7) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
283 time-stamp-month-numbers))))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
284 (if (eq cur-char ?b) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
285 name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
286 (upcase name)))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
287 ((eq cur-char ?d) ;day of month, 1-31 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
288 (string-to-int (substring time-string 8 10))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
289 ((eq cur-char ?H) ;hour, 0-23 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
290 (string-to-int (substring time-string 11 13))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
291 ((eq cur-char ?I) ;hour, 1-12 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
292 (let ((hour (string-to-int (substring time-string 11 13)))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
293 (cond ((< hour 1) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
294 (+ hour 12)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
295 ((> hour 12) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
296 (- hour 12)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
297 (t |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
298 hour)))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
299 ((eq cur-char ?m) ;month number, 1-12 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
300 (cdr (assoc (substring time-string 4 7) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
301 time-stamp-month-numbers))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
302 ((eq cur-char ?M) ;minute, 0-59 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
303 (string-to-int (substring time-string 14 16))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
304 ((or (eq cur-char ?p) ;am or pm |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
305 (eq cur-char ?P)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
306 (let ((name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
307 (if (> 12 (string-to-int (substring time-string 11 13))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
308 "am" |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
309 "pm"))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
310 (if (eq cur-char ?p) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
311 name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
312 (upcase name)))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
313 ((eq cur-char ?S) ;seconds, 00-60 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
314 (string-to-int (substring time-string 17 19))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
315 ((eq cur-char ?w) ;weekday number, Sunday is 0 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
316 (cdr (assoc (substring time-string 0 3) time-stamp-weekday-numbers))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
317 ((eq cur-char ?y) ;year |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
318 (string-to-int (substring time-string -4))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
319 ((or (eq cur-char ?z) ;time zone |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
320 (eq cur-char ?Z)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
321 (let ((name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
322 (if (fboundp 'current-time-zone) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
323 (car (cdr (current-time-zone time)))))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
324 (or name (setq name "")) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
325 (if (eq cur-char ?z) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
326 (downcase name) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
327 (upcase name)))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
328 ((eq cur-char ?f) ;buffer-file-name, base name only |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
329 (if buffer-file-name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
330 (file-name-nondirectory buffer-file-name) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
331 "(no file)")) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
332 ((eq cur-char ?F) ;buffer-file-name, full path |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
333 (or buffer-file-name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
334 "(no file)")) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
335 ((eq cur-char ?s) ;system name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
336 (system-name)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
337 ((eq cur-char ?u) ;user name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
338 (user-login-name)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
339 ((eq cur-char ?h) ;mail host name |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
340 (time-stamp-mail-host-name)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
341 )) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
342 (if (string-equal field-width "") |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
343 field-result |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
344 (let ((padded-result |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
345 (format (format "%%%s%c" |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
346 field-width |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
347 (if (numberp field-result) ?d ?s)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
348 (or field-result "")))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
349 (let ((initial-length (length padded-result)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
350 (desired-length (string-to-int field-width))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
351 (if (> initial-length desired-length) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
352 ;; truncate strings on right, numbers on left |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
353 (if (stringp field-result) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
354 (substring padded-result 0 desired-length) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
355 (substring padded-result (- desired-length))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
356 padded-result))))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
357 (t |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
358 (char-to-string cur-char))))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
359 (setq ind (1+ ind))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
360 result)) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
361 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
362 (defun time-stamp-mail-host-name () |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
363 "Return the name of the host where the user receives mail. |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
364 This is the value of `mail-host-address' if bound and a string, |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
365 otherwise the value of `time-stamp-mail-host' (for versions of Emacs |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
366 before 19.29) otherwise the value of the function system-name. |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
367 This function may be usefully referenced by `time-stamp-format'." |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
368 (or (and (boundp 'mail-host-address) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
369 (stringp mail-host-address) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
370 mail-host-address) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
371 (and (boundp 'time-stamp-mail-host) ;for backward compatibility |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
372 (stringp time-stamp-mail-host) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
373 time-stamp-mail-host) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
374 (system-name))) |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
375 |
b12a8765508b
(time-stamp-format): Replace list of Lisp
Richard M. Stallman <rms@gnu.org>
parents:
9016
diff
changeset
|
376 ;;; the rest of this file is for version 1 compatibility |
3854 | 377 |
378 (defun time-stamp-fconcat (list sep) | |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
379 "Similar to (mapconcat 'funcall LIST SEP) but LIST allows literals. |
3854 | 380 If an element of LIST is a symbol, it is funcalled to get the string to use; |
381 the separator SEP is used between two strings obtained by funcalling a | |
382 symbol. Otherwise the element itself is inserted; no separator is used | |
383 around literals." | |
384 (let ((return-string "") | |
385 (insert-sep-p nil)) | |
386 (while list | |
387 (cond ((symbolp (car list)) | |
388 (if insert-sep-p | |
389 (setq return-string (concat return-string sep))) | |
390 (setq return-string (concat return-string (funcall (car list)))) | |
391 (setq insert-sep-p t)) | |
392 (t | |
393 (setq return-string (concat return-string (car list))) | |
394 (setq insert-sep-p nil))) | |
395 (setq list (cdr list))) | |
396 return-string)) | |
397 | |
398 | |
399 ;;; Some useful functions to use in time-stamp-format | |
400 | |
401 ;;; Could generate most of a message-id with | |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
402 ;;; '(time-stamp-yymmdd "" time-stamp-hhmm "@" time-stamp-mail-host-name) |
3854 | 403 |
404 ;;; pretty form, suitable for a title page | |
405 | |
406 (defun time-stamp-month-dd-yyyy () | |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
407 "Return the current date as a string in \"Month DD, YYYY\" form." |
3854 | 408 (let ((date (current-time-string))) |
5287
6811f9d90b62
(time-stamp-month-dd-yyyy): no leading zero on day.
Richard M. Stallman <rms@gnu.org>
parents:
5072
diff
changeset
|
409 (format "%s %d, %s" |
3854 | 410 (aref time-stamp-month-full-names |
411 (cdr (assoc (substring date 4 7) time-stamp-month-numbers))) | |
412 (string-to-int (substring date 8 10)) | |
413 (substring date -4)))) | |
414 | |
415 ;;; same as __DATE__ in ANSI C | |
416 | |
417 (defun time-stamp-mon-dd-yyyy () | |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
418 "Return the current date as a string in \"Mon DD YYYY\" form. |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
419 The first character of DD is space if the value is less than 10." |
3854 | 420 (let ((date (current-time-string))) |
421 (format "%s %2d %s" | |
422 (substring date 4 7) | |
423 (string-to-int (substring date 8 10)) | |
424 (substring date -4)))) | |
425 | |
426 ;;; RFC 822 date | |
427 | |
428 (defun time-stamp-dd-mon-yy () | |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
429 "Return the current date as a string in \"DD Mon YY\" form." |
3854 | 430 (let ((date (current-time-string))) |
431 (format "%02d %s %s" | |
432 (string-to-int (substring date 8 10)) | |
433 (substring date 4 7) | |
434 (substring date -2)))) | |
435 | |
436 ;;; RCS 3 date | |
437 | |
438 (defun time-stamp-yy/mm/dd () | |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
439 "Return the current date as a string in \"YY/MM/DD\" form." |
3854 | 440 (let ((date (current-time-string))) |
441 (format "%s/%02d/%02d" | |
442 (substring date -2) | |
443 (cdr (assoc (substring date 4 7) time-stamp-month-numbers)) | |
444 (string-to-int (substring date 8 10))))) | |
445 | |
446 ;;; RCS 5 date | |
447 | |
448 (defun time-stamp-yyyy/mm/dd () | |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
449 "Return the current date as a string in \"YYYY/MM/DD\" form." |
3854 | 450 (let ((date (current-time-string))) |
451 (format "%s/%02d/%02d" | |
452 (substring date -4) | |
453 (cdr (assoc (substring date 4 7) time-stamp-month-numbers)) | |
454 (string-to-int (substring date 8 10))))) | |
455 | |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
456 ;;; ISO 8601 date |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
457 |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
458 (defun time-stamp-yyyy-mm-dd () |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
459 "Return the current date as a string in \"YYYY-MM-DD\" form." |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
460 (let ((date (current-time-string))) |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
461 (format "%s-%02d-%02d" |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
462 (substring date -4) |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
463 (cdr (assoc (substring date 4 7) time-stamp-month-numbers)) |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
464 (string-to-int (substring date 8 10))))) |
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
465 |
3854 | 466 (defun time-stamp-yymmdd () |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
467 "Return the current date as a string in \"YYMMDD\" form." |
3854 | 468 (let ((date (current-time-string))) |
469 (format "%s%02d%02d" | |
470 (substring date -2) | |
471 (cdr (assoc (substring date 4 7) time-stamp-month-numbers)) | |
472 (string-to-int (substring date 8 10))))) | |
473 | |
474 (defun time-stamp-hh:mm:ss () | |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
475 "Return the current time as a string in \"HH:MM:SS\" form." |
3854 | 476 (substring (current-time-string) 11 19)) |
477 | |
478 (defun time-stamp-hhmm () | |
5632
63d80d94e0d7
Better, more user-oriented doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5287
diff
changeset
|
479 "Return the current time as a string in \"HHMM\" form." |
3854 | 480 (let ((date (current-time-string))) |
481 (concat (substring date 11 13) | |
482 (substring date 14 16)))) | |
483 | |
484 (provide 'time-stamp) | |
485 | |
486 ;;; time-stamp.el ends here |