41 lines
1.3 KiB
Fennel
41 lines
1.3 KiB
Fennel
;; This mode has two purposes:
|
|
;; * display the stack trace that caused the error
|
|
;; * allow the user to decide whether to retry after reloading or quit
|
|
|
|
;; Since we can't know which module needs to be reloaded, we rely on the user
|
|
;; doing a ,reload foo in the repl.
|
|
|
|
(local state {:msg "" :traceback "" :old-mode :intro})
|
|
|
|
(local explanation "Press escape to quit.
|
|
Press space to return to the previous mode after reloading in the repl.")
|
|
|
|
(fn draw []
|
|
(love.graphics.clear 0.34 0.61 0.86)
|
|
(love.graphics.setColor 0.9 0.9 0.9)
|
|
(love.graphics.print explanation 15 10)
|
|
(love.graphics.print state.msg 10 60)
|
|
(love.graphics.print state.traceback 15 125))
|
|
|
|
(fn keypressed [key set-mode]
|
|
(match key
|
|
:escape (love.event.quit)
|
|
:space (set-mode state.old-mode)))
|
|
|
|
(fn color-msg [msg]
|
|
;; convert compiler's ansi escape codes to love2d-friendly codes
|
|
(case (msg:match "(.*)\027%[7m(.*)\027%[0m(.*)")
|
|
(pre selected post) [[1 1 1] pre
|
|
[1 0.2 0.2] selected
|
|
[1 1 1] post]
|
|
_ msg))
|
|
|
|
(fn activate [old-mode msg traceback]
|
|
(love.graphics.setNewFont 16) ; use a monospace font here if you have one
|
|
(print msg)
|
|
(print traceback)
|
|
(set state.old-mode old-mode)
|
|
(set state.msg (color-msg msg))
|
|
(set state.traceback traceback))
|
|
|
|
{: draw : keypressed : activate}
|