annotate lisp/midnight.el @ 72550:666bd542be19

(get_window_cursor_type): Replace BOX cursor on images with a hollow box cursor if image is larger than 32x32 (or the default frame font if that is bigger). Replace any other cursor on images with hollow box cursor, as redisplay doesn't support bar and hbar cursors on images.
author Kim F. Storm <storm@cua.dk>
date Sun, 27 Aug 2006 22:23:07 +0000
parents 724b1ba5b55c
children 20cd037496f9 a7364c1a561e
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
68651
3bd95f4f2941 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64762
diff changeset
3 ;; Copyright (C) 1998, 2002, 2003, 2004, 2005,
3bd95f4f2941 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64762
diff changeset
4 ;; 2006 Free Software Foundation, Inc.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
38414
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30509
diff changeset
6 ;; Author: Sam Steingold <sds@usa.net>
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30509
diff changeset
7 ;; Maintainer: Sam Steingold <sds@usa.net>
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30509
diff changeset
8 ;; Created: 1998-05-18
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30509
diff changeset
9 ;; Keywords: utilities
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; GNU Emacs is free software; you can redistribute it and/or modify
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; 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
15 ;; the Free Software Foundation; either version 2, or (at your option)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; any later version.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; GNU General Public License for more details.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 61768
diff changeset
25 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 61768
diff changeset
26 ;; Boston, MA 02110-1301, USA.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;;; Commentary:
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; To use the file, put (require 'midnight) into your .emacs. Then, at
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; midnight, Emacs will run the normal hook `midnight-hook'. You can
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; put whatever you like there, say, `calendar'; by default there is
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; only one function there - `clean-buffer-list'. It will kill the
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; buffers matching `clean-buffer-list-kill-buffer-names' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; `clean-buffer-list-kill-regexps' and the buffers which where last
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; displayed more than `clean-buffer-list-delay-general' days ago,
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; keeping `clean-buffer-list-kill-never-buffer-names' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;; `clean-buffer-list-kill-never-regexps'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
40 ;;; Code:
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
41
22859
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
42 (eval-when-compile
23104
b1ce2a4bc9b0 Require `timer' not only when compiling.
Karl Heuer <kwzh@gnu.org>
parents: 23059
diff changeset
43 (require 'cl))
b1ce2a4bc9b0 Require `timer' not only when compiling.
Karl Heuer <kwzh@gnu.org>
parents: 23059
diff changeset
44
b1ce2a4bc9b0 Require `timer' not only when compiling.
Karl Heuer <kwzh@gnu.org>
parents: 23059
diff changeset
45 (require 'timer)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 (defgroup midnight nil
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 "Run something every day at midnight."
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
49 :group 'calendar
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
50 :version "20.3")
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51
61768
cf0109fd6158 (midnight-timer): Move defvar up.
Richard M. Stallman <rms@gnu.org>
parents: 60911
diff changeset
52 (defvar midnight-timer nil
cf0109fd6158 (midnight-timer): Move defvar up.
Richard M. Stallman <rms@gnu.org>
parents: 60911
diff changeset
53 "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
54 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
55 the time when it is run.")
cf0109fd6158 (midnight-timer): Move defvar up.
Richard M. Stallman <rms@gnu.org>
parents: 60911
diff changeset
56
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
57 (defcustom midnight-mode nil
22497
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
58 "*Non-nil means run `midnight-hook' at midnight.
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
59 Setting this variable outside customize has no effect;
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
60 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
61 :type 'boolean
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
62 :group 'midnight
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
63 :require 'midnight
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
64 :initialize 'custom-initialize-default
22497
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
65 :set (lambda (symb val)
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
66 (set symb val) (require 'midnight)
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
67 (if val (timer-activate midnight-timer)
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
68 (cancel-timer midnight-timer))))
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
69
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;;; time conversion
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
72 (defun midnight-time-float (num)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 "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
74 (let* ((div (ash 1 16)) (1st (floor num div)))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 (list 1st (floor (- num (* (float div) 1st)))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 (round (* 10000000 (mod num 1))))))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
78 (defun midnight-buffer-display-time (&optional buf)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 "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
80 (with-current-buffer (or buf (current-buffer))
30481
b603c68fff56 use float-time
Sam Steingold <sds@gnu.org>
parents: 30458
diff changeset
81 (when buffer-display-time (float-time buffer-display-time))))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;;; clean-buffer-list stuff
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 (defcustom clean-buffer-list-delay-general 3
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 "*The number of days before any buffer becomes eligible for autokilling.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 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
88 Currently displayed and/or modified (unsaved) buffers, as well as buffers
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 matching `clean-buffer-list-kill-never-buffer-names' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 `clean-buffer-list-kill-never-regexps' are excluded."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 :type 'integer
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
92 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 (defcustom clean-buffer-list-delay-special 3600
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 "*The number of seconds before some buffers become eligible for autokilling.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 Buffers matched by `clean-buffer-list-kill-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 `clean-buffer-list-kill-buffer-names' are killed if they were last
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 displayed more than this many seconds ago."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 :type 'integer
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
100 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101
22898
138b588a013c (clean-buffer-list-kill-regexps): Init to nil, as before.
Richard M. Stallman <rms@gnu.org>
parents: 22859
diff changeset
102 (defcustom clean-buffer-list-kill-regexps nil
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 "*List of regexps saying which buffers will be killed at midnight.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 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
105 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
106 `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
107 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
108 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
109 See also `clean-buffer-list-kill-buffer-names',
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 `clean-buffer-list-kill-never-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 `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
112 :type '(repeat (regexp :tag "Regexp matching Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
113 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 (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
116 '("*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
117 "*vc*" "*vc-diff*" "*diff*")
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 "*List of strings saying which buffers will be killed at midnight.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 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
120 `clean-buffer-list-delay-special' seconds, are killed by `clean-buffer-list'
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 when is it in `midnight-hook'.
24387
32fd8c1e4e51 (clean-buffer-list-kill-regexps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 24149
diff changeset
122 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
123 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
124 See also `clean-buffer-list-kill-regexps',
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 `clean-buffer-list-kill-never-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 `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
127 :type '(repeat (string :tag "Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
128 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 (defcustom clean-buffer-list-kill-never-buffer-names
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 '("*scratch*" "*Messages*")
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 "*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
133 See also `clean-buffer-list-kill-never-regexps'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 Note that this does override `clean-buffer-list-kill-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 `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
136 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
137 :type '(repeat (string :tag "Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
138 :group 'midnight)
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
139
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140
30509
423583fa92f3 (clean-buffer-list-kill-never-regexps): Correctly
Gerd Moellmann <gerd@gnu.org>
parents: 30481
diff changeset
141 (defcustom clean-buffer-list-kill-never-regexps '("^ \\*Minibuf-.*\\*$")
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 "*List of regexp saying which buffers will never be killed at midnight.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 See also `clean-buffer-list-kill-never-buffer-names'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 Killing is done by `clean-buffer-list'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 Note that this does override `clean-buffer-list-kill-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 `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
147 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
148 :type '(repeat (regexp :tag "Regexp matching Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
149 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 (defun midnight-find (el ls test &optional key)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 "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
153 (dolist (rr ls)
30509
423583fa92f3 (clean-buffer-list-kill-never-regexps): Correctly
Gerd Moellmann <gerd@gnu.org>
parents: 30481
diff changeset
154 (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
155 (return rr))))
22859
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
156
22898
138b588a013c (clean-buffer-list-kill-regexps): Init to nil, as before.
Richard M. Stallman <rms@gnu.org>
parents: 22859
diff changeset
157 (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
158 "Return the delay, in seconds, before killing a buffer named NAME.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 Uses `clean-buffer-list-kill-buffer-names', `clean-buffer-list-kill-regexps'
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 `clean-buffer-list-delay-general' and `clean-buffer-list-delay-special'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 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
162 (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
163 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
164 (assoc-default name clean-buffer-list-kill-regexps 'string-match
22859
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
165 clean-buffer-list-delay-special)
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
166 (* clean-buffer-list-delay-general 24 60 60)))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167
23389
f6d920229f4c (clean-buffer-list): Add autoload cookie.
Karl Heuer <kwzh@gnu.org>
parents: 23345
diff changeset
168 ;;;###autoload
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 (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
170 "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
171 The relevant variables are `clean-buffer-list-delay-general',
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 `clean-buffer-list-delay-special', `clean-buffer-list-kill-buffer-names',
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 `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
174 `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
175 `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
176 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
177 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
178 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
179 lifetime, i.e., its \"age\" when it will be purged."
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 (interactive)
30481
b603c68fff56 use float-time
Sam Steingold <sds@gnu.org>
parents: 30458
diff changeset
181 (let ((tm (float-time)) bts (ts (format-time-string "%Y-%m-%d %T"))
69262
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
182 delay cbld bn)
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
183 (dolist (buf (buffer-list))
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
184 (when (buffer-live-p buf)
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
185 (setq bts (midnight-buffer-display-time buf) bn (buffer-name buf)
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
186 delay (if bts (- tm bts) 0) cbld (clean-buffer-list-delay bn))
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
187 (message "[%s] `%s' [%s %d]" ts bn (if bts (round delay)) cbld)
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
188 (unless (or (midnight-find bn clean-buffer-list-kill-never-regexps
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
189 'string-match)
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
190 (midnight-find bn clean-buffer-list-kill-never-buffer-names
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
191 'string-equal)
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
192 (get-buffer-process buf)
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
193 (and (buffer-file-name buf) (buffer-modified-p buf))
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
194 (get-buffer-window buf 'visible) (< delay cbld))
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
195 (message "[%s] killing `%s'" ts bn)
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
196 (kill-buffer buf))))))
22443
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 ;;; midnight hook
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 (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
201 "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
202
23059
41745889db17 (midnight-hook): initialize to a list.
Richard M. Stallman <rms@gnu.org>
parents: 23040
diff changeset
203 (defcustom midnight-hook '(clean-buffer-list)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 "The hook run `midnight-delay' seconds after midnight every day.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 The default value is `clean-buffer-list'."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 :type 'hook
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
207 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 (defun midnight-next ()
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 "Return the number of seconds till the next midnight."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (multiple-value-bind (sec min hrs) (decode-time)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 (- (* 24 60 60) (* 60 60 hrs) (* 60 min) sec)))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 ;;;###autoload
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 (defun midnight-delay-set (symb tm)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 "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
217 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
218 to its second argument TM."
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
219 (assert (eq symb 'midnight-delay) t
60911
f775b8952a66 * midnight.el: Replace `illegal' with `invalid'.
Werner LEMBERG <wl@gnu.org>
parents: 53858
diff changeset
220 "Invalid argument to `midnight-delay-set': `%s'")
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 (set symb tm)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 (when (timerp midnight-timer) (cancel-timer midnight-timer))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 (setq midnight-timer
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 (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
225 midnight-period 'run-hooks 'midnight-hook)))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 (defcustom midnight-delay 3600
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 "*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
229 You should set this variable before loading midnight.el, or
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 set it by calling `midnight-delay-set', or use `custom'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 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
232 first argument to `run-at-time'."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 :type 'sexp
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 :set 'midnight-delay-set
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
235 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 (provide 'midnight)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 38414
diff changeset
239 ;;; arch-tag: a5979be9-2890-46a3-ba84-791f0a4a6e80
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 ;;; midnight.el ends here