From de07bcb18a6d5bfdecc5870ee1d26196a414875e Mon Sep 17 00:00:00 2001 From: Dan Motzenbecker Date: Sun, 4 Oct 2015 18:53:54 -0400 Subject: [PATCH] repl launching --- natal.coffee | 55 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/natal.coffee b/natal.coffee index 3275412..3c8d286 100644 --- a/natal.coffee +++ b/natal.coffee @@ -4,13 +4,13 @@ # http://oxism.com # MIT License -fs = require 'fs' -crypto = require 'crypto' -{execSync} = require 'child_process' -cli = require 'commander' -chalk = require 'chalk' -semver = require 'semver' -pkgJson = require __dirname + '/package.json' +fs = require 'fs' +crypto = require 'crypto' +child = require 'child_process' +cli = require 'commander' +chalk = require 'chalk' +semver = require 'semver' +pkgJson = require __dirname + '/package.json' nodeVersion = pkgJson.engines.node resources = __dirname + '/resources/' @@ -34,9 +34,9 @@ logErr = (err, color = 'red') -> exec = (cmd, keepOutput) -> if keepOutput - execSync cmd + child.execSync cmd else - execSync cmd, stdio: 'ignore' + child.execSync cmd, stdio: 'ignore' readFile = (path) -> @@ -317,6 +317,43 @@ getDeviceList = -> logErr 'Device listing failed: ' + message +startRepl = (name) -> + log 'Starting REPL' + hasRlwrap = + try + exec 'type rlwrap' + true + catch + log ' + Warning: rlwrap is not installed.\nInstall it to make the REPL a much + better experience with arrow key support. + ', 'red' + false + + try + lein = child.spawn (if hasRlwrap then 'rlwrap' else 'lein'), + "#{if hasRlwrap then 'lein ' else ''}trampoline run -m clojure.main -e" + .split(' ').concat( + """ + (require '[cljs.repl :as repl]) + (require '[ambly.core :as ambly]) + (let [repl-env (ambly.core/repl-env)] + (cljs.repl/repl repl-env + :watch \"src\" + :watch-fn + (fn [] + (cljs.repl/load-file repl-env + \"src/#{name}/core.cljs\")) + :analyze-path \"src\")) + """), + cwd: process.cwd() + env: process.env + stdio: 'inherit' + + catch {message} + logErr message + + cli._name = 'natal' cli.version pkgJson.version