annotate lisp/midnight.el @ 53879:e3771c262410

New file. Move original fringe related declarations and code from dispextern.h and xdisp.c here. Rework code to support user defined fringe bitmaps, redefining standard bitmaps, ability to overlay user defined bitmap with overlay arrow bitmap, and add faces to bitmaps. (Voverflow_newline_into_fringe): Declare here. (enum fringe_bitmap_align): New enum. (..._bits): All bitmaps are now defined without bitswapping; that is now done in init_fringe_once (if necessary). (standard_bitmaps): New array with specifications for the standard fringe bitmaps. (fringe_faces): New array. (valid_fringe_bitmap_id_p): New function. (draw_fringe_bitmap_1): Rename from draw_fringe_bitmap. (draw_fringe_bitmap): New function which draws fringe bitmap, possibly overlaying bitmap with cursor in right fringe or the overlay arrow in the left fringe. (update_window_fringes): Do not handle overlay arrow here. Compare and copy fringe bitmap faces. (init_fringe_bitmap): New function. (Fdefine_fringe_bitmap, Fdestroy_fringe_bitmap): New DEFUNs to define and destroy user defined fringe bitmaps. (Fset_fringe_bitmap_face): New DEFUN to set face for a fringe bitmap. (Ffringe_bitmaps_at_pos): New DEFUN to read current fringe bitmaps. (syms_of_fringe): New function. Defsubr new DEFUNs. DEFVAR_LISP Voverflow_newline_into_fringe. (init_fringe_once, init_fringe): New functions. (w32_init_fringe, w32_reset_fringes) [WINDOWS_NT]: New functions.
author Kim F. Storm <storm@cua.dk>
date Sun, 08 Feb 2004 23:18:16 +0000
parents d95e0ecde26c
children f775b8952a66
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
53858
d95e0ecde26c (midnight-delay-set): Remove extra format string
Andreas Schwab <schwab@suse.de>
parents: 52401
diff changeset
3 ;;; Copyright (C) 1998, 2004 Free Software Foundation, Inc.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
38414
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30509
diff changeset
5 ;; Author: Sam Steingold <sds@usa.net>
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30509
diff changeset
6 ;; Maintainer: Sam Steingold <sds@usa.net>
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30509
diff changeset
7 ;; Created: 1998-05-18
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30509
diff changeset
8 ;; Keywords: utilities
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; any later version.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;; Boston, MA 02111-1307, USA.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;; Commentary:
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; To use the file, put (require 'midnight) into your .emacs. Then, at
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; midnight, Emacs will run the normal hook `midnight-hook'. You can
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; put whatever you like there, say, `calendar'; by default there is
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; only one function there - `clean-buffer-list'. It will kill the
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; buffers matching `clean-buffer-list-kill-buffer-names' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; `clean-buffer-list-kill-regexps' and the buffers which where last
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; displayed more than `clean-buffer-list-delay-general' days ago,
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; keeping `clean-buffer-list-kill-never-buffer-names' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; `clean-buffer-list-kill-never-regexps'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
39 ;;; Code:
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
40
22859
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
41 (eval-when-compile
23104
b1ce2a4bc9b0 Require `timer' not only when compiling.
Karl Heuer <kwzh@gnu.org>
parents: 23059
diff changeset
42 (require 'cl))
b1ce2a4bc9b0 Require `timer' not only when compiling.
Karl Heuer <kwzh@gnu.org>
parents: 23059
diff changeset
43
b1ce2a4bc9b0 Require `timer' not only when compiling.
Karl Heuer <kwzh@gnu.org>
parents: 23059
diff changeset
44 (require 'timer)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 (defgroup midnight nil
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 "Run something every day at midnight."
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
48 :group 'calendar
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
49 :version "20.3")
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50
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-time-float (num)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 "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
68 (let* ((div (ash 1 16)) (1st (floor num div)))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 (list 1st (floor (- num (* (float div) 1st)))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 (round (* 10000000 (mod num 1))))))
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-buffer-display-time (&optional buf)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 "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
74 (with-current-buffer (or buf (current-buffer))
30481
b603c68fff56 use float-time
Sam Steingold <sds@gnu.org>
parents: 30458
diff changeset
75 (when buffer-display-time (float-time buffer-display-time))))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;;; clean-buffer-list stuff
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 (defcustom clean-buffer-list-delay-general 3
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 "*The number of days before any buffer becomes eligible for autokilling.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 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
82 Currently displayed and/or modified (unsaved) buffers, as well as buffers
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 matching `clean-buffer-list-kill-never-buffer-names' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 `clean-buffer-list-kill-never-regexps' are excluded."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 :type 'integer
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
86 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 (defcustom clean-buffer-list-delay-special 3600
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 "*The number of seconds before some buffers become eligible for autokilling.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 Buffers matched by `clean-buffer-list-kill-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 `clean-buffer-list-kill-buffer-names' are killed if they were last
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 displayed more than this many seconds ago."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 :type 'integer
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
94 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95
22898
138b588a013c (clean-buffer-list-kill-regexps): Init to nil, as before.
Richard M. Stallman <rms@gnu.org>
parents: 22859
diff changeset
96 (defcustom clean-buffer-list-kill-regexps nil
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 "*List of regexps saying which buffers will be killed at midnight.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 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
99 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
100 `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
101 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
102 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
103 See also `clean-buffer-list-kill-buffer-names',
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 `clean-buffer-list-kill-never-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 `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
106 :type '(repeat (regexp :tag "Regexp matching Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
107 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 (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
110 '("*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
111 "*vc*" "*vc-diff*" "*diff*")
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 "*List of strings saying which buffers will be killed at midnight.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 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
114 `clean-buffer-list-delay-special' seconds, are killed by `clean-buffer-list'
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 when is it in `midnight-hook'.
24387
32fd8c1e4e51 (clean-buffer-list-kill-regexps): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 24149
diff changeset
116 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
117 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
118 See also `clean-buffer-list-kill-regexps',
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 `clean-buffer-list-kill-never-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 `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
121 :type '(repeat (string :tag "Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
122 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 (defcustom clean-buffer-list-kill-never-buffer-names
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 '("*scratch*" "*Messages*")
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 "*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
127 See also `clean-buffer-list-kill-never-regexps'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 Note that this does override `clean-buffer-list-kill-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 `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
130 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
131 :type '(repeat (string :tag "Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
132 :group 'midnight)
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
133
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134
30509
423583fa92f3 (clean-buffer-list-kill-never-regexps): Correctly
Gerd Moellmann <gerd@gnu.org>
parents: 30481
diff changeset
135 (defcustom clean-buffer-list-kill-never-regexps '("^ \\*Minibuf-.*\\*$")
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 "*List of regexp saying which buffers will never be killed at midnight.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 See also `clean-buffer-list-kill-never-buffer-names'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 Killing is done by `clean-buffer-list'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 Note that this does override `clean-buffer-list-kill-regexps' and
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 `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
141 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
142 :type '(repeat (regexp :tag "Regexp matching Buffer Name"))
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
143 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 (defun midnight-find (el ls test &optional key)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 "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
147 (dolist (rr ls)
30509
423583fa92f3 (clean-buffer-list-kill-never-regexps): Correctly
Gerd Moellmann <gerd@gnu.org>
parents: 30481
diff changeset
148 (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
149 (return rr))))
22859
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
150
22898
138b588a013c (clean-buffer-list-kill-regexps): Init to nil, as before.
Richard M. Stallman <rms@gnu.org>
parents: 22859
diff changeset
151 (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
152 "Return the delay, in seconds, before killing a buffer named NAME.
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 Uses `clean-buffer-list-kill-buffer-names', `clean-buffer-list-kill-regexps'
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 `clean-buffer-list-delay-general' and `clean-buffer-list-delay-special'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 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
156 (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
157 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
158 (assoc-default name clean-buffer-list-kill-regexps 'string-match
22859
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
159 clean-buffer-list-delay-special)
16dcade0dd4a Require timer.
Richard M. Stallman <rms@gnu.org>
parents: 22538
diff changeset
160 (* clean-buffer-list-delay-general 24 60 60)))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161
23389
f6d920229f4c (clean-buffer-list): Add autoload cookie.
Karl Heuer <kwzh@gnu.org>
parents: 23345
diff changeset
162 ;;;###autoload
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 (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
164 "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
165 The relevant variables are `clean-buffer-list-delay-general',
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 `clean-buffer-list-delay-special', `clean-buffer-list-kill-buffer-names',
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 `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
168 `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
169 `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
170 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
171 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
172 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
173 lifetime, i.e., its \"age\" when it will be purged."
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 (interactive)
30481
b603c68fff56 use float-time
Sam Steingold <sds@gnu.org>
parents: 30458
diff changeset
175 (let ((tm (float-time)) bts (ts (format-time-string "%Y-%m-%d %T"))
24149
123fd862314c (clean-buffer-list): do not kill a buffer if it has
Karl Heuer <kwzh@gnu.org>
parents: 23389
diff changeset
176 (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
177 (while (setq buf (pop bufs))
23040
5615932155fe (midnight-float-time): Renamed from float-time.
Richard M. Stallman <rms@gnu.org>
parents: 22971
diff changeset
178 (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
179 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
180 (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
181 (unless (or (midnight-find bn clean-buffer-list-kill-never-regexps
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 'string-match)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 (midnight-find bn clean-buffer-list-kill-never-buffer-names
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 'string-equal)
24149
123fd862314c (clean-buffer-list): do not kill a buffer if it has
Karl Heuer <kwzh@gnu.org>
parents: 23389
diff changeset
185 (get-buffer-process buf)
22971
ff793b9329c9 (clean-buffer-list-kill-buffer-names): Add `*diff*'.
Richard M. Stallman <rms@gnu.org>
parents: 22938
diff changeset
186 (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
187 (get-buffer-window buf 'visible) (< delay cbld))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 (message "[%s] killing `%s'" ts bn)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 (kill-buffer buf)))))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 ;;; midnight hook
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 (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
194 "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
195
23059
41745889db17 (midnight-hook): initialize to a list.
Richard M. Stallman <rms@gnu.org>
parents: 23040
diff changeset
196 (defcustom midnight-hook '(clean-buffer-list)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 "The hook run `midnight-delay' seconds after midnight every day.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 The default value is `clean-buffer-list'."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 :type 'hook
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
200 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 (defun midnight-next ()
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 "Return the number of seconds till the next midnight."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 (multiple-value-bind (sec min hrs) (decode-time)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 (- (* 24 60 60) (* 60 60 hrs) (* 60 min) sec)))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 (defvar midnight-timer nil
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 "Timer running the `midnight-hook' `midnight-delay' seconds after midnight.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 Use `cancel-timer' to stop it and `midnight-delay-set' to change
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 the time when it is run.")
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
53858
d95e0ecde26c (midnight-delay-set): Remove extra format string
Andreas Schwab <schwab@suse.de>
parents: 52401
diff changeset
218 "Illegal argument to `midnight-delay-set': `%s'")
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 (set symb tm)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 (when (timerp midnight-timer) (cancel-timer midnight-timer))
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 (setq midnight-timer
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 (run-at-time (if (numberp tm) (+ (midnight-next) tm) tm)
22938
a45f2afb8ed9 (midnight-delay-set): Use run-hooks directly.
Richard M. Stallman <rms@gnu.org>
parents: 22936
diff changeset
223 midnight-period 'run-hooks 'midnight-hook)))
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 (defcustom midnight-delay 3600
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 "*The number of seconds after the midnight when the `midnight-timer' is run.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 You should set this variable before loading midnight.el, or
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 set it by calling `midnight-delay-set', or use `custom'.
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 If you wish, you can use a string instead, it will be passed as the
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 first argument to `run-at-time'."
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 :type 'sexp
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 :set 'midnight-delay-set
22538
2649d061d370 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22497
diff changeset
233 :group 'midnight)
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 (provide 'midnight)
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 38414
diff changeset
237 ;;; arch-tag: a5979be9-2890-46a3-ba84-791f0a4a6e80
22443
23e135b67081 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 ;;; midnight.el ends here