annotate lisp/midnight.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents 32fd8c1e4e51
children 241c83e5f559
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 ;;; midnight.el --- run something every midnight, e.g., kill old buffers.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 ;;; Copyright (C) 1998 Free Software Foundation, Inc.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;;; Author: Sam Steingold <sds@usa.net>
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;;; Maintainer: Sam Steingold <sds@usa.net>
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;;; Created: 1998-05-18
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;;; Keywords: utilities
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
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
51 (defcustom midnight-mode nil
22497
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
52 "*Non-nil means run `midnight-hook' at midnight.
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
53 Setting this variable outside customize has no effect;
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
54 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
55 :type 'boolean
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
56 :group 'midnight
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
57 :require 'midnight
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
58 :initialize 'custom-initialize-default
22497
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
59 :set (lambda (symb val)
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
60 (set symb val) (require 'midnight)
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
61 (if val (timer-activate midnight-timer)
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
62 (cancel-timer midnight-timer))))
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
63
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;;; time conversion
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
66 (defun midnight-float-time (&optional tm)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 "Convert `current-time' to a float number of seconds."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 (multiple-value-bind (s0 s1 s2) (or tm (current-time))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 (+ (* (float (ash 1 16)) s0) (float s1) (* 0.0000001 s2))))
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."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 (save-excursion
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 (set-buffer (or buf (current-buffer)))
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
81 (when buffer-display-time (midnight-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
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 (defcustom clean-buffer-list-kill-never-regexps '("^ \*Minibuf-.*\*$")
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)
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
154 (when (funcall test el (if key (funcall key rr) rr))
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)
24149
123fd862314c (clean-buffer-list): do not kill a buffer if it has
Karl Heuer <kwzh@gnu.org>
parents: 23389
diff changeset
181 (let ((tm (midnight-float-time)) bts (ts (format-time-string "%Y-%m-%d %T"))
123fd862314c (clean-buffer-list): do not kill a buffer if it has
Karl Heuer <kwzh@gnu.org>
parents: 23389
diff changeset
182 (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
183 (while (setq buf (pop bufs))
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
184 (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
185 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
186 (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
187 (unless (or (midnight-find bn clean-buffer-list-kill-never-regexps
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 'string-match)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 (midnight-find bn clean-buffer-list-kill-never-buffer-names
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 'string-equal)
24149
123fd862314c (clean-buffer-list): do not kill a buffer if it has
Karl Heuer <kwzh@gnu.org>
parents: 23389
diff changeset
191 (get-buffer-process buf)
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
192 (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
193 (get-buffer-window buf 'visible) (< delay cbld))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 (message "[%s] killing `%s'" ts bn)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 (kill-buffer buf)))))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 ;;; midnight hook
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 (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
200 "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
201
23059
41745889db17 (midnight-hook): initialize to a list.
Richard M. Stallman <rms@gnu.org>
parents: 23040
diff changeset
202 (defcustom midnight-hook '(clean-buffer-list)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 "The hook run `midnight-delay' seconds after midnight every day.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 The default value is `clean-buffer-list'."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 :type 'hook
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
206 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 (defun midnight-next ()
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 "Return the number of seconds till the next midnight."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 (multiple-value-bind (sec min hrs) (decode-time)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (- (* 24 60 60) (* 60 60 hrs) (* 60 min) sec)))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 (defvar midnight-timer nil
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 "Timer running the `midnight-hook' `midnight-delay' seconds after midnight.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 Use `cancel-timer' to stop it and `midnight-delay-set' to change
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 the time when it is run.")
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 ;;;###autoload
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 (defun midnight-delay-set (symb tm)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 "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
221 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
222 to its second argument TM."
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
223 (assert (eq symb 'midnight-delay) t
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
224 "Illegal argument to `midnight-delay-set': `%s'" symb)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 (set symb tm)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 (when (timerp midnight-timer) (cancel-timer midnight-timer))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 (setq midnight-timer
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 (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
229 midnight-period 'run-hooks 'midnight-hook)))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 (defcustom midnight-delay 3600
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 "*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
233 You should set this variable before loading midnight.el, or
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 set it by calling `midnight-delay-set', or use `custom'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 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
236 first argument to `run-at-time'."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 :type 'sexp
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 :set 'midnight-delay-set
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
239 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 (provide 'midnight)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 ;;; midnight.el ends here