Mercurial > emacs
annotate lisp/type-break.el @ 79358:5bb58f3a8da8
*** empty log message ***
author | Juanma Barranquero <lekktu@gmail.com> |
---|---|
date | Fri, 09 Nov 2007 16:59:24 +0000 |
parents | 9355f9b7bbff |
children | 73661ddc7ac7 f55f9811f5d7 |
rev | line source |
---|---|
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
1 ;;; type-break.el --- encourage rests from typing at appropriate intervals |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
2 |
74442 | 3 ;; Copyright (C) 1994, 1995, 1997, 2000, 2001, 2002, 2003, |
75347 | 4 ;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
5 |
23240 | 6 ;; Author: Noah Friedman |
7 ;; Maintainer: Noah Friedman <friedman@splode.com> | |
9355
8ac258bc59ef
Assign copyright to FSF, and change comments to reflect that type-break
Noah Friedman <friedman@splode.com>
parents:
8497
diff
changeset
|
8 ;; Keywords: extensions, timers |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
9 ;; Status: Works in GNU Emacs 19.25 or later, some versions of XEmacs |
9355
8ac258bc59ef
Assign copyright to FSF, and change comments to reflect that type-break
Noah Friedman <friedman@splode.com>
parents:
8497
diff
changeset
|
10 ;; Created: 1994-07-13 |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
11 |
9355
8ac258bc59ef
Assign copyright to FSF, and change comments to reflect that type-break
Noah Friedman <friedman@splode.com>
parents:
8497
diff
changeset
|
12 ;; This file is part of GNU Emacs. |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
13 |
9355
8ac258bc59ef
Assign copyright to FSF, and change comments to reflect that type-break
Noah Friedman <friedman@splode.com>
parents:
8497
diff
changeset
|
14 ;; GNU Emacs is free software; you can redistribute it and/or modify |
8ac258bc59ef
Assign copyright to FSF, and change comments to reflect that type-break
Noah Friedman <friedman@splode.com>
parents:
8497
diff
changeset
|
15 ;; it under the terms of the GNU General Public License as published by |
78236
9355f9b7bbff
Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents:
76464
diff
changeset
|
16 ;; the Free Software Foundation; either version 3, or (at your option) |
9355
8ac258bc59ef
Assign copyright to FSF, and change comments to reflect that type-break
Noah Friedman <friedman@splode.com>
parents:
8497
diff
changeset
|
17 ;; any later version. |
8ac258bc59ef
Assign copyright to FSF, and change comments to reflect that type-break
Noah Friedman <friedman@splode.com>
parents:
8497
diff
changeset
|
18 |
8ac258bc59ef
Assign copyright to FSF, and change comments to reflect that type-break
Noah Friedman <friedman@splode.com>
parents:
8497
diff
changeset
|
19 ;; GNU Emacs is distributed in the hope that it will be useful, |
8ac258bc59ef
Assign copyright to FSF, and change comments to reflect that type-break
Noah Friedman <friedman@splode.com>
parents:
8497
diff
changeset
|
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
8ac258bc59ef
Assign copyright to FSF, and change comments to reflect that type-break
Noah Friedman <friedman@splode.com>
parents:
8497
diff
changeset
|
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
8ac258bc59ef
Assign copyright to FSF, and change comments to reflect that type-break
Noah Friedman <friedman@splode.com>
parents:
8497
diff
changeset
|
22 ;; GNU General Public License for more details. |
8ac258bc59ef
Assign copyright to FSF, and change comments to reflect that type-break
Noah Friedman <friedman@splode.com>
parents:
8497
diff
changeset
|
23 |
8ac258bc59ef
Assign copyright to FSF, and change comments to reflect that type-break
Noah Friedman <friedman@splode.com>
parents:
8497
diff
changeset
|
24 ;; You should have received a copy of the GNU General Public License |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
25 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
64091 | 26 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
27 ;; Boston, MA 02110-1301, USA. | |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
28 |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
29 ;;; Commentary: |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
30 |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
31 ;; The docstring for the function `type-break-mode' summarizes most of the |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
32 ;; details of the interface. |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
33 |
55189 | 34 ;; This package relies on the assumption that you live entirely in Emacs, |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
35 ;; as the author does. If that's not the case for you (e.g. you often |
55189 | 36 ;; suspend Emacs or work in other windows) then this won't help very much; |
37 ;; it will depend on just how often you switch back to Emacs. At the very | |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
38 ;; least, you will want to turn off the keystroke thresholds and rest |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
39 ;; interval tracking. |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
40 |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
41 ;; If you prefer not to be queried about taking breaks, but instead just |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
42 ;; want to be reminded, do the following: |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
43 ;; |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
44 ;; (setq type-break-query-mode nil) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
45 ;; |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
46 ;; Or call the command `type-break-query-mode' with a negative prefix |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
47 ;; argument. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
48 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
49 ;; If you find echo area messages annoying and would prefer to see messages |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
50 ;; in the mode line instead, do M-x type-break-mode-line-message-mode |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
51 ;; or set the variable of the same name to `t'. |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
52 |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
53 ;; This program can truly cons up a storm because of all the calls to |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
54 ;; `current-time' (which always returns 3 fresh conses). I'm dismayed by |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
55 ;; this, but I think the health of my hands is far more important than a |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
56 ;; few pages of virtual memory. |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
57 |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
58 ;; This program has no hope of working in Emacs 18. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
59 |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
60 ;; This package was inspired by Roland McGrath's hanoi-break.el. |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
61 ;; Several people contributed feedback and ideas, including |
25278 | 62 ;; Roland McGrath <roland@gnu.org> |
30391
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
63 ;; Kleanthes Koniaris <kgk@koniaris.com> |
25278 | 64 ;; Mark Ashton <mpashton@gnu.org> |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
65 ;; Matt Wilding <wilding@cli.com> |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
66 ;; Robert S. Boyer <boyer@cs.utexas.edu> |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
67 |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
68 ;;; Code: |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
69 |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
70 |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
71 (defgroup type-break nil |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
72 "Encourage the user to take a rest from typing at suitable intervals." |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
73 :prefix "type-break" |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
74 :group 'keyboard) |
5939 | 75 |
76 ;;;###autoload | |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
77 (defcustom type-break-mode nil |
24547 | 78 "Toggle typing break mode. |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
79 See the docstring for the `type-break-mode' command for more information. |
24648 | 80 Setting this variable directly does not take effect; |
81 use either \\[customize] or the function `type-break-mode'." | |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
82 :set (lambda (symbol value) |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
83 (type-break-mode (if value 1 -1))) |
23239
b88e81176427
(type-break-mode): remove :version field from defcustom declaration.
Noah Friedman <friedman@splode.com>
parents:
22069
diff
changeset
|
84 :initialize 'custom-initialize-default |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
85 :type 'boolean |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
86 :group 'type-break |
23239
b88e81176427
(type-break-mode): remove :version field from defcustom declaration.
Noah Friedman <friedman@splode.com>
parents:
22069
diff
changeset
|
87 :require 'type-break) |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
88 |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
89 ;;;###autoload |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
90 (defcustom type-break-interval (* 60 60) |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
91 "*Number of seconds between scheduled typing breaks." |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
92 :type 'integer |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
93 :group 'type-break) |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
94 |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
95 ;;;###autoload |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
96 (defcustom type-break-good-rest-interval (/ type-break-interval 6) |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
97 "*Number of seconds of idle time considered to be an adequate typing rest. |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
98 |
55189 | 99 When this variable is non-nil, Emacs checks the idle time between |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
100 keystrokes. If this idle time is long enough to be considered a \"good\" |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
101 rest from typing, then the next typing break is simply rescheduled for later. |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
102 |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
103 If a break is interrupted before this much time elapses, the user will be |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
104 asked whether or not really to interrupt the break." |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
105 :type 'integer |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
106 :group 'type-break) |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
107 |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
108 ;;;###autoload |
55189 | 109 (defcustom type-break-good-break-interval nil |
110 "*Number of seconds considered to be an adequate explicit typing rest. | |
111 | |
112 When this variable is non-nil, its value is considered to be a \"good\" | |
113 length (in seconds) for a break initiated by the command `type-break', | |
114 overriding `type-break-good-rest-interval'. This provides querying of | |
115 break interruptions when `type-break-good-rest-interval' is nil." | |
116 :type 'integer | |
117 :group 'type-break) | |
118 | |
119 ;;;###autoload | |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
120 (defcustom type-break-keystroke-threshold |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
121 ;; Assuming typing speed is 35wpm (on the average, do you really |
8282
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
122 ;; type more than that in a minute? I spend a lot of time reading mail |
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
123 ;; and simply studying code in buffers) and average word length is |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
124 ;; about 5 letters, default upper threshold to the average number of |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
125 ;; keystrokes one is likely to type in a break interval. That way if the |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
126 ;; user goes through a furious burst of typing activity, cause a typing |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
127 ;; break to be required sooner than originally scheduled. |
8282
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
128 ;; Conversely, the minimum threshold should be about a fifth of this. |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
129 (let* ((wpm 35) |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
130 (avg-word-length 5) |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
131 (upper (* wpm avg-word-length (/ type-break-interval 60))) |
8282
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
132 (lower (/ upper 5))) |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
133 (cons lower upper)) |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
134 "*Upper and lower bound on number of keystrokes for considering typing break. |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
135 This structure is a pair of numbers (MIN . MAX). |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
136 |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
137 The first number is the minimum number of keystrokes that must have been |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
138 entered since the last typing break before considering another one, even if |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
139 the scheduled time has elapsed; the break is simply rescheduled until later |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
140 if the minimum threshold hasn't been reached. If this first value is nil, |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
141 then there is no minimum threshold; as soon as the scheduled time has |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
142 elapsed, the user will always be queried. |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
143 |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
144 The second number is the maximum number of keystrokes that can be entered |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
145 before a typing break is requested immediately, pre-empting the originally |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
146 scheduled break. If this second value is nil, then no pre-emptive breaks |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
147 will occur; only scheduled ones will. |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
148 |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
149 Keys with bucky bits (shift, control, meta, etc) are counted as only one |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
150 keystroke even though they really require multiple keys to generate them. |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
151 |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
152 The command `type-break-guesstimate-keystroke-threshold' can be used to |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
153 guess a reasonably good pair of values for this variable." |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
154 :type 'sexp |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
155 :group 'type-break) |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
156 |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
157 (defcustom type-break-query-mode t |
50868
7588d6aa3cb7
(type-break-good-rest-interval, type-break-query-mode)
Juanma Barranquero <lekktu@gmail.com>
parents:
50551
diff
changeset
|
158 "*Non-nil means ask whether or not to prompt user for breaks. |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
159 If so, call the function specified in the value of the variable |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
160 `type-break-query-function' to do the asking." |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
161 :type 'boolean |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
162 :group 'type-break) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
163 |
30391
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
164 (defcustom type-break-query-function 'yes-or-no-p |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
165 "*Function to use for making query for a typing break. |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
166 It should take a string as an argument, the prompt. |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
167 Usually this should be set to `yes-or-no-p' or `y-or-n-p'. |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
168 |
50868
7588d6aa3cb7
(type-break-good-rest-interval, type-break-query-mode)
Juanma Barranquero <lekktu@gmail.com>
parents:
50551
diff
changeset
|
169 To avoid being queried at all, set `type-break-query-mode' to nil." |
30391
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
170 :type '(radio function |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
171 (function-item yes-or-no-p) |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
172 (function-item y-or-n-p)) |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
173 :group 'type-break) |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
174 |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
175 (defcustom type-break-query-interval 60 |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
176 "*Number of seconds between queries to take a break, if put off. |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
177 The user will continue to be prompted at this interval until he or she |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
178 finally submits to taking a typing break." |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
179 :type 'integer |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
180 :group 'type-break) |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
181 |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
182 (defcustom type-break-time-warning-intervals '(300 120 60 30) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
183 "*List of time intervals for warnings about upcoming typing break. |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
184 At each of the intervals (specified in seconds) away from a scheduled |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
185 typing break, print a warning in the echo area." |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
186 :type '(repeat integer) |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
187 :group 'type-break) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
188 |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
189 (defcustom type-break-keystroke-warning-intervals '(300 200 100 50) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
190 "*List of keystroke measurements for warnings about upcoming typing break. |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
191 At each of the intervals (specified in keystrokes) away from the upper |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
192 keystroke threshold, print a warning in the echo area. |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
193 If either this variable or the upper threshold is set, then no warnings |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
194 will occur." |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
195 :type '(repeat integer) |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
196 :group 'type-break) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
197 |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
198 (defcustom type-break-warning-repeat 40 |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
199 "*Number of keystrokes for which warnings should be repeated. |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
200 That is, for each of this many keystrokes the warning is redisplayed |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
201 in the echo area to make sure it's really seen." |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
202 :type 'integer |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
203 :group 'type-break) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
204 |
30391
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
205 (defcustom type-break-time-stamp-format "[%H:%M] " |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
206 "*Timestamp format used to prefix messages. |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
207 Format specifiers are as used by `format-time-string'." |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
208 :type 'string |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
209 :group 'type-break) |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
210 |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
211 (defcustom type-break-demo-functions |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
212 '(type-break-demo-boring type-break-demo-life type-break-demo-hanoi) |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
213 "*List of functions to consider running as demos during typing breaks. |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
214 When a typing break begins, one of these functions is selected randomly |
55189 | 215 to have Emacs do something interesting. |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
216 |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
217 Any function in this list should start a demo which ceases as soon as a |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
218 key is pressed." |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
219 :type '(repeat function) |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
220 :group 'type-break) |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
221 |
55189 | 222 (defcustom type-break-demo-boring-stats nil |
223 "*Show word per minute and keystroke figures in the Boring demo." | |
224 :type 'boolean | |
225 :group 'type-break) | |
226 | |
227 (defcustom type-break-terse-messages nil | |
228 "*Use slightly terser messages." | |
229 :type 'boolean | |
230 :group 'type-break) | |
231 | |
232 (defcustom type-break-file-name (convert-standard-filename "~/.type-break") | |
59554
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
233 "*Name of file used to save state across sessions. |
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
234 If this is nil, no data will be saved across sessions." |
55189 | 235 :type 'file |
236 :group 'type-break) | |
237 | |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
238 (defvar type-break-post-command-hook '(type-break-check) |
55189 | 239 "Hook run indirectly by `post-command-hook' for typing break functions. |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
240 This is not really intended to be set by the user, but it's probably |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
241 harmless to do so. Mainly it is used by various parts of the typing break |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
242 program to delay actions until after the user has completed some command. |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
243 It exists because `post-command-hook' itself is inaccessible while its |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
244 functions are being run, and some type-break--related functions want to |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
245 remove themselves after running.") |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
246 |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
247 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
248 ;; Mode line frobs |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
249 |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
250 (defcustom type-break-mode-line-message-mode nil |
50868
7588d6aa3cb7
(type-break-good-rest-interval, type-break-query-mode)
Juanma Barranquero <lekktu@gmail.com>
parents:
50551
diff
changeset
|
251 "*Non-nil means put type-break related messages in the mode line. |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
252 Otherwise, messages typically go in the echo area. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
253 |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
254 See also `type-break-mode-line-format' and its members." |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
255 :type 'boolean |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
256 :group 'type-break) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
257 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
258 (defvar type-break-mode-line-format |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
259 '(type-break-mode-line-message-mode |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
260 ("" |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
261 type-break-mode-line-break-message |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
262 type-break-mode-line-warning)) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
263 "*Format of messages in the mode line concerning typing breaks.") |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
264 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
265 (defvar type-break-mode-line-break-message |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
266 '(type-break-mode-line-break-message-p |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
267 type-break-mode-line-break-string)) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
268 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
269 (defvar type-break-mode-line-break-message-p nil) |
30391
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
270 (defvar type-break-mode-line-break-string " *** TAKE A TYPING BREAK NOW ***") |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
271 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
272 (defvar type-break-mode-line-warning |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
273 '(type-break-mode-line-break-message-p |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
274 ("") |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
275 (type-break-warning-countdown-string |
30391
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
276 (" *** " |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
277 "Break in " |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
278 type-break-warning-countdown-string |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
279 " " |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
280 type-break-warning-countdown-string-type |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
281 "***")))) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
282 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
283 (defvar type-break-warning-countdown-string nil |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
284 "If non-nil, this is a countdown for the next typing break. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
285 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
286 This variable, in conjunction with `type-break-warning-countdown-string-type' |
50551
f51ff6ca84ca
(type-break-warning-countdown-string): Doc fix; escape open paren at col 0.
John Paul Wallington <jpw@pobox.com>
parents:
34145
diff
changeset
|
287 \(which indicates whether this value is a number of keystrokes or seconds) |
55189 | 288 is installed in `mode-line-format' to notify of imminent typing breaks.") |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
289 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
290 (defvar type-break-warning-countdown-string-type nil |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
291 "Indicates the unit type of `type-break-warning-countdown-string'. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
292 It will be either \"seconds\" or \"keystrokes\".") |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
293 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
294 |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
295 ;; These are internal variables. Do not set them yourself. |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
296 |
8497
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
297 (defvar type-break-alarm-p nil) |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
298 (defvar type-break-keystroke-count 0) |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
299 (defvar type-break-time-last-break nil) |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
300 (defvar type-break-time-next-break nil) |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
301 (defvar type-break-time-last-command (current-time)) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
302 (defvar type-break-current-time-warning-interval nil) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
303 (defvar type-break-current-keystroke-warning-interval nil) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
304 (defvar type-break-time-warning-count 0) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
305 (defvar type-break-keystroke-warning-count 0) |
55189 | 306 (defvar type-break-interval-start nil) |
307 | |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
308 |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
309 ;;;###autoload |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
310 (defun type-break-mode (&optional prefix) |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
311 "Enable or disable typing-break mode. |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
312 This is a minor mode, but it is global to all buffers by default. |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
313 |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
314 When this mode is enabled, the user is encouraged to take typing breaks at |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
315 appropriate intervals; either after a specified amount of time or when the |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
316 user has exceeded a keystroke threshold. When the time arrives, the user |
55189 | 317 is asked to take a break. If the user refuses at that time, Emacs will ask |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
318 again in a short period of time. The idea is to give the user enough time |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
319 to find a good breaking point in his or her work, but be sufficiently |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
320 annoying to discourage putting typing breaks off indefinitely. |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
321 |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
322 A negative prefix argument disables this mode. |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
323 No argument or any non-negative argument enables it. |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
324 |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
325 The user may enable or disable this mode by setting the variable of the |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
326 same name, though setting it in that way doesn't reschedule a break or |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
327 reset the keystroke counter. |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
328 |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
329 If the mode was previously disabled and is enabled as a consequence of |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
330 calling this function, it schedules a break with `type-break-schedule' to |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
331 make sure one occurs (the user can call that command to reschedule the |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
332 break at any time). It also initializes the keystroke counter. |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
333 |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
334 The variable `type-break-interval' specifies the number of seconds to |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
335 schedule between regular typing breaks. This variable doesn't directly |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
336 affect the time schedule; it simply provides a default for the |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
337 `type-break-schedule' command. |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
338 |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
339 If set, the variable `type-break-good-rest-interval' specifies the minimum |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
340 amount of time which is considered a reasonable typing break. Whenever |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
341 that time has elapsed, typing breaks are automatically rescheduled for |
55189 | 342 later even if Emacs didn't prompt you to take one first. Also, if a break |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
343 is ended before this much time has elapsed, the user will be asked whether |
55189 | 344 or not to continue. A nil value for this variable prevents automatic |
345 break rescheduling, making `type-break-interval' an upper bound on the time | |
346 between breaks. In this case breaks will be prompted for as usual before | |
347 the upper bound if the keystroke threshold is reached. | |
348 | |
349 If `type-break-good-rest-interval' is nil and | |
350 `type-break-good-break-interval' is set, then confirmation is required to | |
351 interrupt a break before `type-break-good-break-interval' seconds | |
352 have passed. This provides for an upper bound on the time between breaks | |
353 together with confirmation of interruptions to these breaks. | |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
354 |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
355 The variable `type-break-keystroke-threshold' is used to determine the |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
356 thresholds at which typing breaks should be considered. You can use |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
357 the command `type-break-guesstimate-keystroke-threshold' to try to |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
358 approximate good values for this. |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
359 |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
360 There are several variables that affect how or when warning messages about |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
361 imminent typing breaks are displayed. They include: |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
362 |
22049
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
363 `type-break-mode-line-message-mode' |
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
364 `type-break-time-warning-intervals' |
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
365 `type-break-keystroke-warning-intervals' |
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
366 `type-break-warning-repeat' |
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
367 `type-break-warning-countdown-string' |
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
368 `type-break-warning-countdown-string-type' |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
369 |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
370 There are several variables that affect if, how, and when queries to begin |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
371 a typing break occur. They include: |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
372 |
22049
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
373 `type-break-query-mode' |
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
374 `type-break-query-function' |
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
375 `type-break-query-interval' |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
376 |
55189 | 377 The command `type-break-statistics' prints interesting things. |
378 | |
379 Finally, a file (named `type-break-file-name') is used to store information | |
380 across Emacs sessions. This provides recovery of the break status between | |
381 sessions and after a crash. Manual changes to the file may result in | |
382 problems." | |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
383 (interactive "P") |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
384 (type-break-check-post-command-hook) |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
385 |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
386 (let ((already-enabled type-break-mode)) |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
387 (setq type-break-mode (>= (prefix-numeric-value prefix) 0)) |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
388 |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
389 (cond |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
390 ((and already-enabled type-break-mode) |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
391 (and (interactive-p) |
22049
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
392 (message "Type Break mode is already enabled"))) |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
393 (type-break-mode |
59684
bc6858294dbb
(type-break-mode): Add a test for type-break-file-name being non-nil.
Eli Zaretskii <eliz@gnu.org>
parents:
59554
diff
changeset
|
394 (when type-break-file-name |
bc6858294dbb
(type-break-mode): Add a test for type-break-file-name being non-nil.
Eli Zaretskii <eliz@gnu.org>
parents:
59554
diff
changeset
|
395 (with-current-buffer (find-file-noselect type-break-file-name 'nowarn) |
bc6858294dbb
(type-break-mode): Add a test for type-break-file-name being non-nil.
Eli Zaretskii <eliz@gnu.org>
parents:
59554
diff
changeset
|
396 (setq buffer-save-without-query t))) |
59489
a72af674f3d8
(type-break-mode): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
59129
diff
changeset
|
397 |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
398 (or global-mode-string |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
399 (setq global-mode-string '(""))) |
22069
3df130425e5e
(type-break-mode): Don't alter global-mode-string.
Richard M. Stallman <rms@gnu.org>
parents:
22049
diff
changeset
|
400 (or (assq 'type-break-mode-line-message-mode |
3df130425e5e
(type-break-mode): Don't alter global-mode-string.
Richard M. Stallman <rms@gnu.org>
parents:
22049
diff
changeset
|
401 minor-mode-alist) |
3df130425e5e
(type-break-mode): Don't alter global-mode-string.
Richard M. Stallman <rms@gnu.org>
parents:
22049
diff
changeset
|
402 (setq minor-mode-alist |
3df130425e5e
(type-break-mode): Don't alter global-mode-string.
Richard M. Stallman <rms@gnu.org>
parents:
22049
diff
changeset
|
403 (cons type-break-mode-line-format |
3df130425e5e
(type-break-mode): Don't alter global-mode-string.
Richard M. Stallman <rms@gnu.org>
parents:
22049
diff
changeset
|
404 minor-mode-alist))) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
405 (type-break-keystroke-reset) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
406 (type-break-mode-line-countdown-or-break nil) |
55189 | 407 |
59554
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
408 (setq type-break-time-last-break |
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
409 (or (type-break-get-previous-time) |
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
410 (current-time))) |
55189 | 411 |
412 ;; schedule according to break time from session file | |
413 (type-break-schedule | |
414 (let (diff) | |
415 (if (and type-break-time-last-break | |
416 (< (setq diff (type-break-time-difference | |
417 type-break-time-last-break | |
418 (current-time))) | |
419 type-break-interval)) | |
420 ;; use the file's value | |
421 (progn | |
422 (setq type-break-keystroke-count | |
423 (type-break-get-previous-count)) | |
424 ;; file the time, in case it was read from the auto-save file | |
425 (type-break-file-time type-break-interval-start) | |
426 (setq type-break-interval-start type-break-time-last-break) | |
427 (- type-break-interval diff)) | |
428 ;; schedule from now | |
429 (setq type-break-interval-start (current-time)) | |
430 (type-break-file-time type-break-interval-start) | |
431 type-break-interval)) | |
432 type-break-interval-start | |
433 type-break-interval) | |
434 | |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
435 (and (interactive-p) |
55189 | 436 (message "Type Break mode is enabled and set"))) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
437 (t |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
438 (type-break-keystroke-reset) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
439 (type-break-mode-line-countdown-or-break nil) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
440 (type-break-cancel-schedule) |
55189 | 441 (do-auto-save) |
59554
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
442 (when type-break-file-name |
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
443 (with-current-buffer (find-file-noselect type-break-file-name |
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
444 'nowarn) |
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
445 (set-buffer-modified-p nil) |
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
446 (unlock-buffer) |
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
447 (kill-this-buffer))) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
448 (and (interactive-p) |
22049
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
449 (message "Type Break mode is disabled"))))) |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
450 type-break-mode) |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
451 |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
452 (defun type-break-mode-line-message-mode (&optional prefix) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
453 "Enable or disable warnings in the mode line about typing breaks. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
454 |
55189 | 455 A negative PREFIX argument disables this mode. |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
456 No argument or any non-negative argument enables it. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
457 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
458 The user may also enable or disable this mode simply by setting the |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
459 variable of the same name. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
460 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
461 Variables controlling the display of messages in the mode line include: |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
462 |
22049
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
463 `mode-line-format' |
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
464 `global-mode-string' |
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
465 `type-break-mode-line-break-message' |
247682b1da6b
(type-break-mode-line-message-mode): Doc fix. Fix some messages.
Richard M. Stallman <rms@gnu.org>
parents:
21670
diff
changeset
|
466 `type-break-mode-line-warning'" |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
467 (interactive "P") |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
468 (setq type-break-mode-line-message-mode |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
469 (>= (prefix-numeric-value prefix) 0)) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
470 (and (interactive-p) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
471 (if type-break-mode-line-message-mode |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
472 (message "type-break-mode-line-message-mode is enabled") |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
473 (message "type-break-mode-line-message-mode is disabled"))) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
474 type-break-mode-line-message-mode) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
475 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
476 (defun type-break-query-mode (&optional prefix) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
477 "Enable or disable warnings in the mode line about typing breaks. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
478 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
479 When enabled, the user is periodically queried about whether to take a |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
480 typing break at that moment. The function which does this query is |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
481 specified by the variable `type-break-query-function'. |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
482 |
55189 | 483 A negative PREFIX argument disables this mode. |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
484 No argument or any non-negative argument enables it. |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
485 |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
486 The user may also enable or disable this mode simply by setting the |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
487 variable of the same name." |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
488 (interactive "P") |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
489 (setq type-break-query-mode |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
490 (>= (prefix-numeric-value prefix) 0)) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
491 (and (interactive-p) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
492 (if type-break-query-mode |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
493 (message "type-break-query-mode is enabled") |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
494 (message "type-break-query-mode is disabled"))) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
495 type-break-query-mode) |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
496 |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
497 |
55189 | 498 ;;; session file functions |
499 | |
500 (defvar type-break-auto-save-file-name | |
501 (let ((buffer-file-name type-break-file-name)) | |
502 (make-auto-save-file-name)) | |
503 "Auto-save name of `type-break-file-name'.") | |
504 | |
505 (defun type-break-file-time (&optional time) | |
506 "File break time in `type-break-file-name', unless the file is locked." | |
59554
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
507 (if (and type-break-file-name |
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
508 (not (stringp (file-locked-p type-break-file-name)))) |
55189 | 509 (with-current-buffer (find-file-noselect type-break-file-name |
510 'nowarn) | |
511 (let ((inhibit-read-only t)) | |
512 (erase-buffer) | |
513 (insert (format "%s\n\n" (or time type-break-interval-start))) | |
514 ;; file saving is left to auto-save | |
515 )))) | |
516 | |
517 (defun type-break-file-keystroke-count () | |
518 "File keystroke count in `type-break-file-name', unless the file is locked." | |
59554
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
519 (if (and type-break-file-name |
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
520 (not (stringp (file-locked-p type-break-file-name)))) |
59129
c5ec711f16c8
(type-break-mode): Set buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents:
57744
diff
changeset
|
521 ;; Prevent deactivation of the mark in some other buffer. |
c5ec711f16c8
(type-break-mode): Set buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents:
57744
diff
changeset
|
522 (let (deactivate-mark) |
c5ec711f16c8
(type-break-mode): Set buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents:
57744
diff
changeset
|
523 (with-current-buffer (find-file-noselect type-break-file-name |
c5ec711f16c8
(type-break-mode): Set buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents:
57744
diff
changeset
|
524 'nowarn) |
c5ec711f16c8
(type-break-mode): Set buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents:
57744
diff
changeset
|
525 (save-excursion |
c5ec711f16c8
(type-break-mode): Set buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents:
57744
diff
changeset
|
526 (let ((inhibit-read-only t)) |
c5ec711f16c8
(type-break-mode): Set buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents:
57744
diff
changeset
|
527 (goto-char (point-min)) |
c5ec711f16c8
(type-break-mode): Set buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents:
57744
diff
changeset
|
528 (forward-line) |
c5ec711f16c8
(type-break-mode): Set buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents:
57744
diff
changeset
|
529 (delete-region (point) (save-excursion (end-of-line) (point))) |
c5ec711f16c8
(type-break-mode): Set buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents:
57744
diff
changeset
|
530 (insert (format "%s" type-break-keystroke-count)) |
c5ec711f16c8
(type-break-mode): Set buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents:
57744
diff
changeset
|
531 ;; file saving is left to auto-save |
c5ec711f16c8
(type-break-mode): Set buffer-save-without-query.
Richard M. Stallman <rms@gnu.org>
parents:
57744
diff
changeset
|
532 )))))) |
55189 | 533 |
534 (defun timep (time) | |
535 "If TIME is in the format returned by `current-time' then | |
536 return TIME, else return nil." | |
537 (and (listp time) | |
538 (eq (length time) 3) | |
539 (integerp (car time)) | |
540 (integerp (nth 1 time)) | |
541 (integerp (nth 2 time)) | |
542 time)) | |
543 | |
544 (defun type-break-choose-file () | |
545 "Return file to read from." | |
546 (cond | |
59554
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
547 ((not type-break-file-name) |
73d669603319
(type-break-file-name): Doc update as per the above.
Eli Zaretskii <eliz@gnu.org>
parents:
59489
diff
changeset
|
548 nil) |
55189 | 549 ((and (file-exists-p type-break-auto-save-file-name) |
550 (file-readable-p type-break-auto-save-file-name)) | |
551 type-break-auto-save-file-name) | |
552 ((and (file-exists-p type-break-file-name) | |
553 (file-readable-p type-break-file-name)) | |
554 type-break-file-name) | |
555 (t nil))) | |
556 | |
557 (defun type-break-get-previous-time () | |
558 "Get previous break time from `type-break-file-name'. | |
559 Returns nil if the file is missing or if the time breaks with the | |
560 `current-time' format." | |
561 (let ((file (type-break-choose-file))) | |
562 (if file | |
563 (timep ;; returns expected format, else nil | |
564 (with-current-buffer (find-file-noselect file 'nowarn) | |
76297
35a8988b02f7
(type-break-get-previous-time): Handle end-of-file errors specially
Richard M. Stallman <rms@gnu.org>
parents:
75551
diff
changeset
|
565 (condition-case nil |
35a8988b02f7
(type-break-get-previous-time): Handle end-of-file errors specially
Richard M. Stallman <rms@gnu.org>
parents:
75551
diff
changeset
|
566 (save-excursion |
35a8988b02f7
(type-break-get-previous-time): Handle end-of-file errors specially
Richard M. Stallman <rms@gnu.org>
parents:
75551
diff
changeset
|
567 (goto-char (point-min)) |
35a8988b02f7
(type-break-get-previous-time): Handle end-of-file errors specially
Richard M. Stallman <rms@gnu.org>
parents:
75551
diff
changeset
|
568 (read (current-buffer))) |
35a8988b02f7
(type-break-get-previous-time): Handle end-of-file errors specially
Richard M. Stallman <rms@gnu.org>
parents:
75551
diff
changeset
|
569 (end-of-file |
35a8988b02f7
(type-break-get-previous-time): Handle end-of-file errors specially
Richard M. Stallman <rms@gnu.org>
parents:
75551
diff
changeset
|
570 (error "End of file in `%s'" file)))))))) |
55189 | 571 |
572 (defun type-break-get-previous-count () | |
573 "Get previous keystroke count from `type-break-file-name'. | |
574 Return 0 if the file is missing or if the form read is not an | |
575 integer." | |
576 (let ((file (type-break-choose-file))) | |
577 (if (and file | |
578 (integerp | |
579 (setq file | |
580 (with-current-buffer | |
581 (find-file-noselect file 'nowarn) | |
76464
f4a10797c3ce
(type-break-get-previous-count): Repeat previous change here.
Richard M. Stallman <rms@gnu.org>
parents:
76297
diff
changeset
|
582 (condition-case nil |
f4a10797c3ce
(type-break-get-previous-count): Repeat previous change here.
Richard M. Stallman <rms@gnu.org>
parents:
76297
diff
changeset
|
583 (save-excursion |
f4a10797c3ce
(type-break-get-previous-count): Repeat previous change here.
Richard M. Stallman <rms@gnu.org>
parents:
76297
diff
changeset
|
584 (goto-char (point-min)) |
f4a10797c3ce
(type-break-get-previous-count): Repeat previous change here.
Richard M. Stallman <rms@gnu.org>
parents:
76297
diff
changeset
|
585 (forward-line 1) |
f4a10797c3ce
(type-break-get-previous-count): Repeat previous change here.
Richard M. Stallman <rms@gnu.org>
parents:
76297
diff
changeset
|
586 (read (current-buffer))) |
f4a10797c3ce
(type-break-get-previous-count): Repeat previous change here.
Richard M. Stallman <rms@gnu.org>
parents:
76297
diff
changeset
|
587 (end-of-file |
f4a10797c3ce
(type-break-get-previous-count): Repeat previous change here.
Richard M. Stallman <rms@gnu.org>
parents:
76297
diff
changeset
|
588 (error "End of file in `%s'" file))))))) |
55189 | 589 file |
590 0))) | |
591 | |
592 | |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
593 ;;;###autoload |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
594 (defun type-break () |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
595 "Take a typing break. |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
596 |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
597 During the break, a demo selected from the functions listed in |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
598 `type-break-demo-functions' is run. |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
599 |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
600 After the typing break is finished, the next break is scheduled |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
601 as per the function `type-break-schedule'." |
5939 | 602 (interactive) |
30391
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
603 (do-auto-save) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
604 (type-break-cancel-schedule) |
55189 | 605 ;; remove any query scheduled during interactive invocation |
606 (remove-hook 'type-break-post-command-hook 'type-break-do-query) | |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
607 (let ((continue t) |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
608 (start-time (current-time))) |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
609 (setq type-break-time-last-break start-time) |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
610 (while continue |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
611 (save-window-excursion |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
612 ;; Eat the screen. |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
613 (and (eq (selected-window) (minibuffer-window)) |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
614 (other-window 1)) |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
615 (delete-other-windows) |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
616 (scroll-right (window-width)) |
55189 | 617 (unless type-break-terse-messages |
618 (message "Press any key to resume from typing break.")) | |
5939 | 619 |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
620 (random t) |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
621 (let* ((len (length type-break-demo-functions)) |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
622 (idx (random len)) |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
623 (fn (nth idx type-break-demo-functions))) |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
624 (condition-case () |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
625 (funcall fn) |
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
626 (error nil)))) |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
627 |
55189 | 628 (let ((good-interval (or type-break-good-rest-interval |
629 type-break-good-break-interval))) | |
630 (cond | |
631 (good-interval | |
632 (let ((break-secs (type-break-time-difference | |
633 start-time (current-time)))) | |
634 (cond | |
635 ((>= break-secs good-interval) | |
636 (setq continue nil)) | |
637 ;; 60 seconds may be too much leeway if the break is only 3 | |
638 ;; minutes to begin with. You can just say "no" to the query | |
639 ;; below if you're in that much of a hurry. | |
640 ;;((> 60 (abs (- break-secs good-interval))) | |
641 ;; (setq continue nil)) | |
642 ((funcall | |
643 type-break-query-function | |
644 (format | |
645 (if type-break-terse-messages | |
646 "%s%s remaining. Continue break? " | |
647 "%sYou really ought to rest %s more. Continue break? ") | |
648 (type-break-time-stamp) | |
649 (type-break-format-time (- good-interval | |
650 break-secs))))) | |
651 (t | |
652 (setq continue nil))))) | |
653 (t (setq continue nil)))))) | |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
654 |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
655 (type-break-keystroke-reset) |
55189 | 656 (type-break-file-time) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
657 (type-break-mode-line-countdown-or-break nil) |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
658 (type-break-schedule)) |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
659 |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
660 |
55189 | 661 (defun type-break-schedule (&optional time start interval) |
8497
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
662 "Schedule a typing break for TIME seconds from now. |
55189 | 663 If time is not specified it defaults to `type-break-interval'. |
664 START and INTERVAL are used when recovering a break. | |
665 START is the start of the break (defaults to now). | |
666 INTERVAL is the full length of an interval (defaults to TIME)." | |
8497
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
667 (interactive (list (and current-prefix-arg |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
668 (prefix-numeric-value current-prefix-arg)))) |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
669 (or time (setq time type-break-interval)) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
670 (type-break-check-post-command-hook) |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
671 (type-break-cancel-schedule) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
672 (type-break-time-warning-schedule time 'reset) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
673 (type-break-run-at-time (max 1 time) nil 'type-break-alarm) |
8497
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
674 (setq type-break-time-next-break |
55189 | 675 (type-break-time-sum (or start (current-time)) |
676 (or interval time)))) | |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
677 |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
678 (defun type-break-cancel-schedule () |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
679 (type-break-cancel-time-warning-schedule) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
680 (type-break-cancel-function-timers 'type-break-alarm) |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
681 (setq type-break-alarm-p nil) |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
682 (setq type-break-time-next-break nil)) |
5939 | 683 |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
684 (defun type-break-time-warning-schedule (&optional time resetp) |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
685 (let ((type-break-current-time-warning-interval nil)) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
686 (type-break-cancel-time-warning-schedule)) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
687 (add-hook 'type-break-post-command-hook 'type-break-time-warning 'append) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
688 (cond |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
689 (type-break-time-warning-intervals |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
690 (and resetp |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
691 (setq type-break-current-time-warning-interval |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
692 type-break-time-warning-intervals)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
693 |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
694 (or time |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
695 (setq time (type-break-time-difference (current-time) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
696 type-break-time-next-break))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
697 |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
698 (while (and type-break-current-time-warning-interval |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
699 (> (car type-break-current-time-warning-interval) time)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
700 (setq type-break-current-time-warning-interval |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
701 (cdr type-break-current-time-warning-interval))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
702 |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
703 (cond |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
704 (type-break-current-time-warning-interval |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
705 (setq time (- time (car type-break-current-time-warning-interval))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
706 (setq type-break-current-time-warning-interval |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
707 (cdr type-break-current-time-warning-interval)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
708 |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
709 ;(let (type-break-current-time-warning-interval) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
710 ; (type-break-cancel-time-warning-schedule)) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
711 (type-break-run-at-time (max 1 time) nil 'type-break-time-warning-alarm) |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
712 |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
713 (cond |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
714 (resetp |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
715 (setq type-break-warning-countdown-string nil)) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
716 (t |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
717 (setq type-break-warning-countdown-string (number-to-string time)) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
718 (setq type-break-warning-countdown-string-type "seconds")))))))) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
719 |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
720 (defun type-break-cancel-time-warning-schedule () |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
721 (type-break-cancel-function-timers 'type-break-time-warning-alarm) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
722 (remove-hook 'type-break-post-command-hook 'type-break-time-warning) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
723 (setq type-break-current-time-warning-interval |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
724 type-break-time-warning-intervals) |
55189 | 725 (setq type-break-time-warning-count 0) ; avoid warnings after break |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
726 (setq type-break-warning-countdown-string nil)) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
727 |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
728 (defun type-break-alarm () |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
729 (type-break-check-post-command-hook) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
730 (setq type-break-alarm-p t) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
731 (type-break-mode-line-countdown-or-break 'break)) |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
732 |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
733 (defun type-break-time-warning-alarm () |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
734 (type-break-check-post-command-hook) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
735 (type-break-time-warning-schedule) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
736 (setq type-break-time-warning-count type-break-warning-repeat) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
737 (type-break-time-warning) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
738 (type-break-mode-line-countdown-or-break 'countdown)) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
739 |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
740 |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
741 (defun type-break-run-tb-post-command-hook () |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
742 (and type-break-mode |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
743 (run-hooks 'type-break-post-command-hook))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
744 |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
745 (defun type-break-check () |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
746 "Ask to take a typing break if appropriate. |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
747 This may be the case either because the scheduled time has come \(and the |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
748 minimum keystroke threshold has been reached\) or because the maximum |
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
749 keystroke threshold has been exceeded." |
55189 | 750 (type-break-file-keystroke-count) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
751 (let* ((min-threshold (car type-break-keystroke-threshold)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
752 (max-threshold (cdr type-break-keystroke-threshold))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
753 (and type-break-good-rest-interval |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
754 (progn |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
755 (and (> (type-break-time-difference |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
756 type-break-time-last-command (current-time)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
757 type-break-good-rest-interval) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
758 (progn |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
759 (type-break-keystroke-reset) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
760 (type-break-mode-line-countdown-or-break nil) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
761 (setq type-break-time-last-break (current-time)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
762 (type-break-schedule))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
763 (setq type-break-time-last-command (current-time)))) |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
764 |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
765 (and type-break-keystroke-threshold |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
766 (let ((keys (this-command-keys))) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
767 (cond |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
768 ;; Ignore mouse motion |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
769 ((and (vectorp keys) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
770 (consp (aref keys 0)) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
771 (memq (car (aref keys 0)) '(mouse-movement)))) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
772 (t |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
773 (setq type-break-keystroke-count |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
774 (+ type-break-keystroke-count (length keys))))))) |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
775 |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
776 (cond |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
777 (type-break-alarm-p |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
778 (cond |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
779 ((input-pending-p)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
780 ((eq (selected-window) (minibuffer-window))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
781 ((and min-threshold |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
782 (< type-break-keystroke-count min-threshold)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
783 (type-break-schedule)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
784 (t |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
785 ;; If keystroke count is within min-threshold of |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
786 ;; max-threshold, lower it to reduce the likelihood of an |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
787 ;; immediate subsequent query. |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
788 (and max-threshold |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
789 min-threshold |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
790 (< (- max-threshold type-break-keystroke-count) min-threshold) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
791 (progn |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
792 (type-break-keystroke-reset) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
793 (setq type-break-keystroke-count min-threshold))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
794 (type-break-query)))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
795 ((and type-break-keystroke-warning-intervals |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
796 max-threshold |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
797 (= type-break-keystroke-warning-count 0) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
798 (type-break-check-keystroke-warning))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
799 ((and max-threshold |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
800 (> type-break-keystroke-count max-threshold) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
801 (not (input-pending-p)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
802 (not (eq (selected-window) (minibuffer-window)))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
803 (type-break-keystroke-reset) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
804 (setq type-break-keystroke-count (or min-threshold 0)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
805 (type-break-query))))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
806 |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
807 ;; This should return t if warnings were enabled, nil otherwise. |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
808 (defun type-break-check-keystroke-warning () |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
809 ;; This is safe because the caller should have checked that the cdr was |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
810 ;; non-nil already. |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
811 (let ((left (- (cdr type-break-keystroke-threshold) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
812 type-break-keystroke-count))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
813 (cond |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
814 ((null (car type-break-current-keystroke-warning-interval)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
815 nil) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
816 ((> left (car type-break-current-keystroke-warning-interval)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
817 nil) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
818 (t |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
819 (while (and (car type-break-current-keystroke-warning-interval) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
820 (< left (car type-break-current-keystroke-warning-interval))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
821 (setq type-break-current-keystroke-warning-interval |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
822 (cdr type-break-current-keystroke-warning-interval))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
823 (setq type-break-keystroke-warning-count type-break-warning-repeat) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
824 (add-hook 'type-break-post-command-hook 'type-break-keystroke-warning) |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
825 (setq type-break-warning-countdown-string (number-to-string left)) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
826 (setq type-break-warning-countdown-string-type "keystrokes") |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
827 (type-break-mode-line-countdown-or-break 'countdown) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
828 t)))) |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
829 |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
830 ;; Arrange for a break query to be made, when the user stops typing furiously. |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
831 (defun type-break-query () |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
832 (add-hook 'type-break-post-command-hook 'type-break-do-query)) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
833 |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
834 (defun type-break-do-query () |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
835 (cond |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
836 ((not type-break-query-mode) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
837 (type-break-noninteractive-query) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
838 (type-break-schedule type-break-query-interval) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
839 (remove-hook 'type-break-post-command-hook 'type-break-do-query)) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
840 ((sit-for 2) |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
841 (condition-case () |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
842 (cond |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
843 ((let ((type-break-mode nil) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
844 ;; yes-or-no-p sets this-command to exit-minibuffer, |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
845 ;; which hoses undo or yank-pop (if you happened to be |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
846 ;; yanking just when the query occurred). |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
847 (this-command this-command)) |
30391
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
848 ;; Cancel schedule to prevent possibility of a second query |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
849 ;; from taking place before this one has even returned. |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
850 ;; The condition-case wrapper will reschedule on quit. |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
851 (type-break-cancel-schedule) |
55189 | 852 ;; Also prevent a second query when the break is interrupted. |
853 (remove-hook 'type-break-post-command-hook 'type-break-do-query) | |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
854 (funcall type-break-query-function |
30391
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
855 (format "%s%s" |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
856 (type-break-time-stamp) |
55189 | 857 (if type-break-terse-messages |
858 "Break now? " | |
859 "Take a break from typing now? ")))) | |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
860 (type-break)) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
861 (t |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
862 (type-break-schedule type-break-query-interval))) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
863 (quit |
55189 | 864 (type-break-schedule type-break-query-interval)))))) |
5939 | 865 |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
866 (defun type-break-noninteractive-query (&optional ignored-args) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
867 "Null query function which doesn't interrupt user and assumes `no'. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
868 It prints a reminder in the echo area to take a break, but doesn't enforce |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
869 this or ask the user to start one right now." |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
870 (cond |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
871 (type-break-mode-line-message-mode) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
872 (t |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
873 (beep t) |
30391
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
874 (message "%sYou should take a typing break now. Do `M-x type-break'." |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
875 (type-break-time-stamp)) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
876 (sit-for 1) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
877 (beep t) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
878 ;; return nil so query caller knows to reset reminder, as if user |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
879 ;; said "no" in response to yes-or-no-p. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
880 nil))) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
881 |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
882 (defun type-break-time-warning () |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
883 (cond |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
884 ((and (car type-break-keystroke-threshold) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
885 (< type-break-keystroke-count (car type-break-keystroke-threshold)))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
886 ((> type-break-time-warning-count 0) |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
887 (let ((timeleft (type-break-time-difference (current-time) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
888 type-break-time-next-break))) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
889 (setq type-break-warning-countdown-string (number-to-string timeleft)) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
890 (cond |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
891 ((eq (selected-window) (minibuffer-window))) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
892 ;; Do nothing if the command was just a prefix arg, since that will |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
893 ;; immediately be followed by some other interactive command. |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
894 ;; Otherwise, it is particularly annoying for the sit-for below to |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
895 ;; delay redisplay when one types sequences like `C-u -1 C-l'. |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
896 ((memq this-command '(digit-argument universal-argument))) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
897 ((not type-break-mode-line-message-mode) |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
898 ;; Pause for a moment so any previous message can be seen. |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
899 (sit-for 2) |
30391
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
900 (message "%sWarning: typing break due in %s." |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
901 (type-break-time-stamp) |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
902 (type-break-format-time timeleft)) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
903 (setq type-break-time-warning-count |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
904 (1- type-break-time-warning-count)))))) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
905 (t |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
906 (remove-hook 'type-break-post-command-hook 'type-break-time-warning) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
907 (setq type-break-warning-countdown-string nil)))) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
908 |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
909 (defun type-break-keystroke-warning () |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
910 (cond |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
911 ((> type-break-keystroke-warning-count 0) |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
912 (setq type-break-warning-countdown-string |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
913 (number-to-string (- (cdr type-break-keystroke-threshold) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
914 type-break-keystroke-count))) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
915 (cond |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
916 ((eq (selected-window) (minibuffer-window))) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
917 ;; Do nothing if the command was just a prefix arg, since that will |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
918 ;; immediately be followed by some other interactive command. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
919 ;; Otherwise, it is particularly annoying for the sit-for below to |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
920 ;; delay redisplay when one types sequences like `C-u -1 C-l'. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
921 ((memq this-command '(digit-argument universal-argument))) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
922 ((not type-break-mode-line-message-mode) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
923 (sit-for 2) |
30391
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
924 (message "%sWarning: typing break due in %s keystrokes." |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
925 (type-break-time-stamp) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
926 (- (cdr type-break-keystroke-threshold) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
927 type-break-keystroke-count)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
928 (setq type-break-keystroke-warning-count |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
929 (1- type-break-keystroke-warning-count))))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
930 (t |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
931 (remove-hook 'type-break-post-command-hook |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
932 'type-break-keystroke-warning) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
933 (setq type-break-warning-countdown-string nil)))) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
934 |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
935 (defun type-break-mode-line-countdown-or-break (&optional type) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
936 (cond |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
937 ((not type-break-mode-line-message-mode)) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
938 ((eq type 'countdown) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
939 ;(setq type-break-mode-line-break-message-p nil) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
940 (add-hook 'type-break-post-command-hook |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
941 'type-break-force-mode-line-update 'append)) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
942 ((eq type 'break) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
943 ;; Alternate |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
944 (setq type-break-mode-line-break-message-p |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
945 (not type-break-mode-line-break-message-p)) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
946 (remove-hook 'type-break-post-command-hook |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
947 'type-break-force-mode-line-update)) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
948 (t |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
949 (setq type-break-mode-line-break-message-p nil) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
950 (setq type-break-warning-countdown-string nil) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
951 (remove-hook 'type-break-post-command-hook |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
952 'type-break-force-mode-line-update))) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
953 (type-break-force-mode-line-update)) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
954 |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
955 |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
956 ;;;###autoload |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
957 (defun type-break-statistics () |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
958 "Print statistics about typing breaks in a temporary buffer. |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
959 This includes the last time a typing break was taken, when the next one is |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
960 scheduled, the keystroke thresholds and the current keystroke count, etc." |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
961 (interactive) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
962 (with-output-to-temp-buffer "*Typing Break Statistics*" |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
963 (princ (format "Typing break statistics\n-----------------------\n |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
964 Typing break mode is currently %s. |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
965 Interactive query for breaks is %s. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
966 Warnings of imminent typing breaks in mode line is %s. |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
967 |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
968 Last typing break ended : %s |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
969 Next scheduled typing break : %s\n |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
970 Minimum keystroke threshold : %s |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
971 Maximum keystroke threshold : %s |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
972 Current keystroke count : %s" |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
973 (if type-break-mode "enabled" "disabled") |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
974 (if type-break-query-mode "enabled" "disabled") |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
975 (if type-break-mode-line-message-mode "enabled" "disabled") |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
976 (if type-break-time-last-break |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
977 (current-time-string type-break-time-last-break) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
978 "never") |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
979 (if (and type-break-mode type-break-time-next-break) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
980 (format "%s\t(%s from now)" |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
981 (current-time-string type-break-time-next-break) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
982 (type-break-format-time |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
983 (type-break-time-difference |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
984 (current-time) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
985 type-break-time-next-break))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
986 "none scheduled") |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
987 (or (car type-break-keystroke-threshold) "none") |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
988 (or (cdr type-break-keystroke-threshold) "none") |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
989 type-break-keystroke-count)))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
990 |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
991 ;;;###autoload |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
992 (defun type-break-guesstimate-keystroke-threshold (wpm &optional wordlen frac) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
993 "Guess values for the minimum/maximum keystroke threshold for typing breaks. |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
994 |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
995 If called interactively, the user is prompted for their guess as to how |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
996 many words per minute they usually type. This value should not be your |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
997 maximum WPM, but your average. Of course, this is harder to gauge since it |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
998 can vary considerably depending on what you are doing. For example, one |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
999 tends to type less when debugging a program as opposed to writing |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
1000 documentation. (Perhaps a separate program should be written to estimate |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
1001 average typing speed.) |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
1002 |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
1003 From that, this command sets the values in `type-break-keystroke-threshold' |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
1004 based on a fairly simple algorithm involving assumptions about the average |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
1005 length of words (5). For the minimum threshold, it uses about a fifth of |
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
1006 the computed maximum threshold. |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1007 |
55189 | 1008 When called from Lisp programs, the optional args WORDLEN and FRAC can be |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1009 used to override the default assumption about average word length and the |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1010 fraction of the maximum threshold to which to set the minimum threshold. |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1011 FRAC should be the inverse of the fractional value; for example, a value of |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1012 2 would mean to use one half, a value of 4 would mean to use one quarter, etc." |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
1013 (interactive "NOn average, how many words per minute do you type? ") |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1014 (let* ((upper (* wpm (or wordlen 5) (/ type-break-interval 60))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1015 (lower (/ upper (or frac 5)))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1016 (or type-break-keystroke-threshold |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1017 (setq type-break-keystroke-threshold (cons nil nil))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1018 (setcar type-break-keystroke-threshold lower) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1019 (setcdr type-break-keystroke-threshold upper) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1020 (if (interactive-p) |
57744
a14f0e52fd5e
(type-break-run-at-time): Always use run-at-time; forget the alternatives.
Richard M. Stallman <rms@gnu.org>
parents:
55189
diff
changeset
|
1021 (message "min threshold: %d\tmax threshold: %d" lower upper)) |
a14f0e52fd5e
(type-break-run-at-time): Always use run-at-time; forget the alternatives.
Richard M. Stallman <rms@gnu.org>
parents:
55189
diff
changeset
|
1022 type-break-keystroke-threshold)) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1023 |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1024 |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1025 ;;; misc functions |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1026 |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1027 ;; Compute the difference, in seconds, between a and b, two structures |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1028 ;; similar to those returned by `current-time'. |
8497
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1029 ;; Use addition rather than logand since that is more robust; the low 16 |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1030 ;; bits of the seconds might have been incremented, making it more than 16 |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1031 ;; bits wide. |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1032 (defun type-break-time-difference (a b) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1033 (+ (lsh (- (car b) (car a)) 16) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1034 (- (car (cdr b)) (car (cdr a))))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1035 |
8497
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1036 ;; Return (in a new list the same in structure to that returned by |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1037 ;; `current-time') the sum of the arguments. Each argument may be a time |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1038 ;; list or a single integer, a number of seconds. |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1039 ;; This function keeps the high and low 16 bits of the seconds properly |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1040 ;; balanced so that the lower value never exceeds 16 bits. Otherwise, when |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1041 ;; the result is passed to `current-time-string' it will toss some of the |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1042 ;; "low" bits and format the time incorrectly. |
8497
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1043 (defun type-break-time-sum (&rest tmlist) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1044 (let ((high 0) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1045 (low 0) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1046 (micro 0) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1047 tem) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1048 (while tmlist |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1049 (setq tem (car tmlist)) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1050 (setq tmlist (cdr tmlist)) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1051 (cond |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1052 ((numberp tem) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1053 (setq low (+ low tem))) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1054 (t |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1055 (setq high (+ high (or (car tem) 0))) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1056 (setq low (+ low (or (car (cdr tem)) 0))) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1057 (setq micro (+ micro (or (car (cdr (cdr tem))) 0)))))) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1058 |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1059 (and (>= micro 1000000) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1060 (progn |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1061 (setq tem (/ micro 1000000)) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1062 (setq low (+ low tem)) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1063 (setq micro (- micro (* tem 1000000))))) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1064 |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1065 (setq tem (lsh low -16)) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1066 (and (> tem 0) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1067 (progn |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1068 (setq low (logand low 65535)) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1069 (setq high (+ high tem)))) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1070 |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1071 (list high low micro))) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1072 |
30391
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
1073 (defun type-break-time-stamp (&optional when) |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
1074 (if (fboundp 'format-time-string) |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
1075 (format-time-string type-break-time-stamp-format when) |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
1076 ;; Emacs 19.28 and prior do not have format-time-string. |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
1077 ;; In that case, result is not customizable. Upgrade today! |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
1078 (format "[%s] " (substring (current-time-string when) 11 16)))) |
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
1079 |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1080 (defun type-break-format-time (secs) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1081 (let ((mins (/ secs 60))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1082 (cond |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1083 ((= mins 1) (format "%d minute" mins)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1084 ((> mins 0) (format "%d minutes" mins)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1085 ((= secs 1) (format "%d second" secs)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1086 (t (format "%d seconds" secs))))) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1087 |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1088 (defun type-break-keystroke-reset () |
55189 | 1089 (setq type-break-interval-start (current-time)) ; not a keystroke |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1090 (setq type-break-keystroke-count 0) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1091 (setq type-break-keystroke-warning-count 0) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1092 (setq type-break-current-keystroke-warning-interval |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1093 type-break-keystroke-warning-intervals) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1094 (remove-hook 'type-break-post-command-hook 'type-break-keystroke-warning)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1095 |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1096 (defun type-break-force-mode-line-update (&optional all) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1097 "Force the mode-line of the current buffer to be redisplayed. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1098 With optional non-nil ALL, force redisplay of all mode-lines." |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1099 (and all (save-excursion (set-buffer (other-buffer)))) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1100 (set-buffer-modified-p (buffer-modified-p))) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1101 |
55189 | 1102 ;; If an exception occurs in Emacs while running the post command hook, the |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1103 ;; value of that hook is clobbered. This is because the value of the |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1104 ;; variable is temporarily set to nil while it's running to prevent |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1105 ;; recursive application, but it also means an exception aborts the routine |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1106 ;; of restoring it. This function is called from the timers to restore it, |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1107 ;; just in case. |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1108 (defun type-break-check-post-command-hook () |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1109 (add-hook 'post-command-hook 'type-break-run-tb-post-command-hook 'append)) |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1110 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1111 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1112 ;;; Timer wrapper functions |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1113 ;;; |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1114 ;;; These shield type-break from variations in the interval timer packages |
55189 | 1115 ;;; for different versions of Emacs. |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1116 |
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1117 (defun type-break-run-at-time (time repeat function) |
54322
4712727ef275
(type-break-emacs-variant): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
1118 (condition-case nil (or (require 'timer) (require 'itimer)) (error nil)) |
57744
a14f0e52fd5e
(type-break-run-at-time): Always use run-at-time; forget the alternatives.
Richard M. Stallman <rms@gnu.org>
parents:
55189
diff
changeset
|
1119 (run-at-time time repeat function)) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1120 |
54322
4712727ef275
(type-break-emacs-variant): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
1121 (defvar timer-dont-exit) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1122 (defun type-break-cancel-function-timers (function) |
57744
a14f0e52fd5e
(type-break-run-at-time): Always use run-at-time; forget the alternatives.
Richard M. Stallman <rms@gnu.org>
parents:
55189
diff
changeset
|
1123 (let ((timer-dont-exit t)) |
a14f0e52fd5e
(type-break-run-at-time): Always use run-at-time; forget the alternatives.
Richard M. Stallman <rms@gnu.org>
parents:
55189
diff
changeset
|
1124 (cancel-function-timers function))) |
18416
2ec71bb15f86
Don't require timer; use autoloaded functions from Emacs or XEmacs,
Noah Friedman <friedman@splode.com>
parents:
18414
diff
changeset
|
1125 |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1126 |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1127 ;;; Demo wrappers |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1128 |
75551
acad3d4a5f18
(type-break-catch-up-event): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
1129 (defun type-break-catch-up-event () |
acad3d4a5f18
(type-break-catch-up-event): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
1130 ;; If the last input event is a down-event, read and discard the |
acad3d4a5f18
(type-break-catch-up-event): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
1131 ;; corresponding up-event too, to avoid triggering another prompt. |
acad3d4a5f18
(type-break-catch-up-event): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
1132 (and (eventp last-input-event) |
acad3d4a5f18
(type-break-catch-up-event): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
1133 (memq 'down (event-modifiers last-input-event)) |
acad3d4a5f18
(type-break-catch-up-event): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
1134 (read-event))) |
acad3d4a5f18
(type-break-catch-up-event): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
1135 |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1136 ;; This is a wrapper around hanoi that calls it with an arg large enough to |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1137 ;; make the largest discs possible that will fit in the window. |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1138 ;; Also, clean up the *Hanoi* buffer after we're done. |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
1139 (defun type-break-demo-hanoi () |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1140 "Take a hanoiing typing break." |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1141 (and (get-buffer "*Hanoi*") |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1142 (kill-buffer "*Hanoi*")) |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1143 (condition-case () |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1144 (progn |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1145 (hanoi (/ (window-width) 8)) |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1146 ;; Wait for user to come back. |
75296
72790464e9ea
(type-break-demo-hanoi, type-break-demo-life)
Chong Yidong <cyd@stupidchicken.com>
parents:
74442
diff
changeset
|
1147 (read-event) |
75551
acad3d4a5f18
(type-break-catch-up-event): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
1148 (type-break-catch-up-event) |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1149 (kill-buffer "*Hanoi*")) |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
1150 (quit |
75296
72790464e9ea
(type-break-demo-hanoi, type-break-demo-life)
Chong Yidong <cyd@stupidchicken.com>
parents:
74442
diff
changeset
|
1151 (read-event) |
75551
acad3d4a5f18
(type-break-catch-up-event): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
1152 (type-break-catch-up-event) |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1153 (and (get-buffer "*Hanoi*") |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1154 (kill-buffer "*Hanoi*"))))) |
5939 | 1155 |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1156 ;; This is a wrapper around life that calls it with a `sleep' arg to make |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1157 ;; it run a little more leisurely. |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1158 ;; Also, clean up the *Life* buffer after we're done. |
8275
4fdf77f4e45c
type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents:
8248
diff
changeset
|
1159 (defun type-break-demo-life () |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1160 "Take a typing break and get a life." |
8282
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1161 (let ((continue t)) |
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1162 (while continue |
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1163 (setq continue nil) |
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1164 (and (get-buffer "*Life*") |
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1165 (kill-buffer "*Life*")) |
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1166 (condition-case () |
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1167 (progn |
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1168 (life 3) |
8304
6c34e249d217
type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents:
8282
diff
changeset
|
1169 ;; wait for user to return |
75296
72790464e9ea
(type-break-demo-hanoi, type-break-demo-life)
Chong Yidong <cyd@stupidchicken.com>
parents:
74442
diff
changeset
|
1170 (read-event) |
75551
acad3d4a5f18
(type-break-catch-up-event): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
1171 (type-break-catch-up-event) |
8282
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1172 (kill-buffer "*Life*")) |
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1173 (life-extinct |
18414
8d2051b79879
Changes which are not mine:
Noah Friedman <friedman@splode.com>
parents:
9355
diff
changeset
|
1174 (message "%s" (get 'life-extinct 'error-message)) |
8282
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1175 ;; restart demo |
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1176 (setq continue t)) |
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1177 (quit |
75551
acad3d4a5f18
(type-break-catch-up-event): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
1178 (type-break-catch-up-event) |
8282
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1179 (and (get-buffer "*Life*") |
206451cdd48a
type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents:
8281
diff
changeset
|
1180 (kill-buffer "*Life*"))))))) |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1181 |
8497
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1182 ;; Boring demo, but doesn't use many cycles |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1183 (defun type-break-demo-boring () |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1184 "Boring typing break demo." |
55189 | 1185 (let ((rmsg (if type-break-terse-messages |
1186 "" | |
1187 "Press any key to resume from typing break")) | |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1188 (buffer-name "*Typing Break Buffer*") |
55189 | 1189 lines elapsed timeleft tmsg) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1190 (condition-case () |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1191 (progn |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1192 (switch-to-buffer (get-buffer-create buffer-name)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1193 (buffer-disable-undo (current-buffer)) |
55189 | 1194 (setq lines (/ (window-body-height) 2)) |
1195 (unless type-break-terse-messages (setq lines (1- lines))) | |
1196 (if type-break-demo-boring-stats | |
1197 (setq lines (- lines 2))) | |
1198 (setq lines (make-string lines ?\C-j)) | |
8497
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1199 (while (not (input-pending-p)) |
55189 | 1200 (erase-buffer) |
8497
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1201 (setq elapsed (type-break-time-difference |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1202 type-break-time-last-break |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1203 (current-time))) |
55189 | 1204 (let ((good-interval (or type-break-good-rest-interval |
1205 type-break-good-break-interval))) | |
1206 (cond | |
1207 (good-interval | |
1208 (setq timeleft (- good-interval elapsed)) | |
1209 (if (> timeleft 0) | |
1210 (setq tmsg | |
1211 (format (if type-break-terse-messages | |
1212 "Break remaining: %s" | |
1213 "You should rest for %s more") | |
1214 (type-break-format-time timeleft))) | |
1215 (setq tmsg | |
1216 (format (if type-break-terse-messages | |
1217 "Break complete (%s elapsed in total)" | |
1218 "Typing break has lasted %s") | |
1219 (type-break-format-time elapsed))))) | |
1220 (t | |
1221 (setq tmsg | |
1222 (format (if type-break-terse-messages | |
1223 "Break has lasted %s" | |
1224 "Typing break has lasted %s") | |
1225 (type-break-format-time elapsed)))))) | |
1226 (insert lines | |
1227 (make-string (/ (- (window-width) (length tmsg)) 2) ?\ ) | |
1228 tmsg) | |
1229 (if (> (length rmsg) 0) | |
1230 (insert "\n" | |
1231 (make-string (/ (- (window-width) (length rmsg)) 2) | |
1232 ?\ ) | |
1233 rmsg)) | |
1234 (if type-break-demo-boring-stats | |
1235 (let* | |
1236 ((message | |
1237 (format | |
1238 (if type-break-terse-messages | |
1239 "Since last break: %s keystrokes\n" | |
1240 "Since your last break you've typed %s keystrokes\n") | |
1241 type-break-keystroke-count)) | |
1242 (column-spaces | |
1243 (make-string (/ (- (window-width) (length message)) 2) | |
1244 ?\ )) | |
1245 (wpm (/ (/ (float type-break-keystroke-count) 5) | |
1246 (/ (type-break-time-difference | |
1247 type-break-interval-start | |
1248 type-break-time-last-break) | |
1249 60.0)))) | |
1250 (insert "\n\n" column-spaces message) | |
1251 (if type-break-terse-messages | |
1252 (insert (format " %s%.2f wpm" | |
1253 column-spaces | |
1254 wpm)) | |
1255 (setq message | |
1256 (format "at an average of %.2f words per minute" | |
1257 wpm)) | |
1258 (insert | |
1259 (make-string (/ (- (window-width) (length message)) 2) | |
1260 ?\ ) | |
1261 message)))) | |
8497
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1262 (goto-char (point-min)) |
3d566eab9870
type-break-time-sum: New function.
Noah Friedman <friedman@splode.com>
parents:
8370
diff
changeset
|
1263 (sit-for 60)) |
75551
acad3d4a5f18
(type-break-catch-up-event): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
1264 (read-event) |
acad3d4a5f18
(type-break-catch-up-event): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
1265 (type-break-catch-up-event) |
8370
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1266 (kill-buffer buffer-name)) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1267 (quit |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1268 (and (get-buffer buffer-name) |
97cacab659d3
type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents:
8305
diff
changeset
|
1269 (kill-buffer buffer-name)))))) |
8276
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
1270 |
73b85998c868
type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents:
8275
diff
changeset
|
1271 |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1272 (provide 'type-break) |
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1273 |
20800
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
1274 (if type-break-mode |
43c77517a76c
(type-break-mode): New customize variable to automatically load the package.
Stephen Eglen <stephen@gnu.org>
parents:
18416
diff
changeset
|
1275 (type-break-mode 1)) |
30391
246b2f521192
(type-break): perform autosave.
Noah Friedman <friedman@splode.com>
parents:
25278
diff
changeset
|
1276 |
52401 | 1277 ;;; arch-tag: 943a2eb3-07e6-420b-993f-96e4796f5fd0 |
8248
5ecef3b02f2d
Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents:
5939
diff
changeset
|
1278 ;;; type-break.el ends here |