annotate lisp/midnight.el @ 63308:51d38cfbe542

Warn about using "cvs up -kb" if one intends to commit changes. Add a pointer to another site with detailed configure and build instructions. Suggest to look at config.log when configure fails. Add MinGW Make 3.80 to the list of successful combinations.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 11 Jun 2005 11:31:29 +0000
parents cf0109fd6158
children 6fb026ad601f 08185296b491
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38414
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30509
diff changeset
1 ;;; midnight.el --- run something every midnight, e.g., kill old buffers
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
60911
f775b8952a66 * midnight.el: Replace `illegal' with `invalid'.
Werner LEMBERG <wl@gnu.org>
parents: 53858
diff changeset
3 ;;; Copyright (C) 1998, 2004, 2005 Free Software Foundation, Inc.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
38414
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30509
diff changeset
5 ;; Author: Sam Steingold <sds@usa.net>
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30509
diff changeset
6 ;; Maintainer: Sam Steingold <sds@usa.net>
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30509
diff changeset
7 ;; Created: 1998-05-18
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30509
diff changeset
8 ;; Keywords: utilities
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; any later version.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;; Boston, MA 02111-1307, USA.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;; Commentary:
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; To use the file, put (require 'midnight) into your .emacs. Then, at
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; midnight, Emacs will run the normal hook `midnight-hook'. You can
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; put whatever you like there, say, `calendar'; by default there is
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; only one function there - `clean-buffer-list'. It will kill the
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; buffers matching `clean-buffer-list-kill-buffer-names' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; `clean-buffer-list-kill-regexps' and the buffers which where last
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; displayed more than `clean-buffer-list-delay-general' days ago,
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; keeping `clean-buffer-list-kill-never-buffer-names' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; `clean-buffer-list-kill-never-regexps'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
39 ;;; Code:
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
40
22859
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
41 (eval-when-compile
23104
b1ce2a4bc9b0 Require `timer' not only when compiling.
Karl Heuer <kwzh@gnu.org>
parents: 23059
diff changeset
42 (require 'cl))
b1ce2a4bc9b0 Require `timer' not only when compiling.
Karl Heuer <kwzh@gnu.org>
parents: 23059
diff changeset
43
b1ce2a4bc9b0 Require `timer' not only when compiling.
Karl Heuer <kwzh@gnu.org>
parents: 23059
diff changeset
44 (require 'timer)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 (defgroup midnight nil
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 "Run something every day at midnight."
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
48 :group 'calendar
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
49 :version "20.3")
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50
61768
cf0109fd6158 (midnight-timer): Move defvar up.
Richard M. Stallman <rms@gnu.org>
parents: 60911
diff changeset
51 (defvar midnight-timer nil
cf0109fd6158 (midnight-timer): Move defvar up.
Richard M. Stallman <rms@gnu.org>
parents: 60911
diff changeset
52 "Timer running the `midnight-hook' `midnight-delay' seconds after midnight.
cf0109fd6158 (midnight-timer): Move defvar up.
Richard M. Stallman <rms@gnu.org>
parents: 60911
diff changeset
53 Use `cancel-timer' to stop it and `midnight-delay-set' to change
cf0109fd6158 (midnight-timer): Move defvar up.
Richard M. Stallman <rms@gnu.org>
parents: 60911
diff changeset
54 the time when it is run.")
cf0109fd6158 (midnight-timer): Move defvar up.
Richard M. Stallman <rms@gnu.org>
parents: 60911
diff changeset
55
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
56 (defcustom midnight-mode nil
22497
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
57 "*Non-nil means run `midnight-hook' at midnight.
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
58 Setting this variable outside customize has no effect;
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
59 call `cancel-timer' or `timer-activate' on `midnight-timer' instead."
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
60 :type 'boolean
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
61 :group 'midnight
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
62 :require 'midnight
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
63 :initialize 'custom-initialize-default
22497
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
64 :set (lambda (symb val)
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
65 (set symb val) (require 'midnight)
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
66 (if val (timer-activate midnight-timer)
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
67 (cancel-timer midnight-timer))))
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
68
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;;; time conversion
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
71 (defun midnight-time-float (num)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 "Convert the float number of seconds since epoch to the list of 3 integers."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 (let* ((div (ash 1 16)) (1st (floor num div)))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 (list 1st (floor (- num (* (float div) 1st)))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 (round (* 10000000 (mod num 1))))))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
77 (defun midnight-buffer-display-time (&optional buf)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 "Return the time-stamp of the given buffer, or current buffer, as float."
30458
241c83e5f559 midnight-buffer-display-time: use with-current-buffer
Sam Steingold <sds@gnu.org>
parents: 24387
diff changeset
79 (with-current-buffer (or buf (current-buffer))
30481
b603c68fff56 use float-time
Sam Steingold <sds@gnu.org>
parents: 30458
diff changeset
80 (when buffer-display-time (float-time buffer-display-time))))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;;; clean-buffer-list stuff
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 (defcustom clean-buffer-list-delay-general 3
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 "*The number of days before any buffer becomes eligible for autokilling.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 The autokilling is done by `clean-buffer-list' when is it in `midnight-hook'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 Currently displayed and/or modified (unsaved) buffers, as well as buffers
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 matching `clean-buffer-list-kill-never-buffer-names' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 `clean-buffer-list-kill-never-regexps' are excluded."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 :type 'integer
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
91 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 (defcustom clean-buffer-list-delay-special 3600
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 "*The number of seconds before some buffers become eligible for autokilling.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 Buffers matched by `clean-buffer-list-kill-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 `clean-buffer-list-kill-buffer-names' are killed if they were last
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 displayed more than this many seconds ago."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 :type 'integer
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
99 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100
22898
138b588a013c (clean-buffer-list-kill-regexps): Init to nil, as before.
Richard M. Stallman <rms@gnu.org>
parents: 22859
diff changeset
101 (defcustom clean-buffer-list-kill-regexps nil
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 "*List of regexps saying which buffers will be killed at midnight.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 If buffer name matches a regexp in the list and the buffer was not displayed
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 in the last `clean-buffer-list-delay-special' seconds, it is killed by
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 `clean-buffer-list' when is it in `midnight-hook'.
24387
32fd8c1e4e51 (clean-buffer-list-kill-regexps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 24149
diff changeset
106 If a member of the list is a cons, its `car' is the regexp and its `cdr' is
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 the number of seconds to use instead of `clean-buffer-list-delay-special'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 See also `clean-buffer-list-kill-buffer-names',
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 `clean-buffer-list-kill-never-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 `clean-buffer-list-kill-never-buffer-names'."
23345
b61fd1c104f9 (clean-buffer-list-kill-regexps): Improve custom type.
Richard M. Stallman <rms@gnu.org>
parents: 23268
diff changeset
111 :type '(repeat (regexp :tag "Regexp matching Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
112 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 (defcustom clean-buffer-list-kill-buffer-names
22898
138b588a013c (clean-buffer-list-kill-regexps): Init to nil, as before.
Richard M. Stallman <rms@gnu.org>
parents: 22859
diff changeset
115 '("*Help*" "*Apropos*" "*Man " "*Buffer List*" "*Compile-Log*" "*info*"
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
116 "*vc*" "*vc-diff*" "*diff*")
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 "*List of strings saying which buffers will be killed at midnight.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 Buffers with names in this list, which were not displayed in the last
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 `clean-buffer-list-delay-special' seconds, are killed by `clean-buffer-list'
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 when is it in `midnight-hook'.
24387
32fd8c1e4e51 (clean-buffer-list-kill-regexps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 24149
diff changeset
121 If a member of the list is a cons, its `car' is the name and its `cdr' is
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 the number of seconds to use instead of `clean-buffer-list-delay-special'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 See also `clean-buffer-list-kill-regexps',
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 `clean-buffer-list-kill-never-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 `clean-buffer-list-kill-never-buffer-names'."
23345
b61fd1c104f9 (clean-buffer-list-kill-regexps): Improve custom type.
Richard M. Stallman <rms@gnu.org>
parents: 23268
diff changeset
126 :type '(repeat (string :tag "Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
127 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 (defcustom clean-buffer-list-kill-never-buffer-names
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 '("*scratch*" "*Messages*")
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 "*List of buffer names which will never be killed by `clean-buffer-list'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 See also `clean-buffer-list-kill-never-regexps'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 Note that this does override `clean-buffer-list-kill-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 `clean-buffer-list-kill-buffer-names' so a buffer matching any of these
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 two lists will NOT be killed if it is also present in this list."
23345
b61fd1c104f9 (clean-buffer-list-kill-regexps): Improve custom type.
Richard M. Stallman <rms@gnu.org>
parents: 23268
diff changeset
136 :type '(repeat (string :tag "Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
137 :group 'midnight)
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
138
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139
30509
423583fa92f3 (clean-buffer-list-kill-never-regexps): Correctly
Gerd Moellmann <gerd@gnu.org>
parents: 30481
diff changeset
140 (defcustom clean-buffer-list-kill-never-regexps '("^ \\*Minibuf-.*\\*$")
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 "*List of regexp saying which buffers will never be killed at midnight.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 See also `clean-buffer-list-kill-never-buffer-names'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 Killing is done by `clean-buffer-list'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 Note that this does override `clean-buffer-list-kill-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 `clean-buffer-list-kill-buffer-names' so a buffer matching any of these
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 two lists will NOT be killed if it also matches anything in this list."
23345
b61fd1c104f9 (clean-buffer-list-kill-regexps): Improve custom type.
Richard M. Stallman <rms@gnu.org>
parents: 23268
diff changeset
147 :type '(repeat (regexp :tag "Regexp matching Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
148 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 (defun midnight-find (el ls test &optional key)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 "A stopgap solution to the absence of `find' in ELisp."
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
152 (dolist (rr ls)
30509
423583fa92f3 (clean-buffer-list-kill-never-regexps): Correctly
Gerd Moellmann <gerd@gnu.org>
parents: 30481
diff changeset
153 (when (funcall test (if key (funcall key rr) rr) el)
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
154 (return rr))))
22859
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
155
22898
138b588a013c (clean-buffer-list-kill-regexps): Init to nil, as before.
Richard M. Stallman <rms@gnu.org>
parents: 22859
diff changeset
156 (defun clean-buffer-list-delay (name)
138b588a013c (clean-buffer-list-kill-regexps): Init to nil, as before.
Richard M. Stallman <rms@gnu.org>
parents: 22859
diff changeset
157 "Return the delay, in seconds, before killing a buffer named NAME.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 Uses `clean-buffer-list-kill-buffer-names', `clean-buffer-list-kill-regexps'
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 `clean-buffer-list-delay-general' and `clean-buffer-list-delay-special'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 Autokilling is done by `clean-buffer-list'."
22898
138b588a013c (clean-buffer-list-kill-regexps): Init to nil, as before.
Richard M. Stallman <rms@gnu.org>
parents: 22859
diff changeset
161 (or (assoc-default name clean-buffer-list-kill-buffer-names 'string=
22859
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
162 clean-buffer-list-delay-special)
22898
138b588a013c (clean-buffer-list-kill-regexps): Init to nil, as before.
Richard M. Stallman <rms@gnu.org>
parents: 22859
diff changeset
163 (assoc-default name clean-buffer-list-kill-regexps 'string-match
22859
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
164 clean-buffer-list-delay-special)
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
165 (* clean-buffer-list-delay-general 24 60 60)))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166
23389
f6d920229f4c (clean-buffer-list): Add autoload cookie.
Karl Heuer <kwzh@gnu.org>
parents: 23345
diff changeset
167 ;;;###autoload
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 (defun clean-buffer-list ()
22898
138b588a013c (clean-buffer-list-kill-regexps): Init to nil, as before.
Richard M. Stallman <rms@gnu.org>
parents: 22859
diff changeset
169 "Kill old buffers that have not been displayed recently.
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
170 The relevant variables are `clean-buffer-list-delay-general',
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 `clean-buffer-list-delay-special', `clean-buffer-list-kill-buffer-names',
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 `clean-buffer-list-kill-never-buffer-names',
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
173 `clean-buffer-list-kill-regexps' and
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
174 `clean-buffer-list-kill-never-regexps'.
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
175 While processing buffers, this procedure displays messages containing
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
176 the current date/time, buffer name, how many seconds ago it was
23059
41745889db17 (midnight-hook): initialize to a list.
Richard M. Stallman <rms@gnu.org>
parents: 23040
diff changeset
177 displayed (can be nil if the buffer was never displayed) and its
41745889db17 (midnight-hook): initialize to a list.
Richard M. Stallman <rms@gnu.org>
parents: 23040
diff changeset
178 lifetime, i.e., its \"age\" when it will be purged."
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 (interactive)
30481
b603c68fff56 use float-time
Sam Steingold <sds@gnu.org>
parents: 30458
diff changeset
180 (let ((tm (float-time)) bts (ts (format-time-string "%Y-%m-%d %T"))
24149
123fd862314c (clean-buffer-list): do not kill a buffer if it has
Karl Heuer <kwzh@gnu.org>
parents: 23389
diff changeset
181 (bufs (buffer-list)) buf delay cbld bn)
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
182 (while (setq buf (pop bufs))
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
183 (setq bts (midnight-buffer-display-time buf) bn (buffer-name buf)
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
184 delay (if bts (- tm bts) 0) cbld (clean-buffer-list-delay bn))
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
185 (message "[%s] `%s' [%s %d]" ts bn (if bts (round delay)) cbld)
22859
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
186 (unless (or (midnight-find bn clean-buffer-list-kill-never-regexps
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 'string-match)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 (midnight-find bn clean-buffer-list-kill-never-buffer-names
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 'string-equal)
24149
123fd862314c (clean-buffer-list): do not kill a buffer if it has
Karl Heuer <kwzh@gnu.org>
parents: 23389
diff changeset
190 (get-buffer-process buf)
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
191 (and (buffer-file-name buf) (buffer-modified-p buf))
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
192 (get-buffer-window buf 'visible) (< delay cbld))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 (message "[%s] killing `%s'" ts bn)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 (kill-buffer buf)))))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 ;;; midnight hook
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 (defvar midnight-period (* 24 60 60)
22898
138b588a013c (clean-buffer-list-kill-regexps): Init to nil, as before.
Richard M. Stallman <rms@gnu.org>
parents: 22859
diff changeset
199 "The number of seconds in a day--the delta for `midnight-timer'.")
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200
23059
41745889db17 (midnight-hook): initialize to a list.
Richard M. Stallman <rms@gnu.org>
parents: 23040
diff changeset
201 (defcustom midnight-hook '(clean-buffer-list)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 "The hook run `midnight-delay' seconds after midnight every day.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 The default value is `clean-buffer-list'."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 :type 'hook
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
205 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 (defun midnight-next ()
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 "Return the number of seconds till the next midnight."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 (multiple-value-bind (sec min hrs) (decode-time)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 (- (* 24 60 60) (* 60 60 hrs) (* 60 min) sec)))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 ;;;###autoload
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 (defun midnight-delay-set (symb tm)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 "Modify `midnight-timer' according to `midnight-delay'.
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
215 Sets the first argument SYMB (which must be symbol `midnight-delay')
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
216 to its second argument TM."
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
217 (assert (eq symb 'midnight-delay) t
60911
f775b8952a66 * midnight.el: Replace `illegal' with `invalid'.
Werner LEMBERG <wl@gnu.org>
parents: 53858
diff changeset
218 "Invalid argument to `midnight-delay-set': `%s'")
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 (set symb tm)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 (when (timerp midnight-timer) (cancel-timer midnight-timer))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 (setq midnight-timer
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 (run-at-time (if (numberp tm) (+ (midnight-next) tm) tm)
22938
a45f2afb8ed9 (midnight-delay-set): Use run-hooks directly.
Richard M. Stallman <rms@gnu.org>
parents: 22936
diff changeset
223 midnight-period 'run-hooks 'midnight-hook)))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 (defcustom midnight-delay 3600
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 "*The number of seconds after the midnight when the `midnight-timer' is run.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 You should set this variable before loading midnight.el, or
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 set it by calling `midnight-delay-set', or use `custom'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 If you wish, you can use a string instead, it will be passed as the
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 first argument to `run-at-time'."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 :type 'sexp
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 :set 'midnight-delay-set
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
233 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 (provide 'midnight)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 38414
diff changeset
237 ;;; arch-tag: a5979be9-2890-46a3-ba84-791f0a4a6e80
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 ;;; midnight.el ends here