From 95ec2d81d8661e56b7b98a1c19ad503c5083c1e4 Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Sat, 15 Nov 2014 23:53:58 -0600 Subject: CoffeeScript: add missed node_readline.coffee --- coffee/node_readline.coffee | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 coffee/node_readline.coffee diff --git a/coffee/node_readline.coffee b/coffee/node_readline.coffee new file mode 100644 index 0000000..31e5ca0 --- /dev/null +++ b/coffee/node_readline.coffee @@ -0,0 +1,36 @@ +# IMPORTANT: choose one +RL_LIB = "libreadline" # NOTE: libreadline is GPL +#RL_LIB = "libedit" + +HISTORY_FILE = require('path').join(process.env.HOME, '.mal-history') + +rlwrap = {} # namespace for this module in web context + +ffi = require('ffi') +fs = require('fs') + +rllib = ffi.Library(RL_LIB, { + 'readline': ['string', ['string']], + 'add_history': ['int', ['string']]}) + +rl_history_loaded = false + +exports.readline = rlwrap.readline = (prompt = 'user> ') -> + if !rl_history_loaded + rl_history_loaded = true + lines = [] + if fs.existsSync(HISTORY_FILE) + lines = fs.readFileSync(HISTORY_FILE).toString().split("\n"); + + # Max of 2000 lines + lines = lines[Math.max(lines.length - 2000, 0)..] + rllib.add_history(line) for line in lines when line != "" + + line = rllib.readline prompt + if line + rllib.add_history line + fs.appendFileSync HISTORY_FILE, line + "\n" + + line + +# vim: ts=2:sw=2 -- cgit v1.2.3