From d35091d02cfe3f3e184fef1f3d32670eb4d7efb7 Mon Sep 17 00:00:00 2001 From: stardiviner Date: Thu, 30 Jan 2020 15:35:06 +0800 Subject: [PATCH] add initial version source code --- amread-mode.el | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 amread-mode.el diff --git a/amread-mode.el b/amread-mode.el new file mode 100644 index 0000000..e8b83e3 --- /dev/null +++ b/amread-mode.el @@ -0,0 +1,76 @@ +;;; amread-mode.el --- A minor mode helper user reading. + +;;; Time-stamp: <2020-01-30 15:34:53 stardiviner> + +;;; Commentary: + +;;; Usage: +;;; +;;; 1. Launch amread-mode with command `amread-mode'. +;;; 2. Stop amread-mode by pressing [q]. + +;;; Code: + +(defcustom amread-wps 2 + "Read words per second." + :type 'number + :safe #'numberp + :group 'amread) + +(defvar amread--running nil) +(defvar amread--overlay nil) + +(defun amread--update () + "Moving amread cursor forward." + (let* ((begin (point)) + (length (+ (skip-chars-forward "^\s\t\nā€”") (skip-chars-forward "ā€”"))) + (end (point))) + (if (eobp) + (amread-stop) + ;; create the overlay if does not exist + (unless amread--overlay + (setq amread--overlay (make-overlay begin end))) + ;; move forward overlay + (when amread--overlay + ;; (delete-overlay amread--overlay) + (move-overlay amread--overlay begin end)) + (overlay-put amread--overlay + 'face '((foreground-color . "white") + (background-color . "dark green"))) + (skip-chars-forward "\s\t\nā€”")))) + +(defun amread-start () + "Start / resume amread." + (interactive) + (setq amread--running + (run-with-timer 0 (/ 1.0 amread-wps) #'amread--update))) + +(defun amread-stop () + "Stop amread." + (interactive) + (prog1 amread--running + (when amread--running + (cancel-timer amread--running) + (setq amread--running nil) + (delete-overlay amread--overlay)))) + +(defvar amread-mode-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "q") 'amread-stop) + (define-key map [remap keyaobrd-quit] 'amread-stop) + map) + "Keymap for amread-mode buffers.") + +(define-minor-mode amread-mode + "I'm reading mode." + :init nil + :keymap amread-mode-map + (if amread--running + (amread-stop) + (amread-start))) + + + +(provide 'amread-mode) + +;;; amread-mode.el ends here -- 2.11.4.GIT