added transient for help and todo list

This commit is contained in:
2023-05-08 14:10:04 +02:00
parent 06a740ed4e
commit b70e6e98e6
2 changed files with 103 additions and 44 deletions

View File

@@ -108,10 +108,17 @@ Example:
(lambda () (lambda ()
(set-face-font 'default "Courier"))) (set-face-font 'default "Courier")))
# TODO
- add a possibility to save current settings for later reading sessions
- fix fill mode in displayed text, if possible (currently newlines are disturbing the reading experience)
- [DONE] replace help in echo area with transient
- do not double font size on startup
# Meta # Meta
Copyright (C) 2016, T.v.Dein <tlinden@cpan.org> Copyright (C) 2016-2023, T.v.Dein <tlinden@cpan.org>
This file is NOT part of Emacs. This file is NOT part of Emacs.

View File

@@ -1,6 +1,6 @@
;;; novel-mode.el --- screen reader ;;; novel-mode.el --- screen reader
;; Copyright (C) 2016, T.v.Dein <tlinden@cpan.org> ;; Copyright (C) 2016-2023, T.v.Dein <tlinden@cpan.org>
;; This file is NOT part of Emacs. ;; This file is NOT part of Emacs.
@@ -19,7 +19,7 @@
;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
;; USA ;; USA
;; Version: 0.01 ;; Version: 0.02
;; Author: T.v.Dein <tlinden@cpan.org> ;; Author: T.v.Dein <tlinden@cpan.org>
;; Keywords: read books novels ;; Keywords: read books novels
;; URL: https://github.com/tlinden/novel-mode ;; URL: https://github.com/tlinden/novel-mode
@@ -132,9 +132,12 @@
;;; Code: ;;; Code:
(eval-when-compile
(require 'transient))
;;;; Constants: ;;;; Constants:
(defconst novel-mode-versioni "0.01" "Novel mode version") (defconst novel-mode-version "0.02" "Novel mode version")
(defgroup novel-mode nil (defgroup novel-mode nil
"screen reader mode" "screen reader mode"
@@ -143,19 +146,19 @@
:link '(url-link :tag "Repository" "https://github.com/tlinden/novel-mode")) :link '(url-link :tag "Repository" "https://github.com/tlinden/novel-mode"))
;; various vars to remember previous states ;; various vars to remember previous states
(defvar novel--mlf nil) (defvar novel--modelineformat nil)
(defvar novel--vlm nil) (defvar novel--visuallinemode nil)
(defvar novel--ww nil) (defvar novel--wordwrap nil)
(defvar novel--mbm nil) (defvar novel--menubar nil)
(defvar novel--tbm nil) (defvar novel--toolbar nil)
(defvar novel--sbm nil) (defvar novel--scrollbar nil)
(defvar novel--ct nil) (defvar novel--cursortype nil)
;; set on startup ;; set on startup
(defvar novel--max-margin nil) (defvar novel--max-margin nil)
(defvar novel--cur-margin nil) (defvar novel--cur-margin nil)
;; remember last invertion state, if any. we start with t by purpose, keep this ;; remember last inversion state, if any. we start with t by purpose, keep this
(defvar novel--invert-state t) (defvar novel--invert-state t)
@@ -220,14 +223,23 @@ COMMANDS is a list of alternating OLDDEF NEWDEF command names."
(defun novel--backup-states() (defun novel--backup-states()
"Store current states in variables for later restoration" "Store current states in variables for later restoration"
;; various vars to remember previous states ;; various vars to remember previous states
(setq novel--mlf mode-line-format (setq novel--modelineformat mode-line-format
novel--vlm visual-line-mode novel--visuallinemode visual-line-mode
novel--ww word-wrap novel--wordwrap word-wrap
novel--mbm menu-bar-mode novel--menubar menu-bar-mode
novel--tbm tool-bar-mode novel--toolbar tool-bar-mode
novel--ct cursor-type novel--cursortype cursor-type
novel--sbm scroll-bar-mode)) novel--scrollbar scroll-bar-mode))
(defun novel--restore-states()
"Restore old states of various system settings"
(setq cursor-type novel--cursortype
mode-line-format novel--modelineformat
visual-line-mode novel--visuallinemode
word-wrap novel--wordwrap
menu-bar-mode novel--menubar
tool-bar-mode novel--toolbar
scroll-bar-mode novel--scrollbar))
;;;; Hooks: ;;;; Hooks:
@@ -344,8 +356,7 @@ COMMANDS is a list of alternating OLDDEF NEWDEF command names."
(novel--remap-self-insert) ; disable all keys but ours (novel--remap-self-insert) ; disable all keys but ours
(run-hooks 'novel-mode-post-start-hook) (run-hooks 'novel-mode-post-start-hook))
)
;; disable, restore everything back to normal ;; disable, restore everything back to normal
(progn (progn
@@ -353,30 +364,72 @@ COMMANDS is a list of alternating OLDDEF NEWDEF command names."
(setq scroll-step 0 (setq scroll-step 0
scroll-conservatively 0 scroll-conservatively 0
line-spacing nil line-spacing nil)
cursor-type novel--ct
mode-line-format novel--mlf (novel--restore-states)
visual-line-mode novel--vlm
word-wrap novel--ww
menu-bar-mode novel--mbm
tool-bar-mode novel--tbm
scroll-bar-mode novel--sbm)
(set-fringe-mode 1) (set-fringe-mode 1)
(set-window-margins nil 0 0) (set-window-margins nil 0 0)
(variable-pitch-mode 0) (variable-pitch-mode 0)
(text-scale-increase -2) (text-scale-increase 0)
(put this-command 'state-on-p nil) (put this-command 'state-on-p nil)
(novel--reset-remap-self-insert) (novel--reset-remap-self-insert)
(if (not novel--invert-state) (if (not novel--invert-state)
(novel-invert)) (novel-invert))
(run-hooks 'novel-mode-post-stop-hook) (run-hooks 'novel-mode-post-stop-hook)))
))
(redraw-frame (selected-frame))) (redraw-frame (selected-frame)))
(defun novel-help() (transient-define-suffix novel--suffix-incr-margins ()
:transient t
(interactive)
(novel-incr-margins))
(transient-define-suffix novel--suffix-decr-margins ()
:transient t
(interactive)
(novel-decr-margins))
(transient-define-suffix novel--suffix-incr-font ()
:transient t
(interactive)
(novel-incr-font-size))
(transient-define-suffix novel--suffix-decr-font ()
:transient t
(interactive)
(novel-decr-font-size))
(transient-define-suffix novel--suffix-invert ()
(interactive)
(novel-invert))
(transient-define-prefix novel-help()
"Interactive help for novel mode"
[:class transient-columns
["Navigating"
:pad-keys t
("n" "scroll one page down" novel-page-down)
("p" "scroll one page up" novel-page-up)
("<down>" "scroll one line down" novel-down)
("<up>" "scroll one line up" novel-up)
("SPC" "scroll one page down" novel-page-down)]
["Settings"
:pad-keys t
("<left>" "increase left and right margins" novel--suffix-incr-margins)
("<right>" "decrease left and right margins" novel--suffix-decr-margins)
("+" "increase font size" novel--suffix-incr-font)
("-" "decrease font size" novel--suffix-decr-font)
("i" "invert video display" novel--suffix-invert)]
["Novel Mode"
:pad-keys t
("C-g" "close help buffer" transient-quit-one)
("q" "quit novel mode" novel-mode)]])
(defun novel--old-help()
"Display help" "Display help"
(interactive) (interactive)
(message "Available commands in novel mode: (message "Available commands in novel mode:
@@ -424,8 +477,7 @@ COMMANDS is a list of alternating OLDDEF NEWDEF command names."
(define-key map (kbd "h") 'novel-help) (define-key map (kbd "h") 'novel-help)
(define-key map (kbd "?") 'novel-help) (define-key map (kbd "?") 'novel-help)
map) map)
(novel-toggle) (novel-toggle))
)
(provide 'novel-mode) (provide 'novel-mode)