• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.9.5/emacs-92/emacs/lisp/

Lines Matching +defs:format +defs:type

0 ;;; type-break.el --- encourage rests from typing at appropriate intervals
31 ;; The docstring for the function `type-break-mode' summarizes most of the
44 ;; (setq type-break-query-mode nil)
46 ;; Or call the command `type-break-query-mode' with a negative prefix
50 ;; in the mode line instead, do M-x type-break-mode-line-message-mode
72 (defgroup type-break nil
74 :prefix "type-break"
78 (defcustom type-break-mode nil
80 See the docstring for the `type-break-mode' command for more information.
82 use either \\[customize] or the function `type-break-mode'."
84 (type-break-mode (if value 1 -1)))
86 :type 'boolean
87 :group 'type-break
88 :require 'type-break)
91 (defcustom type-break-interval (* 60 60)
93 :type 'integer
94 :group 'type-break)
97 (defcustom type-break-good-rest-interval (/ type-break-interval 6)
106 :type 'integer
107 :group 'type-break)
110 (defcustom type-break-good-break-interval nil
114 length (in seconds) for a break initiated by the command `type-break',
115 overriding `type-break-good-rest-interval'. This provides querying of
116 break interruptions when `type-break-good-rest-interval' is nil."
117 :type 'integer
118 :group 'type-break)
121 (defcustom type-break-keystroke-threshold
123 ;; type more than that in a minute? I spend a lot of time reading mail
126 ;; keystrokes one is likely to type in a break interval. That way if the
132 (upper (* wpm avg-word-length (/ type-break-interval 60)))
153 The command `type-break-guesstimate-keystroke-threshold' can be used to
155 :type 'sexp
156 :group 'type-break)
158 (defcustom type-break-query-mode t
161 `type-break-query-function' to do the asking."
162 :type 'boolean
163 :group 'type-break)
165 (defcustom type-break-query-function 'yes-or-no-p
170 To avoid being queried at all, set `type-break-query-mode' to nil."
171 :type '(radio function
174 :group 'type-break)
176 (defcustom type-break-query-interval 60
180 :type 'integer
181 :group 'type-break)
183 (defcustom type-break-time-warning-intervals '(300 120 60 30)
187 :type '(repeat integer)
188 :group 'type-break)
190 (defcustom type-break-keystroke-warning-intervals '(300 200 100 50)
196 :type '(repeat integer)
197 :group 'type-break)
199 (defcustom type-break-warning-repeat 40
203 :type 'integer
204 :group 'type-break)
206 (defcustom type-break-time-stamp-format "[%H:%M] "
207 "*Timestamp format used to prefix messages.
208 Format specifiers are as used by `format-time-string'."
209 :type 'string
210 :group 'type-break)
212 (defcustom type-break-demo-functions
213 '(type-break-demo-boring type-break-demo-life type-break-demo-hanoi)
220 :type '(repeat function)
221 :group 'type-break)
223 (defcustom type-break-demo-boring-stats nil
225 :type 'boolean
226 :group 'type-break)
228 (defcustom type-break-terse-messages nil
230 :type 'boolean
231 :group 'type-break)
233 (defcustom type-break-file-name (convert-standard-filename "~/.type-break")
236 :type 'file
237 :group 'type-break)
239 (defvar type-break-post-command-hook '(type-break-check)
245 functions are being run, and some type-break--related functions want to
252 (defcustom type-break-mode-line-message-mode nil
253 "*Non-nil means put type-break related messages in the mode line.
256 See also `type-break-mode-line-format' and its members."
257 :type 'boolean
258 :group 'type-break)
260 (defvar type-break-mode-line-format
261 '(type-break-mode-line-message-mode
263 type-break-mode-line-break-message
264 type-break-mode-line-warning))
267 (defvar type-break-mode-line-break-message
268 '(type-break-mode-line-break-message-p
269 type-break-mode-line-break-string))
271 (defvar type-break-mode-line-break-message-p nil)
272 (defvar type-break-mode-line-break-string " *** TAKE A TYPING BREAK NOW ***")
274 (defvar type-break-mode-line-warning
275 '(type-break-mode-line-break-message-p
277 (type-break-warning-countdown-string
280 type-break-warning-countdown-string
282 type-break-warning-countdown-string-type
285 (defvar type-break-warning-countdown-string nil
288 This variable, in conjunction with `type-break-warning-countdown-string-type'
290 is installed in `mode-line-format' to notify of imminent typing breaks.")
292 (defvar type-break-warning-countdown-string-type nil
293 "Indicates the unit type of `type-break-warning-countdown-string'.
300 (defvar type-break-alarm-p nil)
301 (defvar type-break-keystroke-count 0)
302 (defvar type-break-time-last-break nil)
303 (defvar type-break-time-next-break nil)
304 (defvar type-break-time-last-command (current-time))
305 (defvar type-break-current-time-warning-interval nil)
306 (defvar type-break-current-keystroke-warning-interval nil)
307 (defvar type-break-time-warning-count 0)
308 (defvar type-break-keystroke-warning-count 0)
309 (defvar type-break-interval-start nil)
314 (defun type-break-mode (&optional prefix)
334 calling this function, it schedules a break with `type-break-schedule' to
338 The variable `type-break-interval' specifies the number of seconds to
341 `type-break-schedule' command.
343 If set, the variable `type-break-good-rest-interval' specifies the minimum
349 break rescheduling, making `type-break-interval' an upper bound on the time
353 If `type-break-good-rest-interval' is nil and
354 `type-break-good-break-interval' is set, then confirmation is required to
355 interrupt a break before `type-break-good-break-interval' seconds
359 The variable `type-break-keystroke-threshold' is used to determine the
361 the command `type-break-guesstimate-keystroke-threshold' to try to
367 `type-break-mode-line-message-mode'
368 `type-break-time-warning-intervals'
369 `type-break-keystroke-warning-intervals'
370 `type-break-warning-repeat'
371 `type-break-warning-countdown-string'
372 `type-break-warning-countdown-string-type'
377 `type-break-query-mode'
378 `type-break-query-function'
379 `type-break-query-interval'
381 The command `type-break-statistics' prints interesting things.
383 Finally, a file (named `type-break-file-name') is used to store information
388 (type-break-check-post-command-hook)
390 (let ((already-enabled type-break-mode))
391 (setq type-break-mode (>= (prefix-numeric-value prefix) 0))
394 ((and already-enabled type-break-mode)
397 (type-break-mode
398 (when type-break-file-name
399 (with-current-buffer (find-file-noselect type-break-file-name 'nowarn)
404 (or (assq 'type-break-mode-line-message-mode
407 (cons type-break-mode-line-format
409 (type-break-keystroke-reset)
410 (type-break-mode-line-countdown-or-break nil)
412 (setq type-break-time-last-break
413 (or (type-break-get-previous-time)
417 (type-break-schedule
419 (if (and type-break-time-last-break
420 (< (setq diff (type-break-time-difference
421 type-break-time-last-break
423 type-break-interval))
426 (setq type-break-keystroke-count
427 (type-break-get-previous-count))
429 (type-break-file-time type-break-interval-start)
430 (setq type-break-interval-start type-break-time-last-break)
431 (- type-break-interval diff))
433 (setq type-break-interval-start (current-time))
434 (type-break-file-time type-break-interval-start)
435 type-break-interval))
436 type-break-interval-start
437 type-break-interval)
442 (type-break-keystroke-reset)
443 (type-break-mode-line-countdown-or-break nil)
444 (type-break-cancel-schedule)
446 (when type-break-file-name
447 (with-current-buffer (find-file-noselect type-break-file-name
454 type-break-mode)
456 (defun type-break-mode-line-message-mode (&optional prefix)
467 `mode-line-format'
469 `type-break-mode-line-break-message'
470 `type-break-mode-line-warning'"
472 (setq type-break-mode-line-message-mode
475 (if type-break-mode-line-message-mode
476 (message "type-break-mode-line-message-mode is enabled")
477 (message "type-break-mode-line-message-mode is disabled")))
478 type-break-mode-line-message-mode)
480 (defun type-break-query-mode (&optional prefix)
485 specified by the variable `type-break-query-function'.
493 (setq type-break-query-mode
496 (if type-break-query-mode
497 (message "type-break-query-mode is enabled")
498 (message "type-break-query-mode is disabled")))
499 type-break-query-mode)
505 (defvar type-break-auto-save-file-name
506 (let ((buffer-file-name type-break-file-name))
508 "Auto-save name of `type-break-file-name'.")
510 (defun type-break-file-time (&optional time)
511 "File break time in `type-break-file-name', unless the file is locked."
512 (if (and type-break-file-name
513 (not (stringp (file-locked-p type-break-file-name))))
514 (with-current-buffer (find-file-noselect type-break-file-name
518 (insert (format "%s\n\n" (or time type-break-interval-start)))
522 (defun type-break-file-keystroke-count ()
523 "File keystroke count in `type-break-file-name', unless the file is locked."
524 (if (and type-break-file-name
525 (not (stringp (file-locked-p type-break-file-name))))
528 (with-current-buffer (find-file-noselect type-break-file-name
535 (insert (format "%s" type-break-keystroke-count))
540 "If TIME is in the format returned by `current-time' then
549 (defun type-break-choose-file ()
552 ((not type-break-file-name)
554 ((and (file-exists-p type-break-auto-save-file-name)
555 (file-readable-p type-break-auto-save-file-name))
556 type-break-auto-save-file-name)
557 ((and (file-exists-p type-break-file-name)
558 (file-readable-p type-break-file-name))
559 type-break-file-name)
562 (defun type-break-get-previous-time ()
563 "Get previous break time from `type-break-file-name'.
565 `current-time' format."
566 (let ((file (type-break-choose-file)))
568 (timep ;; returns expected format, else nil
577 (defun type-break-get-previous-count ()
578 "Get previous keystroke count from `type-break-file-name'.
581 (let ((file (type-break-choose-file)))
600 (defun type-break ()
604 `type-break-demo-functions' is run.
607 as per the function `type-break-schedule'."
610 (type-break-cancel-schedule)
612 (remove-hook 'type-break-post-command-hook 'type-break-do-query)
615 (setq type-break-time-last-break start-time)
623 (unless type-break-terse-messages
627 (let* ((len (length type-break-demo-functions))
629 (fn (nth idx type-break-demo-functions)))
634 (let ((good-interval (or type-break-good-rest-interval
635 type-break-good-break-interval)))
638 (let ((break-secs (type-break-time-difference
649 type-break-query-function
650 (format
651 (if type-break-terse-messages
654 (type-break-time-stamp)
655 (type-break-format-time (- good-interval
661 (type-break-keystroke-reset)
662 (type-break-file-time)
663 (type-break-mode-line-countdown-or-break nil)
664 (type-break-schedule))
668 (defun type-break-schedule (&optional time start interval)
670 If time is not specified it defaults to `type-break-interval'.
676 (or time (setq time type-break-interval))
677 (type-break-check-post-command-hook)
678 (type-break-cancel-schedule)
679 (type-break-time-warning-schedule time 'reset)
680 (type-break-run-at-time (max 1 time) nil 'type-break-alarm)
681 (setq type-break-time-next-break
682 (type-break-time-sum (or start (current-time))
685 (defun type-break-cancel-schedule ()
686 (type-break-cancel-time-warning-schedule)
687 (type-break-cancel-function-timers 'type-break-alarm)
688 (setq type-break-alarm-p nil)
689 (setq type-break-time-next-break nil))
691 (defun type-break-time-warning-schedule (&optional time resetp)
692 (let ((type-break-current-time-warning-interval nil))
693 (type-break-cancel-time-warning-schedule))
694 (add-hook 'type-break-post-command-hook 'type-break-time-warning 'append)
696 (type-break-time-warning-intervals
698 (setq type-break-current-time-warning-interval
699 type-break-time-warning-intervals))
702 (setq time (type-break-time-difference (current-time)
703 type-break-time-next-break)))
705 (while (and type-break-current-time-warning-interval
706 (> (car type-break-current-time-warning-interval) time))
707 (setq type-break-current-time-warning-interval
708 (cdr type-break-current-time-warning-interval)))
711 (type-break-current-time-warning-interval
712 (setq time (- time (car type-break-current-time-warning-interval)))
713 (setq type-break-current-time-warning-interval
714 (cdr type-break-current-time-warning-interval))
716 ;(let (type-break-current-time-warning-interval)
717 ; (type-break-cancel-time-warning-schedule))
718 (type-break-run-at-time (max 1 time) nil 'type-break-time-warning-alarm)
722 (setq type-break-warning-countdown-string nil))
724 (setq type-break-warning-countdown-string (number-to-string time))
725 (setq type-break-warning-countdown-string-type "seconds"))))))))
727 (defun type-break-cancel-time-warning-schedule ()
728 (type-break-cancel-function-timers 'type-break-time-warning-alarm)
729 (remove-hook 'type-break-post-command-hook 'type-break-time-warning)
730 (setq type-break-current-time-warning-interval
731 type-break-time-warning-intervals)
732 (setq type-break-time-warning-count 0) ; avoid warnings after break
733 (setq type-break-warning-countdown-string nil))
735 (defun type-break-alarm ()
736 (type-break-check-post-command-hook)
737 (setq type-break-alarm-p t)
738 (type-break-mode-line-countdown-or-break 'break))
740 (defun type-break-time-warning-alarm ()
741 (type-break-check-post-command-hook)
742 (type-break-time-warning-schedule)
743 (setq type-break-time-warning-count type-break-warning-repeat)
744 (type-break-time-warning)
745 (type-break-mode-line-countdown-or-break 'countdown))
749 (defun type-break-run-tb-post-command-hook ()
750 (and type-break-mode
751 (run-hooks 'type-break-post-command-hook)))
753 (defun type-break-check ()
758 (type-break-file-keystroke-count)
759 (let* ((min-threshold (car type-break-keystroke-threshold))
760 (max-threshold (cdr type-break-keystroke-threshold)))
761 (and type-break-good-rest-interval
763 (and (> (type-break-time-difference
764 type-break-time-last-command (current-time))
765 type-break-good-rest-interval)
767 (type-break-keystroke-reset)
768 (type-break-mode-line-countdown-or-break nil)
769 (setq type-break-time-last-break (current-time))
770 (type-break-schedule)))
771 (setq type-break-time-last-command (current-time))))
773 (and type-break-keystroke-threshold
781 (setq type-break-keystroke-count
782 (+ type-break-keystroke-count (length keys)))))))
785 (type-break-alarm-p
790 (< type-break-keystroke-count min-threshold))
791 (type-break-schedule))
798 (< (- max-threshold type-break-keystroke-count) min-threshold)
800 (type-break-keystroke-reset)
801 (setq type-break-keystroke-count min-threshold)))
802 (type-break-query))))
803 ((and type-break-keystroke-warning-intervals
805 (= type-break-keystroke-warning-count 0)
806 (type-break-check-keystroke-warning)))
808 (> type-break-keystroke-count max-threshold)
811 (type-break-keystroke-reset)
812 (setq type-break-keystroke-count (or min-threshold 0))
813 (type-break-query)))))
816 (defun type-break-check-keystroke-warning ()
819 (let ((left (- (cdr type-break-keystroke-threshold)
820 type-break-keystroke-count)))
822 ((null (car type-break-current-keystroke-warning-interval))
824 ((> left (car type-break-current-keystroke-warning-interval))
827 (while (and (car type-break-current-keystroke-warning-interval)
828 (< left (car type-break-current-keystroke-warning-interval)))
829 (setq type-break-current-keystroke-warning-interval
830 (cdr type-break-current-keystroke-warning-interval)))
831 (setq type-break-keystroke-warning-count type-break-warning-repeat)
832 (add-hook 'type-break-post-command-hook 'type-break-keystroke-warning)
833 (setq type-break-warning-countdown-string (number-to-string left))
834 (setq type-break-warning-countdown-string-type "keystrokes")
835 (type-break-mode-line-countdown-or-break 'countdown)
839 (defun type-break-query ()
840 (add-hook 'type-break-post-command-hook 'type-break-do-query))
842 (defun type-break-do-query ()
844 ((not type-break-query-mode)
845 (type-break-noninteractive-query)
846 (type-break-schedule type-break-query-interval)
847 (remove-hook 'type-break-post-command-hook 'type-break-do-query))
851 ((let ((type-break-mode nil)
859 (type-break-cancel-schedule)
861 (remove-hook 'type-break-post-command-hook 'type-break-do-query)
862 (funcall type-break-query-function
863 (format "%s%s"
864 (type-break-time-stamp)
865 (if type-break-terse-messages
868 (type-break))
870 (type-break-schedule type-break-query-interval)))
872 (type-break-schedule type-break-query-interval))))))
874 (defun type-break-noninteractive-query (&optional ignored-args)
879 (type-break-mode-line-message-mode)
882 (message "%sYou should take a typing break now. Do `M-x type-break'."
883 (type-break-time-stamp))
890 (defun type-break-time-warning ()
892 ((and (car type-break-keystroke-threshold)
893 (< type-break-keystroke-count (car type-break-keystroke-threshold))))
894 ((> type-break-time-warning-count 0)
895 (let ((timeleft (type-break-time-difference (current-time)
896 type-break-time-next-break)))
897 (setq type-break-warning-countdown-string (number-to-string timeleft))
905 ((not type-break-mode-line-message-mode)
909 (type-break-time-stamp)
910 (type-break-format-time timeleft))
911 (setq type-break-time-warning-count
912 (1- type-break-time-warning-count))))))
914 (remove-hook 'type-break-post-command-hook 'type-break-time-warning)
915 (setq type-break-warning-countdown-string nil))))
917 (defun type-break-keystroke-warning ()
919 ((> type-break-keystroke-warning-count 0)
920 (setq type-break-warning-countdown-string
921 (number-to-string (- (cdr type-break-keystroke-threshold)
922 type-break-keystroke-count)))
930 ((not type-break-mode-line-message-mode)
933 (type-break-time-stamp)
934 (- (cdr type-break-keystroke-threshold)
935 type-break-keystroke-count))
936 (setq type-break-keystroke-warning-count
937 (1- type-break-keystroke-warning-count)))))
939 (remove-hook 'type-break-post-command-hook
940 'type-break-keystroke-warning)
941 (setq type-break-warning-countdown-string nil))))
943 (defun type-break-mode-line-countdown-or-break (&optional type)
945 ((not type-break-mode-line-message-mode))
946 ((eq type 'countdown)
947 ;(setq type-break-mode-line-break-message-p nil)
948 (add-hook 'type-break-post-command-hook
949 'type-break-force-mode-line-update 'append))
950 ((eq type 'break)
952 (setq type-break-mode-line-break-message-p
953 (not type-break-mode-line-break-message-p))
954 (remove-hook 'type-break-post-command-hook
955 'type-break-force-mode-line-update))
957 (setq type-break-mode-line-break-message-p nil)
958 (setq type-break-warning-countdown-string nil)
959 (remove-hook 'type-break-post-command-hook
960 'type-break-force-mode-line-update)))
961 (type-break-force-mode-line-update))
966 (defun type-break-statistics ()
972 (princ (format "Typing break statistics\n-----------------------\n
982 (if type-break-mode "enabled" "disabled")
983 (if type-break-query-mode "enabled" "disabled")
984 (if type-break-mode-line-message-mode "enabled" "disabled")
985 (if type-break-time-last-break
986 (current-time-string type-break-time-last-break)
988 (if (and type-break-mode type-break-time-next-break)
989 (format "%s\t(%s from now)"
990 (current-time-string type-break-time-next-break)
991 (type-break-format-time
992 (type-break-time-difference
994 type-break-time-next-break)))
996 (or (car type-break-keystroke-threshold) "none")
997 (or (cdr type-break-keystroke-threshold) "none")
998 type-break-keystroke-count))))
1001 (defun type-break-guesstimate-keystroke-threshold (wpm &optional wordlen frac)
1005 many words per minute they usually type. This value should not be your
1008 tends to type less when debugging a program as opposed to writing
1012 From that, this command sets the values in `type-break-keystroke-threshold'
1022 (interactive "NOn average, how many words per minute do you type? ")
1023 (let* ((upper (* wpm (or wordlen 5) (/ type-break-interval 60)))
1025 (or type-break-keystroke-threshold
1026 (setq type-break-keystroke-threshold (cons nil nil)))
1027 (setcar type-break-keystroke-threshold lower)
1028 (setcdr type-break-keystroke-threshold upper)
1031 type-break-keystroke-threshold))
1042 (defun type-break-time-difference (a b)
1052 ;; "low" bits and format the time incorrectly.
1053 (defun type-break-time-sum (&rest tmlist)
1083 (defun type-break-time-stamp (&optional when)
1084 (if (fboundp 'format-time-string)
1085 (format-time-string type-break-time-stamp-format when)
1086 ;; Emacs 19.28 and prior do not have format-time-string.
1088 (format "[%s] " (substring (current-time-string when) 11 16))))
1090 (defun type-break-format-time (secs)
1093 ((= mins 1) (format "%d minute" mins))
1094 ((> mins 0) (format "%d minutes" mins))
1095 ((= secs 1) (format "%d second" secs))
1096 (t (format "%d seconds" secs)))))
1098 (defun type-break-keystroke-reset ()
1099 (setq type-break-interval-start (current-time)) ; not a keystroke
1100 (setq type-break-keystroke-count 0)
1101 (setq type-break-keystroke-warning-count 0)
1102 (setq type-break-current-keystroke-warning-interval
1103 type-break-keystroke-warning-intervals)
1104 (remove-hook 'type-break-post-command-hook 'type-break-keystroke-warning))
1106 (defun type-break-force-mode-line-update (&optional all)
1118 (defun type-break-check-post-command-hook ()
1119 (add-hook 'post-command-hook 'type-break-run-tb-post-command-hook 'append))
1125 ;;; These shield type-break from variations in the interval timer packages
1128 (defun type-break-run-at-time (time repeat function)
1133 (defun type-break-cancel-function-timers (function)
1141 (defun type-break-catch-up-event ()
1151 (defun type-break-demo-hanoi ()
1160 (type-break-catch-up-event)
1164 (type-break-catch-up-event)
1171 (defun type-break-demo-life ()
1183 (type-break-catch-up-event)
1190 (type-break-catch-up-event)
1195 (defun type-break-demo-boring ()
1197 (let ((rmsg (if type-break-terse-messages
1207 (unless type-break-terse-messages (setq lines (1- lines)))
1208 (if type-break-demo-boring-stats
1213 (setq elapsed (type-break-time-difference
1214 type-break-time-last-break
1216 (let ((good-interval (or type-break-good-rest-interval
1217 type-break-good-break-interval)))
1223 (format (if type-break-terse-messages
1226 (type-break-format-time timeleft)))
1228 (format (if type-break-terse-messages
1231 (type-break-format-time elapsed)))))
1234 (format (if type-break-terse-messages
1237 (type-break-format-time elapsed))))))
1246 (if type-break-demo-boring-stats
1249 (format
1250 (if type-break-terse-messages
1253 type-break-keystroke-count))
1257 (wpm (/ (/ (float type-break-keystroke-count) 5)
1258 (/ (type-break-time-difference
1259 type-break-interval-start
1260 type-break-time-last-break)
1263 (if type-break-terse-messages
1264 (insert (format " %s%.2f wpm"
1268 (format "at an average of %.2f words per minute"
1277 (type-break-catch-up-event)
1285 (provide 'type-break)
1287 (if type-break-mode
1288 (type-break-mode 1))
1291 ;;; type-break.el ends here