I thought this would work:
(defun my-node () (interactive) (pop-to-buffer (make-comint "my-node" "node")))
But when I do
M-x my-node and enter
1+1 in the comint buffer, it does not display any output.
This is in Emacs 126.96.36.199 on Windows 7 and NodeJS is installed without any special configuration.
Calling node.js non-interactively as in
M-x compile RET node hello-world.js RET works fine. Running
node interactively in
cmd works fine.
This might be related: when I run
M-x shell and enter
node in the shell buffer and then enter
1+1, it doesn’t display the result. I must be missing something very basic.
The simplest way to have node.js (tested using node v0.8.1) as an inferior shell under Emacs is to use the js-comint package. Then, set
(setq inferior-js-program-command "node --interactive") to force node to run in interactive mode. The command
M-x run-js will then open the interpreter.
Similarly, you can easily verify that
node --interactive works within an eshell.
From http://www.gnu.org/software/emacs/windows/Sub_002dprocesses.html , it looks as if what may be happening is that the output is being buffered by node. If there is an option that modifies it’s buffering, you could try passing that.
There may be another way to solve it, assuming it’s a buffering issue, but my windows lore isn’t nearly complete enough to know. I, for one, would love a general solution to this on windows platforms, it’s an annoying problem when it crops up.
I found one solution.
var repl = require("repl"); repl.start();
Pass “node path\to\node-in-node.js” to make-comint instead of simply “node”.
(defun my-node-shell () (interactive) (pop-to-buffer (make-comint "Node Shell" "node" nil "C:\run\node-in-node.js")))