mirror of
https://github.com/tanrax/lirve.el.git
synced 2024-11-09 23:35:42 +01:00
Fix scope in package
This commit is contained in:
parent
2f30f0180e
commit
49e6e3e10c
@ -11,336 +11,338 @@
|
|||||||
|
|
||||||
;;; Code:
|
;;; 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 ()
|
(defun learning-irregular-verbs-in-English ()
|
||||||
"Application to learn and review irregular verbs in English."
|
"Application to learn and review irregular verbs in English."
|
||||||
(interactive)
|
(interactive)
|
||||||
(let* ((learning-irregular-verbs-in-English--verbs '(
|
(main-layout)
|
||||||
("beat" "beat" "beaten")
|
(start)
|
||||||
("become" "became" "become")
|
(widget-backward 1))
|
||||||
("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)))
|
|
||||||
|
|
||||||
(provide 'learning-irregular-verbs-in-English)
|
(provide 'learning-irregular-verbs-in-English)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user