2012-01-18 16 views
12

Ho pensato che questo avrebbe funzionato:come eseguire node.js interattivo in Emacs su Windows

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

Ma quando faccio M-x my-node ed entro 1+1 nel buffer COMINT, non visualizza alcun output.

Questo è in Emacs 24.0.50.1 su Windows 7 e NodeJS è installato senza alcuna configurazione speciale.

Chiamare node.js in modo non interattivo come in M-x compile RET node hello-world.js RET funziona correttamente. L'esecuzione di node in modo interattivo in cmd funziona correttamente.

Questo potrebbe essere correlato: quando corro M-x shell e immettere node nel buffer di shell e quindi immettere 1+1, non visualizza il risultato. Devo mancare qualcosa di molto semplice.

Aggiornamento:

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

risposta

3

Ho trovato una soluzione.

Creare uno script nodo che avvia un'interfaccia REPL JavaScript.

node.js nodo-in-:

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

Pass "percorso del nodo \ a \ nodo-in-node.js" per rendere-COMINT invece di "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 per eseguire una shell di Windows JavaScript Emacs. Non so perché funzioni. Il completamento della scheda, l'evidenziazione della sintassi, l'immissione multilinea tramite Maiusc + Invio non funziona.

+0

per le versioni più recenti del nodo 'repl.start()' deve essere sostituito con 'repl.start ({prompt: '>'})' – shyam

3

Da http://www.gnu.org/software/emacs/windows/Sub_002dprocesses.html, sembra come se ciò che può accadere è che l'uscita è tamponato dal nodo. Se esiste un'opzione che modifica il buffering, puoi provare a passarlo.

Potrebbe esserci un altro modo per risolverlo, supponendo che si tratti di un problema di buffering, ma la mia conoscenza di Windows non è quasi completa da sapere. Io, per esempio, mi piacerebbe una soluzione generale a questo su piattaforme Windows, è un problema fastidioso quando si presenta.

11

Il modo più semplice per avere node.js (testato utilizzando il nodo v0.8.1) come shell inferiore in Emacs è utilizzare il pacchetto js-comint. Quindi, impostare (setq inferior-js-program-command "node --interactive") per forzare l'esecuzione del nodo in modalità interattiva. Il comando M-x run-js aprirà quindi l'interprete.

Analogamente, è possibile verificare facilmente che node --interactive funzioni all'interno di un eshell.

+1

Il trucco - Ho avuto bisogno di aggiungere "--interactive" . –

+0

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

Problemi correlati