coconutpalm / boot-code

CodeMirror for everyday coding!

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Archived - Superceded by the FuseCode organization


FusionText is the intersection of a number of good ideas I've encountered over the years that happens to implement an awesome programmer's editor and programming environment:

  • Start with a small kernel that does nothing but bootstrap itself
  • Modular, plugin-based design
  • The program is written in (and using) itself
  • Coding and program execution happen at the same time
  • Use Lisp, because Lisp is the first and best language that can be evolved in itself
  • Aggressively reuse existing best-of-breed components

TODO

  • Tech debt immediate cleanup

    • Make the js loader use the job api DONE
    • Only load js that hasn't already been loaded (keep a set of already-loaded-things)
    • :dynamic maps need a :name to display in the job UI DONE
  • Finish integrating replumb / implementing the main loader in repl.cljs

  • Job API DONE

    • Job name
    • Step number / of? Or vector of step functions where each function accepts a continuation?
    • Root cells: Current step name/description; current step number; total steps in current job; jobs remaining
    • Run in the background (if possible?) as a progressive web app. Else trigger the next step in a timer event.
  • Mechanism to push jobs from back-end to front-end (as noted under Refactoring below)

  • Edit itself using CodeMirror

    • Select a file
    • auto-repl displays result in gray beside line; hover shows more; guard against infinite loops
  • Edit Scala using CodeMirror

    • Integrate with Ensime / SBT?
    • Use ScalaFiddle back-end?
    • Will need plugins to be able to extend the back-end
  • Edit YAML / OpenAPI using the OpenAPI editor

  • GFMX code notebooks

  • JS editing support (use built-in CodeMirror code assist)

  • Terminal emulation support https://cdnjs.com/libraries/xterm (xtermjs)

  • UI ideas

  • Refactoring

    • Move everything but bootstrap logic to separate repos as spiked in api.clj
    • Config.edn in each plugin repo's root naming the plugin, its activator, its dependencies
      • Dependencies allow us to compute load order
    • Link via the config mechanism
    • Write default config file if one doesn't already exist
    • Download webfusion-text via git during bootstrap
    • Get the UI up, then download and activate plugins in the background
      • Push activation jobs from the back-end to the UI via the refresh-state mechanism or similar DONE
      • git pull already-downloaded plugins before activating
      • Load everything we can, then display what we couldn't load (and dependencies) if needed
        • Just create an editor buffer in Markdown with the report?
      • Support Javascript-based plugins?
  • Loader - See https://adzerk.com/blog/2017/02/faster-clojure-metadevelopment-with-boot/

    • Create standard ~/.fusion directory if needed and add standard config file
    • Allow to overload the standard ~/.fusion dirname on command line
    • Clone/pull bootstrap repo defined in config
    • (boot/load-file "${FUSION_DIR}/${BOOTSTRAP_PROJ}/build.boot")
    • (boot/boot web-dev)
    • Find a way to bridge this to SBT

Reference

Clojure

Clojurescript

Codemirror, general js libraries

Git

Clojure

JS

Boot

License

Eclipse Public License, either version 1.0 or (at your option) any later version.

Copyright © 2017-2018 by David Orme

About

CodeMirror for everyday coding!


Languages

Language:Clojure 99.2%Language:HTML 0.5%Language:CSS 0.3%