honeylisp/wrap.fnl

61 lines
1.8 KiB
Fennel

(local editor (require :editor))
(local util (require :lib.util))
(local lume (require :lib.lume))
(local link (require :link))
(require :link.command)
(local core (require :core))
(local command (require :core.command))
(local keymap (require :core.keymap))
(local translate (require :core.doc.translate))
(command.add #(link.machine:connected?) {
"honeylisp:upload" (fn []
(local p (util.reload "game"))
(p:upload link.machine)
(core.log (string.format "%x" (p:lookup-addr p.start-symbol))))
"honeylisp:reload" (fn []
(local p-before (require :game))
(local p (util.reload :game))
(if (link.machine:hotswap p-before p)
(core.log "Reloaded!")
(core.log "Reload failed")))
})
(command.add (fn [] true) {
"honeylisp:rebuild" #(util.reload "game")
})
(fn selected-symbol []
(local ldoc core.active_view.doc)
(var (aline acol bline bcol) (ldoc:get_selection))
(when (and (= aline bline) (= acol bcol))
(set (aline acol) (translate.start_of_word ldoc aline acol))
(set (bline bcol) (translate.end_of_word ldoc bline bcol)))
(ldoc:get_text aline acol bline bcol))
(command.add "core.docview" {
"fennel:eval" #(editor.inline-eval #(fv (fennel.eval $1 {:env _G :compiler-env _G}) {}))
"lume:hotswap" (fn []
(local modname
(-> core.active_view.doc.filename
(: :gsub "%.%a+$" "")
(: :gsub "/" ".")
(: :gsub "^data%." "")
(: :gsub "%.init$" "")))
(core.log (.. "Hotswapping " modname))
(local (mod err) (util.hotswap modname))
(when (not= err nil) (print err) (error err)))
"honeylisp:address" (fn []
(local word (selected-symbol))
(local p (require "game"))
(core.log (string.format "%s %x" word (or (p:lookup-addr word) -1)))
)
})
(keymap.add {
"alt+e" "fennel:eval"
"alt+r" "lume:hotswap"
"alt+a" "honeylisp:address"
"alt+l" "honeylisp:reload"
})
{}