Fix scope in package

This commit is contained in:
Andros Fenollosa 2024-01-02 17:32:15 +01:00
parent 2f30f0180e
commit 49e6e3e10c

View File

@ -11,336 +11,338 @@
;;; Code:
;; Imports
(require 'widget)
(eval-when-compile
(require 'wid-edit))
;; Variables
(defvar learning-irregular-verbs-in-English--verbs '(
("beat" "beat" "beaten")
("become" "became" "become")
("begin" "began" "begun")
("bend" "bent" "bent")
("bet" "bet" "bet")
("bite" "bit" "bitten")
("bleed" "bled" "bled")
("blow" "blew" "blown")
("break" "broke" "broken")
("bring" "brought" "brought")
("build" "built" "built")
("burn" "burnt" "burnt")
("buy" "bought" "bought")
("catch" "caught" "caught")
("choose" "chose" "chosen")
("come" "came" "come")
("cost" "cost" "cost")
("cut" "cut" "cut")
("dig" "dug" "dug")
("do" "did" "done")
("draw" "drew" "drawn")
("dream" "dreamt" "dreamt")
("drink" "drank" "drunk")
("drive" "drove" "driven")
("eat" "ate" "eaten")
("fall" "fell" "fallen")
("feed" "fed" "fed")
("feel" "felt" "felt")
("fight" "fought" "fought")
("find" "found" "found")
("fly" "flew" "flown")
("forget" "forgot" "forgotten")
("forgive" "forgave" "forgiven")
("freeze" "froze" "frozen")
("get" "got" "got")
("give" "gave" "given")
("go" "went" "gone")
("grow" "grew" "grown")
("hang" "hung" "hung")
("have" "had" "had")
("hear" "heard" "heard")
("hide" "hid" "hidden")
("hit" "hit" "hit")
("hold" "held" "held")
("hurt" "hurt" "hurt")
("keep" "kept" "kept")
("know" "knew" "known")
("lay" "laid" "laid")
("lead" "led" "led")
("learn" "learnt" "learnt")
("leave" "left" "left")
("lend" "lent" "lent")
("let" "let" "let")
("lie" "lay" "lain")
("light" "lit" "lit")
("lose" "lost" "lost")
("make" "made" "made")
("mean" "meant" "meant")
("meet" "met" "met")
("pay" "paid" "paid")
("put" "put" "put")
("read" "read" "read")
("ride" "rode" "ridden")
("ring" "rang" "rung")
("rise" "rose" "risen")
("run" "ran" "run")
("say" "said" "said")
("see" "saw" "seen")
("sell" "sold" "sold")
("send" "sent" "sent")
("set" "set" "set")
("shake" "shook" "shaken")
("shine" "shone" "shone")
("shoot" "shot" "shot")
("show" "showed" "shown")
("shut" "shut" "shut")
("sing" "sang" "sung")
("sink" "sank" "sunk")
("sit" "sat" "sat")
("sleep" "slept" "slept")
("smell" "smelt" "smelt")
("speak" "spoke" "spoken")
("spend" "spent" "spent")
("spill" "spelt" "spelt")
("spit" "spit" "spit")
("stand" "stood" "stood")
("steal" "stole" "stolen")
("swim" "swam" "swum")
("take" "took" "taken")
("teach" "taught" "taught")
("tear" "tore" "torn")
("tell" "told" "told")
("think" "thought" "thought")
("throw" "threw" "thrown")
("understand" "understood" "understood")
("wake" "woke" "woken")
("wear" "wore" "worn")
("win" "won" "won")
("write" "wrote" "written")))
;; learning-irregular-verbs-in-English
(defvar learning-irregular-verbs-in-English--buffer-name "*Learning irregular verbs in English*")
(defvar learning-irregular-verbs-in-English--state 1) ;; 1: start, 2: playing (before first check), 3: win (show success layout)
(defvar learning-irregular-verbs-in-English--verb-to-learn-infinitive nil)
(defvar learning-irregular-verbs-in-English--verb-to-learn-simple-past nil)
(defvar learning-irregular-verbs-in-English--verb-to-learn-past-participle nil)
(defvar learning-irregular-verbs-in-English--emoji-valid "")
(defvar learning-irregular-verbs-in-English--emoji-error "👎")
(defvar learning-irregular-verbs-in-English--widget-title nil)
(defvar learning-irregular-verbs-in-English--text-title " 🧑‍🎓 Learning irregular verbs in English 🇬🇧")
(defvar learning-irregular-verbs-in-English--widget-item-verb nil)
(defvar learning-irregular-verbs-in-English--widget-field-simple-past nil)
(defvar learning-irregular-verbs-in-English--widget-label-check-simple-past nil)
(defvar learning-irregular-verbs-in-English--widget-field-past-participle nil)
(defvar learning-irregular-verbs-in-English--widget-label-check-past-participle nil)
(defvar learning-irregular-verbs-in-English--text-button-check "Check")
(defvar learning-irregular-verbs-in-English--widget-button-check nil)
(defvar learning-irregular-verbs-in-English--widget-message-success nil)
(defvar learning-irregular-verbs-in-English--widget-item-space-before-success nil)
(defvar learning-irregular-verbs-in-English--text-success "Nice!")
(defvar learning-irregular-verbs-in-English--widget-item-space-after-success nil)
(defvar learning-irregular-verbs-in-English--widget-button-quit nil)
(defvar learning-irregular-verbs-in-English--text-button-quit "Quit")
(defvar learning-irregular-verbs-in-English--widget-item-space-between-buttons nil)
(defvar learning-irregular-verbs-in-English--widget-button-replay nil)
(defvar learning-irregular-verbs-in-English--text-button-replay "New challenge")
;; Functions
(defun learning-irregular-verbs-in-English--kill-app ()
"Kill the application."
(kill-buffer learning-irregular-verbs-in-English--buffer-name))
(defun learning-irregular-verbs-in-English--value-field-simple-past ()
(if (not (eq learning-irregular-verbs-in-English--widget-field-simple-past nil)) (widget-value learning-irregular-verbs-in-English--widget-field-simple-past) ""))
(defun learning-irregular-verbs-in-English--value-field-past-participle ()
(if (not (eq learning-irregular-verbs-in-English--widget-field-past-participle nil)) (widget-value learning-irregular-verbs-in-English--widget-field-past-participle) ""))
(defun learning-irregular-verbs-in-English--set-verb-to-learn ()
"Set the verb to learn."
(let ((verbs-random (nth (random (length learning-irregular-verbs-in-English--verbs)) learning-irregular-verbs-in-English--verbs)))
(setq learning-irregular-verbs-in-English--verb-to-learn-infinitive (nth 0 verbs-random))
(setq learning-irregular-verbs-in-English--verb-to-learn-simple-past (nth 1 verbs-random))
(setq learning-irregular-verbs-in-English--verb-to-learn-past-participle (nth 2 verbs-random))))
(defun learning-irregular-verbs-in-English--format-value-infinitive ()
"Format the value of the infinitive."
(format "Infinitive ➡️ %s" learning-irregular-verbs-in-English--verb-to-learn-infinitive))
(defun learning-irregular-verbs-in-English--format-check-simple-past ()
"Format the value of the simple past."
(if (eq learning-irregular-verbs-in-English--state 1)
""
(format " %s" (if
(and
(string= (learning-irregular-verbs-in-English--value-field-simple-past) learning-irregular-verbs-in-English--verb-to-learn-simple-past)
(not (string= (learning-irregular-verbs-in-English--value-field-simple-past) "")))
learning-irregular-verbs-in-English--emoji-valid learning-irregular-verbs-in-English--emoji-error))))
(defun learning-irregular-verbs-in-English--format-check-past-participle ()
"Format the value of the past participle."
(if (eq learning-irregular-verbs-in-English--state 1)
""
(format " %s" (if
(and
(string= (learning-irregular-verbs-in-English--value-field-past-participle) learning-irregular-verbs-in-English--verb-to-learn-past-participle)
(not (string= (learning-irregular-verbs-in-English--value-field-past-participle) "")))
learning-irregular-verbs-in-English--emoji-valid learning-irregular-verbs-in-English--emoji-error))))
(defun learning-irregular-verbs-in-English--toggle-layout-success ()
"Toggle the layout to success."
(if (eq learning-irregular-verbs-in-English--state 3)
(progn
;; Cursor to end
(goto-char (point-max))
;; Remove check button
(widget-delete learning-irregular-verbs-in-English--widget-button-check)
(setq learning-irregular-verbs-in-English--widget-button-check nil)
;; Text success
(setq learning-irregular-verbs-in-English--widget-item-space-before-success (widget-create 'item
""))
(setq learning-irregular-verbs-in-English--widget-message-success (widget-create 'item
learning-irregular-verbs-in-English--text-success
))
(setq learning-irregular-verbs-in-English--widget-item-space-after-success (widget-create 'item
"\n"))
;; Replay button
(setq learning-irregular-verbs-in-English--widget-button-replay (widget-create 'push-button
:size 20
:notify (lambda (&rest ignore)
(replay))
learning-irregular-verbs-in-English--text-button-replay))
;; Space
(setq learning-irregular-verbs-in-English--widget-item-space-between-buttons (widget-create 'item
"\n"))
;; Quit button
(setq learning-irregular-verbs-in-English--widget-button-quit (widget-create 'push-button
:size 20
:notify (lambda (&rest ignore)
(learning-irregular-verbs-in-English--kill-app))
learning-irregular-verbs-in-English--text-button-quit))
(widget-backward 2)
)
(progn
(when (not (eq learning-irregular-verbs-in-English--widget-item-space-before-success nil)) (widget-delete learning-irregular-verbs-in-English--widget-item-space-before-success))
(when (not (eq learning-irregular-verbs-in-English--widget-message-success nil)) (widget-delete learning-irregular-verbs-in-English--widget-message-success))
(when (not (eq learning-irregular-verbs-in-English--widget-item-space-after-success nil)) (widget-delete learning-irregular-verbs-in-English--widget-item-space-after-success))
(when (not (eq learning-irregular-verbs-in-English--widget-button-replay nil)) (widget-delete learning-irregular-verbs-in-English--widget-button-replay))
(when (not (eq learning-irregular-verbs-in-English--widget-item-space-between-buttons nil)) (widget-delete learning-irregular-verbs-in-English--widget-item-space-between-buttons))
(when (not (eq learning-irregular-verbs-in-English--widget-button-quit nil)) (widget-delete learning-irregular-verbs-in-English--widget-button-quit))
)))
(defun learning-irregular-verbs-in-English--make-button-check ()
"Make the button check."
(setq learning-irregular-verbs-in-English--widget-button-check (widget-create 'push-button
:notify (lambda (&rest ignore)
(update))
learning-irregular-verbs-in-English--text-button-check)))
(defun start ()
"Start o replay challenge."
(interactive)
;; Set the learning-irregular-verbs-in-English--state
(setq learning-irregular-verbs-in-English--state 1)
;; Get a new verb
(learning-irregular-verbs-in-English--set-verb-to-learn)
;; Show the verb in infinitive
(widget-value-set learning-irregular-verbs-in-English--widget-item-verb (learning-irregular-verbs-in-English--format-value-infinitive))
;; Reset button check
(when (eq learning-irregular-verbs-in-English--widget-button-check nil) (learning-irregular-verbs-in-English--make-button-check))
;; Clear the fields
(widget-value-set learning-irregular-verbs-in-English--widget-field-simple-past "")
(widget-value-set learning-irregular-verbs-in-English--widget-label-check-simple-past "")
(widget-value-set learning-irregular-verbs-in-English--widget-field-past-participle "")
(widget-value-set learning-irregular-verbs-in-English--widget-label-check-past-participle "")
;; Update labels
(update))
(defun replay ()
"Replay the challenge."
(interactive)
(start)
(widget-backward 1))
(defun update ()
"Check the answers."
(interactive)
;; Is playing?
(when (and (eq learning-irregular-verbs-in-English--state 1)
(or
(not (string= (learning-irregular-verbs-in-English--value-field-simple-past) ""))
(not (string= (learning-irregular-verbs-in-English--value-field-past-participle) "")))
)
(setq learning-irregular-verbs-in-English--state 2))
;; Check the answers
(when (eq learning-irregular-verbs-in-English--state 2)
;; Is win?
(when (and
(string= (learning-irregular-verbs-in-English--value-field-simple-past) learning-irregular-verbs-in-English--verb-to-learn-simple-past)
(string= (learning-irregular-verbs-in-English--value-field-past-participle) learning-irregular-verbs-in-English--verb-to-learn-past-participle))
;; Set the learning-irregular-verbs-in-English--state
(setq learning-irregular-verbs-in-English--state 3))
;; Update the check labels
(widget-value-set learning-irregular-verbs-in-English--widget-label-check-simple-past (learning-irregular-verbs-in-English--format-check-simple-past))
(widget-value-set learning-irregular-verbs-in-English--widget-label-check-past-participle (learning-irregular-verbs-in-English--format-check-past-participle)))
;; Update the success layout if needed
(learning-irregular-verbs-in-English--toggle-layout-success))
(defun main-layout ()
"Make widgets for the main layout."
(interactive)
;; Create the buffer
(switch-to-buffer learning-irregular-verbs-in-English--buffer-name)
;; Clear the buffer
(kill-all-local-variables)
(let ((inhibit-read-only t))
(erase-buffer))
(remove-overlays)
;; Create the widgets
;; Title
(insert (propertize (format "\n%s\n\n" learning-irregular-verbs-in-English--text-title) 'face '(:height 1.2 :weight bold)))
;; Verb in infinitive
(setq learning-irregular-verbs-in-English--widget-item-verb (widget-create 'item
:value ""))
;; Separator
(insert "\nSimple past ➡️ ")
;; Simple past
(setq learning-irregular-verbs-in-English--widget-field-simple-past (widget-create 'editable-field
:size 8
:help-echo "Type a Simple past"
))
;; Label check
(insert " ")
(setq learning-irregular-verbs-in-English--widget-label-check-simple-past (widget-create 'item
(learning-irregular-verbs-in-English--format-check-simple-past)))
;; Separator
(insert "\nPast participle ➡️ ")
;; Past participle
(setq learning-irregular-verbs-in-English--widget-field-past-participle (widget-create 'editable-field
:size 8
:help-echo "Type a Past participle"))
;; Label check
(insert " ")
(setq learning-irregular-verbs-in-English--widget-label-check-past-participle (widget-create 'item
(learning-irregular-verbs-in-English--format-check-past-participle)))
;; Separator
(insert "\n")
;; Check button
(learning-irregular-verbs-in-English--make-button-check)
;; Display the buffer
(use-local-map widget-keymap)
(widget-setup))
;; Keybindings
(define-key widget-keymap (kbd "q") 'learning-irregular-verbs-in-English--kill-app)
;; Init
(defun learning-irregular-verbs-in-English ()
"Application to learn and review irregular verbs in English."
(interactive)
(let* ((learning-irregular-verbs-in-English--verbs '(
("beat" "beat" "beaten")
("become" "became" "become")
("begin" "began" "begun")
("bend" "bent" "bent")
("bet" "bet" "bet")
("bite" "bit" "bitten")
("bleed" "bled" "bled")
("blow" "blew" "blown")
("break" "broke" "broken")
("bring" "brought" "brought")
("build" "built" "built")
("burn" "burnt" "burnt")
("buy" "bought" "bought")
("catch" "caught" "caught")
("choose" "chose" "chosen")
("come" "came" "come")
("cost" "cost" "cost")
("cut" "cut" "cut")
("dig" "dug" "dug")
("do" "did" "done")
("draw" "drew" "drawn")
("dream" "dreamt" "dreamt")
("drink" "drank" "drunk")
("drive" "drove" "driven")
("eat" "ate" "eaten")
("fall" "fell" "fallen")
("feed" "fed" "fed")
("feel" "felt" "felt")
("fight" "fought" "fought")
("find" "found" "found")
("fly" "flew" "flown")
("forget" "forgot" "forgotten")
("forgive" "forgave" "forgiven")
("freeze" "froze" "frozen")
("get" "got" "got")
("give" "gave" "given")
("go" "went" "gone")
("grow" "grew" "grown")
("hang" "hung" "hung")
("have" "had" "had")
("hear" "heard" "heard")
("hide" "hid" "hidden")
("hit" "hit" "hit")
("hold" "held" "held")
("hurt" "hurt" "hurt")
("keep" "kept" "kept")
("know" "knew" "known")
("lay" "laid" "laid")
("lead" "led" "led")
("learn" "learnt" "learnt")
("leave" "left" "left")
("lend" "lent" "lent")
("let" "let" "let")
("lie" "lay" "lain")
("light" "lit" "lit")
("lose" "lost" "lost")
("make" "made" "made")
("mean" "meant" "meant")
("meet" "met" "met")
("pay" "paid" "paid")
("put" "put" "put")
("read" "read" "read")
("ride" "rode" "ridden")
("ring" "rang" "rung")
("rise" "rose" "risen")
("run" "ran" "run")
("say" "said" "said")
("see" "saw" "seen")
("sell" "sold" "sold")
("send" "sent" "sent")
("set" "set" "set")
("shake" "shook" "shaken")
("shine" "shone" "shone")
("shoot" "shot" "shot")
("show" "showed" "shown")
("shut" "shut" "shut")
("sing" "sang" "sung")
("sink" "sank" "sunk")
("sit" "sat" "sat")
("sleep" "slept" "slept")
("smell" "smelt" "smelt")
("speak" "spoke" "spoken")
("spend" "spent" "spent")
("spill" "spelt" "spelt")
("spit" "spit" "spit")
("stand" "stood" "stood")
("steal" "stole" "stolen")
("swim" "swam" "swum")
("take" "took" "taken")
("teach" "taught" "taught")
("tear" "tore" "torn")
("tell" "told" "told")
("think" "thought" "thought")
("throw" "threw" "thrown")
("understand" "understood" "understood")
("wake" "woke" "woken")
("wear" "wore" "worn")
("win" "won" "won")
("write" "wrote" "written")))
;; learning-irregular-verbs-in-English
(learning-irregular-verbs-in-English--buffer-name "*Learning irregular verbs in English*")
(learning-irregular-verbs-in-English--state 1) ;; 1: start, 2: playing (before first check), 3: win (show success layout)
(learning-irregular-verbs-in-English--verb-to-learn-infinitive nil)
(learning-irregular-verbs-in-English--verb-to-learn-simple-past nil)
(learning-irregular-verbs-in-English--verb-to-learn-past-participle nil)
(learning-irregular-verbs-in-English--emoji-valid "")
(learning-irregular-verbs-in-English--emoji-error "👎")
(learning-irregular-verbs-in-English--widget-title nil)
(learning-irregular-verbs-in-English--text-title " 🧑‍🎓 Learning irregular verbs in English 🇬🇧")
(learning-irregular-verbs-in-English--widget-item-verb nil)
(learning-irregular-verbs-in-English--widget-field-simple-past nil)
(learning-irregular-verbs-in-English--widget-label-check-simple-past nil)
(learning-irregular-verbs-in-English--widget-field-past-participle nil)
(learning-irregular-verbs-in-English--widget-label-check-past-participle nil)
(learning-irregular-verbs-in-English--text-button-check "Check")
(learning-irregular-verbs-in-English--widget-button-check nil)
(learning-irregular-verbs-in-English--widget-message-success nil)
(learning-irregular-verbs-in-English--widget-item-space-before-success nil)
(learning-irregular-verbs-in-English--text-success "Nice!")
(learning-irregular-verbs-in-English--widget-item-space-after-success nil)
(learning-irregular-verbs-in-English--widget-button-quit nil)
(learning-irregular-verbs-in-English--text-button-quit "Quit")
(learning-irregular-verbs-in-English--widget-item-space-between-buttons nil)
(learning-irregular-verbs-in-English--widget-button-replay nil)
(learning-irregular-verbs-in-English--text-button-replay "New challenge"))
;; Imports
(require 'widget)
(eval-when-compile
(require 'wid-edit))
;; Functions
(defun kill-app ()
"Kill the application."
(interactive)
(kill-buffer learning-irregular-verbs-in-English--buffer-name))
(defun value-field-simple-past ()
(if (not (eq learning-irregular-verbs-in-English--widget-field-simple-past nil)) (widget-value learning-irregular-verbs-in-English--widget-field-simple-past) ""))
(defun value-field-past-participle ()
(if (not (eq learning-irregular-verbs-in-English--widget-field-past-participle nil)) (widget-value learning-irregular-verbs-in-English--widget-field-past-participle) ""))
(defun set-verb-to-learn ()
"Set the verb to learn."
(let ((verbs-random (nth (random (length learning-irregular-verbs-in-English--verbs)) learning-irregular-verbs-in-English--verbs)))
(setq learning-irregular-verbs-in-English--verb-to-learn-infinitive (nth 0 verbs-random))
(setq learning-irregular-verbs-in-English--verb-to-learn-simple-past (nth 1 verbs-random))
(setq learning-irregular-verbs-in-English--verb-to-learn-past-participle (nth 2 verbs-random))))
(defun format-value-infinitive ()
"Format the value of the infinitive."
(format "Infinitive ➡️ %s" learning-irregular-verbs-in-English--verb-to-learn-infinitive))
(defun format-check-simple-past ()
"Format the value of the simple past."
(if (eq learning-irregular-verbs-in-English--state 1)
""
(format " %s" (if
(and
(string= (value-field-simple-past) learning-irregular-verbs-in-English--verb-to-learn-simple-past)
(not (string= (value-field-simple-past) "")))
learning-irregular-verbs-in-English--emoji-valid learning-irregular-verbs-in-English--emoji-error))))
(defun format-check-past-participle ()
"Format the value of the past participle."
(if (eq learning-irregular-verbs-in-English--state 1)
""
(format " %s" (if
(and
(string= (value-field-past-participle) learning-irregular-verbs-in-English--verb-to-learn-past-participle)
(not (string= (value-field-past-participle) "")))
learning-irregular-verbs-in-English--emoji-valid learning-irregular-verbs-in-English--emoji-error))))
(defun toggle-layout-success ()
"Toggle the layout to success."
(if (eq learning-irregular-verbs-in-English--state 3)
(progn
;; Cursor to end
(goto-char (point-max))
;; Remove check button
(widget-delete learning-irregular-verbs-in-English--widget-button-check)
(setq learning-irregular-verbs-in-English--widget-button-check nil)
;; Text success
(setq learning-irregular-verbs-in-English--widget-item-space-before-success (widget-create 'item
""))
(setq learning-irregular-verbs-in-English--widget-message-success (widget-create 'item
learning-irregular-verbs-in-English--text-success
))
(setq learning-irregular-verbs-in-English--widget-item-space-after-success (widget-create 'item
"\n"))
;; Replay button
(setq learning-irregular-verbs-in-English--widget-button-replay (widget-create 'push-button
:size 20
:notify (lambda (&rest ignore)
(replay))
learning-irregular-verbs-in-English--text-button-replay))
;; Space
(setq learning-irregular-verbs-in-English--widget-item-space-between-buttons (widget-create 'item
"\n"))
;; Quit button
(setq learning-irregular-verbs-in-English--widget-button-quit (widget-create 'push-button
:size 20
:notify (lambda (&rest ignore)
(kill-app))
learning-irregular-verbs-in-English--text-button-quit))
(widget-backward 2)
)
(progn
(when (not (eq learning-irregular-verbs-in-English--widget-item-space-before-success nil)) (widget-delete learning-irregular-verbs-in-English--widget-item-space-before-success))
(when (not (eq learning-irregular-verbs-in-English--widget-message-success nil)) (widget-delete learning-irregular-verbs-in-English--widget-message-success))
(when (not (eq learning-irregular-verbs-in-English--widget-item-space-after-success nil)) (widget-delete learning-irregular-verbs-in-English--widget-item-space-after-success))
(when (not (eq learning-irregular-verbs-in-English--widget-button-replay nil)) (widget-delete learning-irregular-verbs-in-English--widget-button-replay))
(when (not (eq learning-irregular-verbs-in-English--widget-item-space-between-buttons nil)) (widget-delete learning-irregular-verbs-in-English--widget-item-space-between-buttons))
(when (not (eq learning-irregular-verbs-in-English--widget-button-quit nil)) (widget-delete learning-irregular-verbs-in-English--widget-button-quit))
)))
(defun make-button-check ()
"Make the button check."
(setq learning-irregular-verbs-in-English--widget-button-check (widget-create 'push-button
:notify (lambda (&rest ignore)
(update))
learning-irregular-verbs-in-English--text-button-check)))
(defun start ()
"Start o replay challenge."
(interactive)
;; Set the learning-irregular-verbs-in-English--state
(setq learning-irregular-verbs-in-English--state 1)
;; Get a new verb
(set-verb-to-learn)
;; Show the verb in infinitive
(widget-value-set learning-irregular-verbs-in-English--widget-item-verb (format-value-infinitive))
;; Reset button check
(when (eq learning-irregular-verbs-in-English--widget-button-check nil) (make-button-check))
;; Clear the fields
(widget-value-set learning-irregular-verbs-in-English--widget-field-simple-past "")
(widget-value-set learning-irregular-verbs-in-English--widget-label-check-simple-past "")
(widget-value-set learning-irregular-verbs-in-English--widget-field-past-participle "")
(widget-value-set learning-irregular-verbs-in-English--widget-label-check-past-participle "")
;; Update labels
(update))
(defun replay ()
"Replay the challenge."
(interactive)
(start)
(widget-backward 1))
(defun update ()
"Check the answers."
(interactive)
;; Is playing?
(when (and (eq learning-irregular-verbs-in-English--state 1)
(or
(not (string= (value-field-simple-past) ""))
(not (string= (value-field-past-participle) "")))
)
(setq learning-irregular-verbs-in-English--state 2))
;; Check the answers
(when (eq learning-irregular-verbs-in-English--state 2)
;; Is win?
(when (and
(string= (value-field-simple-past) learning-irregular-verbs-in-English--verb-to-learn-simple-past)
(string= (value-field-past-participle) learning-irregular-verbs-in-English--verb-to-learn-past-participle))
;; Set the learning-irregular-verbs-in-English--state
(setq learning-irregular-verbs-in-English--state 3))
;; Update the check labels
(widget-value-set learning-irregular-verbs-in-English--widget-label-check-simple-past (format-check-simple-past))
(widget-value-set learning-irregular-verbs-in-English--widget-label-check-past-participle (format-check-past-participle)))
;; Update the success layout if needed
(toggle-layout-success))
(defun main-layout ()
"Make widgets for the main layout."
(interactive)
;; Create the buffer
(switch-to-buffer learning-irregular-verbs-in-English--buffer-name)
;; Clear the buffer
(kill-all-local-variables)
(let ((inhibit-read-only t))
(erase-buffer))
(remove-overlays)
;; Create the widgets
;; Title
(insert (propertize (format "\n%s\n\n" learning-irregular-verbs-in-English--text-title) 'face '(:height 1.2 :weight bold)))
;; Verb in infinitive
(setq learning-irregular-verbs-in-English--widget-item-verb (widget-create 'item
:value ""))
;; Separator
(insert "\nSimple past ➡️ ")
;; Simple past
(setq learning-irregular-verbs-in-English--widget-field-simple-past (widget-create 'editable-field
:size 8
:help-echo "Type a Simple past"
))
;; Label check
(insert " ")
(setq learning-irregular-verbs-in-English--widget-label-check-simple-past (widget-create 'item
(format-check-simple-past)))
;; Separator
(insert "\nPast participle ➡️ ")
;; Past participle
(setq learning-irregular-verbs-in-English--widget-field-past-participle (widget-create 'editable-field
:size 8
:help-echo "Type a Past participle"))
;; Label check
(insert " ")
(setq learning-irregular-verbs-in-English--widget-label-check-past-participle (widget-create 'item
(format-check-past-participle)))
;; Separator
(insert "\n")
;; Check button
(make-button-check)
;; Display the buffer
(use-local-map widget-keymap)
(widget-setup))
;; Keybindings
(define-key widget-keymap (kbd "q") 'kill-app)
;; Init
(main-layout)
(start)
(widget-backward 1)))
(main-layout)
(start)
(widget-backward 1))
(provide 'learning-irregular-verbs-in-English)