annotate lisp/midnight.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents ad6fc78acf43
children 417b1e4d63cd
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
74442
b2e5081b9320 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 73488
diff changeset
3 ;; Copyright (C) 1998, 2001, 2002, 2003, 2004, 2005,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 102531
diff changeset
4 ;; 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
107478
ad6fc78acf43 update author's email
Sam Steingold <sds@gnu.org>
parents: 106815
diff changeset
6 ;; Author: Sam Steingold <sds@gnu.org>
ad6fc78acf43 update author's email
Sam Steingold <sds@gnu.org>
parents: 106815
diff changeset
7 ;; Maintainer: Sam Steingold <sds@gnu.org>
38414
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
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
13 ;; GNU Emacs is free software: you can redistribute it and/or modify
22443
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
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
15 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
16 ;; (at your option) any later version.
22443
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
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
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 ;; To use the file, put (require 'midnight) into your .emacs. Then, at
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; midnight, Emacs will run the normal hook `midnight-hook'. You can
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; put whatever you like there, say, `calendar'; by default there is
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; only one function there - `clean-buffer-list'. It will kill the
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; buffers matching `clean-buffer-list-kill-buffer-names' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; `clean-buffer-list-kill-regexps' and the buffers which where last
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; displayed more than `clean-buffer-list-delay-general' days ago,
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; keeping `clean-buffer-list-kill-never-buffer-names' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; `clean-buffer-list-kill-never-regexps'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
38 ;;; Code:
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
39
22859
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
40 (eval-when-compile
23104
b1ce2a4bc9b0 Require `timer' not only when compiling.
Karl Heuer <kwzh@gnu.org>
parents: 23059
diff changeset
41 (require 'cl))
b1ce2a4bc9b0 Require `timer' not only when compiling.
Karl Heuer <kwzh@gnu.org>
parents: 23059
diff changeset
42
b1ce2a4bc9b0 Require `timer' not only when compiling.
Karl Heuer <kwzh@gnu.org>
parents: 23059
diff changeset
43 (require 'timer)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 (defgroup midnight nil
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 "Run something every day at midnight."
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
47 :group 'calendar
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
48 :version "20.3")
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49
61768
cf0109fd6158 (midnight-timer): Move defvar up.
Richard M. Stallman <rms@gnu.org>
parents: 60911
diff changeset
50 (defvar midnight-timer nil
cf0109fd6158 (midnight-timer): Move defvar up.
Richard M. Stallman <rms@gnu.org>
parents: 60911
diff changeset
51 "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
52 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
53 the time when it is run.")
cf0109fd6158 (midnight-timer): Move defvar up.
Richard M. Stallman <rms@gnu.org>
parents: 60911
diff changeset
54
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
55 (defcustom midnight-mode nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
56 "Non-nil means run `midnight-hook' at midnight.
22497
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
57 Setting this variable outside customize has no effect;
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
58 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
59 :type 'boolean
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
60 :group 'midnight
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
61 :require 'midnight
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
62 :initialize 'custom-initialize-default
22497
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
63 :set (lambda (symb val)
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
64 (set symb val) (require 'midnight)
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
65 (if val (timer-activate midnight-timer)
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
66 (cancel-timer midnight-timer))))
5f8133b3c592 (midnight-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22443
diff changeset
67
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;;; time conversion
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
70 (defun midnight-time-float (num)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 "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
72 (let* ((div (ash 1 16)) (1st (floor num div)))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 (list 1st (floor (- num (* (float div) 1st)))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 (round (* 10000000 (mod num 1))))))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75
73488
20cd037496f9 (midnight-buffer-display-time): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 69262
diff changeset
76 (defun midnight-buffer-display-time (&optional buffer)
20cd037496f9 (midnight-buffer-display-time): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 69262
diff changeset
77 "Return the time-stamp of BUFFER, or current buffer, as float."
20cd037496f9 (midnight-buffer-display-time): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 69262
diff changeset
78 (with-current-buffer (or buffer (current-buffer))
30481
b603c68fff56 use float-time
Sam Steingold <sds@gnu.org>
parents: 30458
diff changeset
79 (when buffer-display-time (float-time buffer-display-time))))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;;; clean-buffer-list stuff
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 (defcustom clean-buffer-list-delay-general 3
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
84 "The number of days before any buffer becomes eligible for autokilling.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 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
86 Currently displayed and/or modified (unsaved) buffers, as well as buffers
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 matching `clean-buffer-list-kill-never-buffer-names' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 `clean-buffer-list-kill-never-regexps' are excluded."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 :type 'integer
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
90 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 (defcustom clean-buffer-list-delay-special 3600
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
93 "The number of seconds before some buffers become eligible for autokilling.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 Buffers matched by `clean-buffer-list-kill-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 `clean-buffer-list-kill-buffer-names' are killed if they were last
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 displayed more than this many seconds ago."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 :type 'integer
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
98 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99
22898
138b588a013c (clean-buffer-list-kill-regexps): Init to nil, as before.
Richard M. Stallman <rms@gnu.org>
parents: 22859
diff changeset
100 (defcustom clean-buffer-list-kill-regexps nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
101 "List of regexps saying which buffers will be killed at midnight.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 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
103 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
104 `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
105 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
106 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
107 See also `clean-buffer-list-kill-buffer-names',
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 `clean-buffer-list-kill-never-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 `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
110 :type '(repeat (regexp :tag "Regexp matching Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
111 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 (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
114 '("*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
115 "*vc*" "*vc-diff*" "*diff*")
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
116 "List of strings saying which buffers will be killed at midnight.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 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
118 `clean-buffer-list-delay-special' seconds, are killed by `clean-buffer-list'
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 when is it in `midnight-hook'.
24387
32fd8c1e4e51 (clean-buffer-list-kill-regexps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 24149
diff changeset
120 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
121 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
122 See also `clean-buffer-list-kill-regexps',
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 `clean-buffer-list-kill-never-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 `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
125 :type '(repeat (string :tag "Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
126 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 (defcustom clean-buffer-list-kill-never-buffer-names
73488
20cd037496f9 (midnight-buffer-display-time): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 69262
diff changeset
129 '("*scratch*" "*Messages*" "*server*")
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
130 "List of buffer names which will never be killed by `clean-buffer-list'.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 See also `clean-buffer-list-kill-never-regexps'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 Note that this does override `clean-buffer-list-kill-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 `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
134 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
135 :type '(repeat (string :tag "Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
136 :group 'midnight)
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
137
30509
423583fa92f3 (clean-buffer-list-kill-never-regexps): Correctly
Gerd Moellmann <gerd@gnu.org>
parents: 30481
diff changeset
138 (defcustom clean-buffer-list-kill-never-regexps '("^ \\*Minibuf-.*\\*$")
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
139 "List of regexp saying which buffers will never be killed at midnight.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 See also `clean-buffer-list-kill-never-buffer-names'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 Killing is done by `clean-buffer-list'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 Note that this does override `clean-buffer-list-kill-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 `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
144 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
145 :type '(repeat (regexp :tag "Regexp matching Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
146 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 (defun midnight-find (el ls test &optional key)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 "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
150 (dolist (rr ls)
30509
423583fa92f3 (clean-buffer-list-kill-never-regexps): Correctly
Gerd Moellmann <gerd@gnu.org>
parents: 30481
diff changeset
151 (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
152 (return rr))))
22859
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
153
22898
138b588a013c (clean-buffer-list-kill-regexps): Init to nil, as before.
Richard M. Stallman <rms@gnu.org>
parents: 22859
diff changeset
154 (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
155 "Return the delay, in seconds, before killing a buffer named NAME.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 Uses `clean-buffer-list-kill-buffer-names', `clean-buffer-list-kill-regexps'
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 `clean-buffer-list-delay-general' and `clean-buffer-list-delay-special'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 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
159 (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
160 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
161 (assoc-default name clean-buffer-list-kill-regexps 'string-match
22859
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
162 clean-buffer-list-delay-special)
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
163 (* clean-buffer-list-delay-general 24 60 60)))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164
23389
f6d920229f4c (clean-buffer-list): Add autoload cookie.
Karl Heuer <kwzh@gnu.org>
parents: 23345
diff changeset
165 ;;;###autoload
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 (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
167 "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
168 The relevant variables are `clean-buffer-list-delay-general',
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 `clean-buffer-list-delay-special', `clean-buffer-list-kill-buffer-names',
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 `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
171 `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
172 `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
173 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
174 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
175 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
176 lifetime, i.e., its \"age\" when it will be purged."
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 (interactive)
30481
b603c68fff56 use float-time
Sam Steingold <sds@gnu.org>
parents: 30458
diff changeset
178 (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
179 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
180 (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
181 (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
182 (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
183 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
184 (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
185 (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
186 'string-match)
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
187 (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
188 'string-equal)
724b1ba5b55c (clean-buffer-list): Handle case where base-buffer of indirect buffer gets
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
189 (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
190 (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
191 (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
192 (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
193 (kill-buffer buf))))))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 ;;; midnight hook
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 (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
198 "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
199
23059
41745889db17 (midnight-hook): initialize to a list.
Richard M. Stallman <rms@gnu.org>
parents: 23040
diff changeset
200 (defcustom midnight-hook '(clean-buffer-list)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 "The hook run `midnight-delay' seconds after midnight every day.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 The default value is `clean-buffer-list'."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 :type 'hook
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
204 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 (defun midnight-next ()
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 "Return the number of seconds till the next midnight."
107478
ad6fc78acf43 update author's email
Sam Steingold <sds@gnu.org>
parents: 106815
diff changeset
208 (multiple-value-bind (sec min hrs)
102531
26dfa5308c26 M-v correctness.
Deepak Goel <deego@gnufans.org>
parents: 100908
diff changeset
209 (values-list (decode-time))
22443
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
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
226 "The number of seconds after the midnight when the `midnight-timer' is run.
22443
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
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
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