我认为这样可行:
(defun my-node ()
(interactive)
(pop-to-buffer (make-comint "my-node" "node")))
但是当我执行M-x my-node
并在comint缓冲区中输入1+1
时,它不会显示任何输出。
这是在Windows 7上的Emacs 24.0.50.1中安装的NodeJS没有任何特殊配置。
在M-x compile RET node hello-world.js RET
中以非交互方式调用node.js可以正常工作。在node
中以交互方式运行cmd
可以正常工作。
这可能是相关的:当我运行M-x shell
并在shell缓冲区中输入node
然后输入1+1
时,它不会显示结果。我必须遗漏一些非常基本的东西。
更新
可能相关:emacs/Python: running python-shell in line buffered vs. block buffered mode - Stack Overflow
答案 0 :(得分:12)
将node.js(使用节点v0.8.1测试)作为Emacs下的劣质shell的最简单方法是使用js-comint包。然后,设置(setq inferior-js-program-command "node --interactive")
以强制节点以交互模式运行。然后命令M-x run-js
将打开解释器。
同样,您可以轻松验证node --interactive
是否可以在eshell中运行。
答案 1 :(得分:3)
从http://www.gnu.org/software/emacs/windows/Sub_002dprocesses.html开始,看起来可能发生的是节点正在缓冲输出。如果有一个选项可以修改它的缓冲,你可以尝试传递它。
可能还有另一种方法可以解决它,假设它是一个缓冲问题,但是我的Windows知识还不够完整。举个例子,我会喜欢在Windows平台上对此进行一般性解决方案,当它出现时,这是一个令人讨厌的问题。
答案 2 :(得分:3)
我找到了一个解决方案。
创建一个启动JavaScript REPL接口的节点脚本。
节点在-node.js中:
var repl = require("repl");
repl.start();
将“node path \ to \ node-in-node.js”传递给make-comint而不是简单的“node”。
(defun my-node-shell ()
(interactive)
(pop-to-buffer (make-comint "Node Shell" "node" nil "C:\\run\\node-in-node.js")))
运行M-x my-node-shell
以在Windows Emacs中运行JavaScript shell。我不知道为什么会这样。通过Shift + Enter选项卡完成,语法突出显示,多行输入不起作用。
答案 3 :(得分:0)
如果js-comint不适用于您,则可以try:
(defun node-repl () (interactive) (setenv "NODE_NO_READLINE" "1") ;avoid fancy terminal codes (pop-to-buffer (make-comint "node-repl" "node" nil "--interactive"))) (node-repl)
但是nodejs-repl软件包似乎更好地工作。