85 lines
3 KiB
Fennel
85 lines
3 KiB
Fennel
(local util (require :lib.util))
|
|
(local TileView (require :editor.tileedit))
|
|
(local MapEditView (require :editor.mapedit))
|
|
(local ScreenEditView (require :editor.screenedit))
|
|
(local PortraitView (require :editor.portraitedit))
|
|
(local {: cmd-predicate} (util.require :editor.imstate))
|
|
(local core (require :core))
|
|
(local command (require :core.command))
|
|
(local keymap (require :core.keymap))
|
|
(local common (require :core.common))
|
|
|
|
(let [commands {}]
|
|
(each [_ name (ipairs [:tile :portrait :font :brush])]
|
|
(local cls (require (.. "editor." name "edit")))
|
|
(tset commands (.. "honeylisp:" name "-editor") (fn []
|
|
(local node (core.root_view:get_active_node))
|
|
(node:add_view (cls)))))
|
|
(command.add nil commands))
|
|
|
|
(local fileeditors
|
|
{:map {:view MapEditView :filefilter "^game/map%d+%.json"}
|
|
:screen {:view ScreenEditView :filefilter "^game/.*%.screen"}})
|
|
|
|
(each [type {: view : filefilter} (pairs fileeditors)]
|
|
(command.add nil
|
|
{(.. "honeylisp:" type "-editor") (fn []
|
|
(core.command_view:enter (.. "Open " type)
|
|
(fn [text item]
|
|
(local node (core.root_view:get_active_node))
|
|
(node:add_view (view (or (and item item.text) text))))
|
|
(fn [text]
|
|
(local files [])
|
|
(each [_ item (pairs core.project_files)]
|
|
(when (and (= item.type :file) (item.filename:find filefilter))
|
|
(table.insert files item.filename)))
|
|
(common.fuzzy_match files text))))}))
|
|
|
|
(command.add (cmd-predicate :editor.gfxedit) {
|
|
"graphics-editor:save" (fn [] (core.active_view:save) (core.log "Saved"))
|
|
"graphics-editor:reload" (fn [] (core.active_view:reload) (core.log "Reloaded"))
|
|
"graphics-editor:next-tile" #(core.active_view:select-rel 1)
|
|
"graphics-editor:previous-tile" #(core.active_view:select-rel -1)
|
|
})
|
|
(command.add (cmd-predicate :editor.tileedit) {
|
|
"tileedit:copy"
|
|
#(system.set_clipboard (: (core.active_view:tile) :tohex))
|
|
"tileedit:paste"
|
|
#(when (= (length (system.get_clipboard)) (* (core.active_view:tilebytelen) 2))
|
|
(core.active_view:update-tile (: (system.get_clipboard) :fromhex)))
|
|
})
|
|
(keymap.add {
|
|
"ctrl+s" "graphics-editor:save"
|
|
"alt+r" "graphics-editor:reload"
|
|
"left" "graphics-editor:previous-tile"
|
|
"right" "graphics-editor:next-tile"
|
|
"ctrl+c" "tileedit:copy"
|
|
"ctrl+v" "tileedit:paste"
|
|
})
|
|
|
|
(command.add :editor.replview {
|
|
"repl:submit" #(core.active_view:submit)
|
|
})
|
|
|
|
(local ReplView (require :editor.replview))
|
|
(local repl (require :editor.repl))
|
|
(command.add nil {
|
|
"repl:create" (fn []
|
|
(local node (core.root_view:get_active_node))
|
|
(node:add_view (ReplView (repl.new)))
|
|
)
|
|
})
|
|
(keymap.add {
|
|
:return "repl:submit"
|
|
})
|
|
|
|
(fn inline-eval [eval]
|
|
(let [ldoc core.active_view.doc
|
|
(aline acol bline bcol) (ldoc:get_selection)
|
|
inject #(ldoc:insert bline bcol (eval $1))]
|
|
(if (and (= aline bline) (= acol bcol))
|
|
(inject (ldoc:get_text aline 1 aline 10000000))
|
|
(inject (ldoc:get_text aline acol bline bcol)))))
|
|
|
|
{: inline-eval}
|