2012-01-18 23 views
12

pensé que esto funcionaría:cómo ejecutar Node.js interactiva en Emacs en Windows

(defun my-node() 
    (interactive) 
    (pop-to-buffer (make-comint "my-node" "node"))) 

Pero cuando lo haga M-x my-node y entro 1+1 en el búfer comint, que no muestra ninguna salida.

Esto está en Emacs 24.0.50.1 en Windows 7 y NodeJS se instala sin ninguna configuración especial.

Llamar node.js de forma no interactiva como en M-x compile RET node hello-world.js RET funciona bien. Ejecutando node interactivamente en cmd funciona bien.

Esto podría estar relacionado: cuando ejecuto M-x shell e ingreso node en el búfer de shell y luego ingreso 1+1, no se muestra el resultado. Debo extrañar algo muy básico.

Actualización:

Probablemente relacionados: emacs/Python: running python-shell in line buffered vs. block buffered mode - Stack Overflow

Respuesta

3

Encontré una solución.

Realice una secuencia de comandos de nodo que inicie una interfaz JavaScript REPL.

nodo-en-Node.js:

var repl = require("repl"); 
repl.start(); 

Pass "ruta del nodo \ a \ nodo-en-Node.js" hacer-comint en lugar de simplemente "nodo".

(defun my-node-shell() 
    (interactive) 
    (pop-to-buffer (make-comint "Node Shell" "node" nil "C:\\run\\node-in-node.js"))) 

Run M-x my-node-shell para ejecutar un shell de Windows JavaScript en Emacs. No sé por qué funciona esto. Finalización de pestañas, resaltado de sintaxis, entrada de líneas múltiples a través de Mayús + Entrar no funciona.

+0

para las últimas versiones del nodo 'repl.start()' necesita ser reemplazado por 'repl.start ({prompt: '>'})' – shyam

3

De http://www.gnu.org/software/emacs/windows/Sub_002dprocesses.html, parece como si lo que puede estar ocurriendo es que la salida está siendo amortiguada por nodo. Si hay una opción que modifica su almacenamiento en búfer, puede intentar pasar eso.

Puede haber otra manera de resolverlo, asumiendo que es un problema de almacenamiento en búfer, pero mi conocimiento de Windows no está lo suficientemente completo como para saberlo. Yo, por mi parte, me encantaría una solución general para esto en las plataformas de Windows, es un problema molesto cuando surge.

11

La forma más simple de tener node.js (probado utilizando el nodo v0.8.1) como una capa inferior en Emacs es usar el paquete js-comint. Luego, configure (setq inferior-js-program-command "node --interactive") para forzar que el nodo se ejecute en modo interactivo. El comando M-x run-js abrirá el intérprete.

Del mismo modo, puede verificar fácilmente que node --interactive funcione dentro de una eshell.

+1

¿El truco? Necesitaba agregar "--interactive" . –

+0

IOW '(pop-to-buffer (make-comint" node-repl "" nodo "nil" --interactive "))' –

Cuestiones relacionadas