annotate lisp/type-break.el @ 8370:97cacab659d3

type-break-time-warning-intervals, type-break-keystroke-warning-intervals, type-break-warning-repeat: New variables. type-break-current-time-warning-interval, type-break-current-keystroke-warning-interval, type-break-time-warning-count, type-break-keystroke-warning-count: New variables. type-break-demo-boring: New function. type-break-demo-functions: Add it to the default list. type-break-post-command-hook: New variable. type-break-run-tb-post-command-hook: New function. type-break-mode: Install them. type-break-keystroke-reset: New function. type-break-check: Call it when appropriate. type-break: call type-break-cancel-schedule. Check that rest time was within 60 seconds of "good rest" interval, not 120. type-break-time-warning-schedule, type-break-cancel-time-warning-schedule, type-break-time-warning-alarm, type-break-time-warning: New functions. type-break-schedule: Remove interactive spec and docstring. Call type-break-time-warning-schedule. type-break-cancel-schedule: Remove interactive spec and docstring. Call type-break-cancel-time-warning-schedule. type-break-check: Don't check for type-break-mode here. type-break-run-tb-post-command-hook does that now. type-break-keystroke-warning: New function. type-break-check-keystroke-warning: New inline function (defsubst). type-break-check: Call it. type-break-query: Bind type-break-mode to nil while calling query function.
author Noah Friedman <friedman@splode.com>
date Thu, 28 Jul 1994 17:32:36 +0000
parents d7bb8587fdf0
children 3d566eab9870
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
3 ;;; Copyright (C) 1994 Noah S. Friedman
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
4
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
5 ;;; Author: Noah Friedman <friedman@prep.ai.mit.edu>
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
6 ;;; Maintainer: friedman@prep.ai.mit.edu
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
7 ;;; Keywords: extensions, timers
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
8 ;;; Status: known to work in GNU Emacs 19.25 or later.
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
9 ;;; Created: 1994-07-13
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
10
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
11 ;;; LCD Archive Entry:
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
12 ;;; type-break|Noah Friedman|friedman@prep.ai.mit.edu|
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
13 ;;; encourage rests from typing at appropriate intervals|
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
14 ;;; $Date$|$Revision$||
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
15
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
16 ;;; $Id$
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
17
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
18 ;;; This program is free software; you can redistribute it and/or modify
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
19 ;;; it under the terms of the GNU General Public License as published by
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
20 ;;; the Free Software Foundation; either version 2, or (at your option)
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
21 ;;; any later version.
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
22 ;;;
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
23 ;;; This program is distributed in the hope that it will be useful,
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
24 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
25 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
26 ;;; GNU General Public License for more details.
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
27 ;;;
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
28 ;;; You should have received a copy of the GNU General Public License
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
29 ;;; along with this program; if not, you can either send email to this
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
30 ;;; program's maintainer or write to: The Free Software Foundation,
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
31 ;;; Inc.; 675 Massachusetts Avenue; Cambridge, MA 02139, USA.
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
32
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
33 ;;; Commentary:
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
34
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
35 ;;; The docstring for the function `type-break-mode' summarizes most of the
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
36 ;;; details of the interface.
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
37
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
38 ;;; This package relies on the assumption that you live entirely in emacs,
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
39 ;;; as the author does. If that's not the case for you (e.g. you often
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
40 ;;; suspend emacs or work in other windows) then this won't help very much;
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
41 ;;; it will depend on just how often you switch back to emacs. At the very
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
42 ;;; least, you will want to turn off the keystroke thresholds and rest
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
43 ;;; interval tracking.
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
44
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
45 ;;; This package was inspired by Roland McGrath's hanoi-break.el.
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
46 ;;; Thanks to both Roland McGrath <roland@gnu.ai.mit.edu> and Mark Ashton
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
47 ;;; <mpashton@gnu.ai.mit.edu> for feedback and ideas.
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
48
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
49 ;;; Code:
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
50
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
51
5939
454dc146502d Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
52 (require 'timer)
454dc146502d Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
53
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
54 ;; Make this nil initially so that the call to type-break-mode at the end
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
55 ;; will cause scheduling and so forth to happen.
5939
454dc146502d Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
56 ;;;###autoload
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
57 (defvar type-break-mode nil
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
58 "*Non-`nil' means typing break mode is enabled.
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
59 See the docstring for the `type-break-mode' command for more information.")
5939
454dc146502d Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
60
454dc146502d Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
61 ;;;###autoload
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
62 (defvar type-break-interval (* 60 60)
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
63 "*Number of seconds between scheduled typing breaks.")
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
64
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
65 ;;;###autoload
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
66 (defvar type-break-good-rest-interval (/ type-break-interval 6)
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
67 "*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
68
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
69 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
70 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
71 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
72
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
73 If a break is interrupted before this much time elapses, the user will be
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
74 asked whether or not really to interrupt the break.")
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
75
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
76 ;;;###autoload
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
77 (defvar type-break-keystroke-threshold
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
78 ;; 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
79 ;; 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
80 ;; 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
81 ;; 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
82 ;; 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
83 ;; 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
84 ;; 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
85 ;; 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
86 (let* ((wpm 35)
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
87 (avg-word-length 5)
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
88 (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
89 (lower (/ upper 5)))
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
90 (cons lower upper))
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
91 "*Upper and lower bound on number of keystrokes for considering typing break.
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
92 This structure is a pair of numbers.
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
93
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
94 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
95 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
96 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
97 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
98 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
99 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
100
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
101 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
102 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
103 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
104 will occur; only scheduled ones will.
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
105
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
106 Keys with bucky bits (shift, control, meta, etc) are counted as only one
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
107 keystroke even though they really require multiple keys to generate them.")
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
108
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
109 (defvar type-break-time-warning-intervals '(300 120 60 30)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
110 "*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
111 At each of the intervals (specified in seconds) away from a scheduled
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
112 typing break, 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
113
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
114 (defvar type-break-keystroke-warning-intervals '(300 200 100 50)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
115 "*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
116 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
117 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
118 If either this variable or the upper threshold is set, then no warnings
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
119 Will occur.")
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
120
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
121 (defvar type-break-query-interval 60
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
122 "*Number of seconds between queries to take a break, if put off.
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
123 The user will continue to be prompted at this interval until he or she
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
124 finally submits to taking a typing break.")
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
125
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
126 (defvar type-break-warning-repeat 40
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
127 "*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
128 That is, for each of this many keystrokes the warning is redisplayed
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
129 in the echo area to make sure it's really seen.")
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
130
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
131 (defvar type-break-query-function 'yes-or-no-p
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
132 "Function to use for making query for a typing break.
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
133 It should take a string as an argument, the prompt.
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
134 Usually this should be set to `yes-or-no-p' or `y-or-n-p'.")
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
135
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
136 (defvar 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
137 '(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
138 "*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
139 When a typing break begins, one of these functions is selected randomly
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
140 to have emacs do something interesting.
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
141
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
142 Any function in this list should start a demo which ceases as soon as a
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
143 key is pressed.")
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
144
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
145 (defvar type-break-post-command-hook nil
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
146 "Hook run indirectly by post-command-hook for typing break functions.")
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
147
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
148 ;; 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
149
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
150 (defvar type-break-alarm-p nil) ; Non-nil when a scheduled typing break is due.
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
151 (defvar type-break-keystroke-count 0)
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
152 (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
153 (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
154 (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
155 (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
156 (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
157 (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
158 (defvar type-break-keystroke-warning-count 0)
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
159
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
160
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
161 ;;;###autoload
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
162 (defun type-break-mode (&optional prefix)
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
163 "Enable or disable typing-break mode.
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
164 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
165
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
166 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
167 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
168 user has exceeded a keystroke threshold. When the time arrives, the user
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
169 is asked to take a break. If the user refuses at that time, emacs will ask
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
170 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
171 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
172 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
173
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
174 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
175 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
176
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
177 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
178 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
179 reset the keystroke counter.
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
180
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
181 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
182 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
183 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
184 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
185
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
186 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
187 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
188 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
189 `type-break-schedule' command.
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
190
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
191 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
192 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
193 that time has elapsed, typing breaks are automatically rescheduled for
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
194 later even if emacs didn't prompt you to take one first. Also, if a break
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
195 is ended before this much time has elapsed, the user will be asked whether
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
196 or not to continue.
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
197
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
198 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
199 thresholds at which typing breaks should be considered. You can use
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
200 the command `type-break-guestimate-keystroke-threshold' to try to
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
201 approximate good values for this.
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
202
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
203 Finally, the command `type-break-statistics' prints interesting things."
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
204 (interactive "P")
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
205 ;; make sure it's there.
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
206 (add-hook 'post-command-hook 'type-break-run-tb-post-command-hook 'append)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
207 (add-hook 'type-break-post-command-hook 'type-break-check)
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
208
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
209 (let ((already-enabled type-break-mode))
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
210 (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
211
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
212 (cond
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
213 ((and already-enabled type-break-mode)
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
214 (and (interactive-p)
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
215 (message "type-break-mode is enabled")))
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
216 (type-break-mode
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
217 (type-break-keystroke-reset)
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
218 (type-break-schedule)
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
219 (and (interactive-p)
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
220 (message "type-break-mode is enabled and reset")))
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
221 ((interactive-p)
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
222 (message "type-break-mode is disabled"))))
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
223 type-break-mode)
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
224
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
225 ;;;###autoload
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
226 (defun type-break ()
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
227 "Take a typing break.
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
228
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
229 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
230 `type-break-demo-functions' is run.
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
231
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
232 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
233 as per the function `type-break-schedule'."
5939
454dc146502d Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
234 (interactive)
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
235 (type-break-cancel-schedule)
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
236 (let ((continue t)
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
237 (start-time (current-time)))
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
238 (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
239 (while continue
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
240 (save-window-excursion
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
241 ;; Eat the screen.
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
242 (and (eq (selected-window) (minibuffer-window))
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
243 (other-window 1))
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
244 (delete-other-windows)
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
245 (scroll-right (window-width))
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
246 (message "Press any key to resume from typing break.")
5939
454dc146502d Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
247
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
248 (random t)
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
249 (let* ((len (length type-break-demo-functions))
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
250 (idx (random len))
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
251 (fn (nth idx type-break-demo-functions)))
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
252 (condition-case ()
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
253 (funcall fn)
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
254 (error nil))))
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
255
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
256 (cond
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
257 (type-break-good-rest-interval
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
258 (let ((break-secs (type-break-time-difference
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
259 start-time (current-time))))
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
260 (cond
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
261 ((>= break-secs type-break-good-rest-interval)
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
262 (setq continue nil))
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
263 ;; Don't be pedantic; if user's rest was only a minute short,
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
264 ;; why bother?
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
265 ((> 60 (abs (- break-secs type-break-good-rest-interval)))
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
266 (setq continue nil))
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
267 ((funcall
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
268 type-break-query-function
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
269 (format "You really ought to rest %s more. Continue break? "
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
270 (type-break-format-time (- type-break-good-rest-interval
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
271 break-secs)))))
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
272 (t
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
273 (setq continue nil)))))
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
274 (t (setq continue nil)))))
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
275
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
276 (type-break-keystroke-reset)
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
277 (type-break-schedule))
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
278
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
279
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
280 (defun type-break-schedule (&optional time)
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
281 (or time (setq time type-break-interval))
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
282 (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
283 (type-break-time-warning-schedule time 'reset)
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
284 (run-at-time time nil 'type-break-alarm)
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
285 (setq type-break-time-next-break (current-time))
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
286 (setcar (cdr type-break-time-next-break)
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
287 (+ time (car (cdr type-break-time-next-break)))))
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
288
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
289 (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
290 (type-break-cancel-time-warning-schedule)
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
291 (let ((timer-dont-exit t))
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
292 (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
293 (setq type-break-alarm-p nil)
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
294 (setq type-break-time-next-break nil))
5939
454dc146502d Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
295
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
296 (defun type-break-time-warning-schedule (&optional time resetp)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
297 (let (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
298 (type-break-cancel-time-warning-schedule))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
299 (cond
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
300 (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
301 (and resetp
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
302 (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
303 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
304
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
305 (or time
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
306 (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
307 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
308
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
309 (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
310 (> (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
311 (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
312 (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
313
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
314 (cond
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
315 (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
316 (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
317 (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
318 (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
319
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
320 (let (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
321 (type-break-cancel-time-warning-schedule))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
322 (run-at-time time nil 'type-break-time-warning-alarm))))))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
323
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
324 (defun type-break-cancel-time-warning-schedule ()
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
325 (let ((timer-dont-exit t))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
326 (cancel-function-timers 'type-break-time-warning-alarm))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
327 (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
328 (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
329 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
330
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
331 (defun type-break-alarm ()
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
332 (setq type-break-alarm-p t))
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
333
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
334 (defun type-break-time-warning-alarm ()
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
335 (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
336 (setq type-break-time-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
337 (add-hook 'type-break-post-command-hook 'type-break-time-warning 'append))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
338
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
339
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
340 (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
341 (and type-break-mode
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
342 (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
343
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
344 (defun type-break-check ()
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
345 "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
346 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
347 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
348 keystroke threshold has been exceeded."
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
349 (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
350 (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
351 (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
352 (progn
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
353 (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
354 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
355 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
356 (progn
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
357 (type-break-keystroke-reset)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
358 (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
359 (type-break-schedule)))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
360 (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
361
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
362 (and type-break-keystroke-threshold
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
363 (setq type-break-keystroke-count
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
364 (+ type-break-keystroke-count (length (this-command-keys)))))
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
365
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
366 ;; This has been optimized for speed; calls to input-pending-p and
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
367 ;; checking for the minibuffer window are only done if it would
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
368 ;; matter for the sake of querying user.
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
369 (cond
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
370 (type-break-alarm-p
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
371 (cond
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
372 ((input-pending-p))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
373 ((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
374 ((and min-threshold
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
375 (< 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
376 (type-break-schedule))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
377 (t
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
378 ;; If keystroke count is within min-threshold of
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
379 ;; max-threshold, lower it to reduce the liklihood of an
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
380 ;; immediate subsequent query.
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
381 (and max-threshold
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
382 min-threshold
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
383 (< (- 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
384 (progn
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
385 (type-break-keystroke-reset)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
386 (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
387 (type-break-query))))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
388 ((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
389 max-threshold
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
390 (= 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
391 (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
392 ((and max-threshold
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
393 (> 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
394 (not (input-pending-p))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
395 (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
396 (type-break-keystroke-reset)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
397 (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
398 (type-break-query)))))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
399
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
400 ;; This should return t if warnings were enabled, nil otherwise.
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
401 (defsubst 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
402 (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
403 type-break-keystroke-count)))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
404 (cond
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
405 ((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
406 nil)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
407 ((> 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
408 nil)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
409 (t
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
410 (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
411 (< 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
412 (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
413 (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
414 (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
415 (add-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
416 t))))
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
417
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
418 (defun type-break-query ()
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
419 (condition-case ()
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
420 (cond
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
421 ((let ((type-break-mode nil))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
422 (funcall type-break-query-function "Take a break from typing now? "))
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
423 (type-break))
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
424 (t
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
425 (type-break-schedule type-break-query-interval)))
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
426 (quit
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
427 (type-break-schedule type-break-query-interval))))
5939
454dc146502d Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
428
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
429 (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
430 (cond
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
431 ((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
432 (< 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
433 ((> 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
434 (cond
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
435 ((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
436 (t
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
437 ;; Pause for a moment so previous messages can be seen.
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
438 (sit-for 2)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
439 (message "Warning: typing break due in %s."
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
440 (type-break-format-time
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
441 (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
442 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
443 (setq type-break-time-warning-count
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
444 (1- type-break-time-warning-count)))))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
445 (t
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
446 (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
447
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
448 (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
449 (cond
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
450 ((> 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
451 (cond
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
452 ((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
453 (t
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
454 (sit-for 2)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
455 (message "Warning: typing break due in %s keystrokes."
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
456 (- (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
457 type-break-keystroke-count))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
458 (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
459 (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
460 (t
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
461 (remove-hook '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
462 'type-break-keystroke-warning))))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
463
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
464
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
465 ;;;###autoload
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
466 (defun type-break-statistics ()
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
467 "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
468 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
469 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
470 (interactive)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
471 (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
472 (princ (format "Typing break statistics\n-----------------------\n
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
473 Last typing break : %s
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
474 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
475 Minimum keystroke threshold : %s
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
476 Maximum keystroke threshold : %s
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
477 Current keystroke count : %s"
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
478 (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
479 (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
480 "never")
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
481 (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
482 (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
483 (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
484 (type-break-format-time
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
485 (type-break-time-difference
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
486 (current-time)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
487 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
488 "none scheduled")
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
489 (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
490 (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
491 type-break-keystroke-count))))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
492
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
493 ;;;###autoload
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
494 (defun type-break-guestimate-keystroke-threshold (wpm &optional wordlen frac)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
495 "Guess values for the minimum/maximum keystroke threshold for typing breaks.
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
496 If called interactively, the user is prompted for their guess as to how
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
497 many words per minute they usually type. From that, the command sets the
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
498 values in `type-break-keystroke-threshold' based on a fairly simple
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
499 algorithm involving assumptions about the average length of words (5).
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
500 For the minimum threshold, it uses about a quarter of the computed maximum
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
501 threshold.
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
502
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
503 When called from lisp programs, the optional args WORDLEN and FRAC can be
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
504 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
505 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
506 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
507 2 would mean to use one half, a value of 4 would mean to use one quarter, etc."
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
508 (interactive "nHow many words per minute do you type? ")
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
509 (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
510 (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
511 (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
512 (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
513 (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
514 (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
515 (if (interactive-p)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
516 (message "min threshold: %d\tmax threshold: %d" lower upper)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
517 type-break-keystroke-threshold)))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
518
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
519
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
520 ;;; misc functions
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
521
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
522 ;; 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
523 ;; similar to those returned by `current-time'.
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
524 ;; Use addition rather than logand since I found it convenient to add
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
525 ;; seconds to the cdr of some of my stored time values, which may throw off
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
526 ;; the number of bits in the cdr.
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
527 (defsubst type-break-time-difference (a b)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
528 (+ (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
529 (- (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
530
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
531 (defsubst type-break-format-time (secs)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
532 (let ((mins (/ secs 60)))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
533 (cond
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
534 ((= 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
535 ((> 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
536 ((= 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
537 (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
538
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
539 (defun type-break-keystroke-reset ()
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
540 (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
541 (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
542 (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
543 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
544 (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
545
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
546
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
547 ;;; Demo wrappers
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
548
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
549 ;; 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
550 ;; 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
551 ;; 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
552 (defun type-break-demo-hanoi ()
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
553 "Take a hanoiing typing break."
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
554 (and (get-buffer "*Hanoi*")
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
555 (kill-buffer "*Hanoi*"))
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
556 (condition-case ()
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
557 (progn
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
558 (hanoi (/ (window-width) 8))
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
559 ;; Wait for user to come back.
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
560 (read-char)
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
561 (kill-buffer "*Hanoi*"))
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
562 (quit
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
563 ;; eat char
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
564 (read-char)
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
565 (and (get-buffer "*Hanoi*")
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
566 (kill-buffer "*Hanoi*")))))
5939
454dc146502d Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
567
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
568 ;; 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
569 ;; it run a little more leisurely.
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
570 ;; 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
571 (defun type-break-demo-life ()
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
572 "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
573 (let ((continue t))
206451cdd48a type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents: 8281
diff changeset
574 (while continue
206451cdd48a type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents: 8281
diff changeset
575 (setq continue nil)
206451cdd48a type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents: 8281
diff changeset
576 (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
577 (kill-buffer "*Life*"))
206451cdd48a type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents: 8281
diff changeset
578 (condition-case ()
206451cdd48a type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents: 8281
diff changeset
579 (progn
206451cdd48a type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents: 8281
diff changeset
580 (life 3)
8304
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
581 ;; wait for user to return
6c34e249d217 type-break-good-rest-interval: Doc fix.
Noah Friedman <friedman@splode.com>
parents: 8282
diff changeset
582 (read-char)
8282
206451cdd48a type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents: 8281
diff changeset
583 (kill-buffer "*Life*"))
206451cdd48a type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents: 8281
diff changeset
584 (life-extinct
206451cdd48a type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents: 8281
diff changeset
585 (message (get 'life-extinct 'error-message))
206451cdd48a type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents: 8281
diff changeset
586 (sit-for 3)
206451cdd48a type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents: 8281
diff changeset
587 ;; restart demo
206451cdd48a type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents: 8281
diff changeset
588 (setq continue t))
206451cdd48a type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents: 8281
diff changeset
589 (quit
206451cdd48a type-break-keystroke-threshold: Change default wpm to 30 and lower
Noah Friedman <friedman@splode.com>
parents: 8281
diff changeset
590 (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
591 (kill-buffer "*Life*")))))))
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
592
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
593 ;; Boring demo, but doesn't use any cycles
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
594 (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
595 "Boring typing break demo."
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
596 (let ((msg "Press any key to resume from typing break")
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
597 (buffer-name "*Typing Break Buffer*")
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
598 line col)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
599 (condition-case ()
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
600 (progn
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
601 (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
602 (buffer-disable-undo (current-buffer))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
603 (erase-buffer)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
604 (setq line (/ (window-height) 2))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
605 (setq col (/ (- (window-width) (length msg)) 2))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
606 (insert (make-string line ?\C-j)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
607 (make-string col ?\ )
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
608 msg)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
609 (goto-char (point-min))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
610 (read-char)
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
611 (kill-buffer buffer-name))
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
612 (quit
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
613 (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
614 (kill-buffer buffer-name))))))
8276
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
615
73b85998c868 type-break-mode: Make variable `nil' by default.
Noah Friedman <friedman@splode.com>
parents: 8275
diff changeset
616
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
617 (provide 'type-break)
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
618
8275
4fdf77f4e45c type-break-mode: New variable and function.
Noah Friedman <friedman@splode.com>
parents: 8248
diff changeset
619 (type-break-mode t)
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
620
8370
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
621 ;; local variables:
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
622 ;; vc-make-backup-files: t
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
623 ;; end:
97cacab659d3 type-break-time-warning-intervals, type-break-keystroke-warning-intervals,
Noah Friedman <friedman@splode.com>
parents: 8305
diff changeset
624
8248
5ecef3b02f2d Real initial revision. (rewrite from hanoi-break.)
Noah Friedman <friedman@splode.com>
parents: 5939
diff changeset
625 ;;; type-break.el ends here