Как запустить node.js в интерактивном режиме в Emacs в Windows
Я думал, что это сработает:
(defun my-node ()
(interactive)
(pop-to-buffer (make-comint "my-node" "node")))
Но когда я делаю M-x my-node
и вводим 1+1
в буфере comint, он не отображает никакого вывода.
Это в Emacs 24.0.50.1 на Windows 7 и NodeJS устанавливается без какой-либо специальной настройки.
Вызов node.js неинтерактивно, как в M-x compile RET node hello-world.js RET
работает отлично. Выполнение node
интерактивно в cmd
отлично работает.
Это может быть связано: при запуске M-x shell
и введите node
в буфер оболочки, а затем введите 1+1
, он не отображает результат. Я должен упустить что-то очень простое.
Update:
Вероятно, связанный: emacs/Python: запуск оболочки python в режиме буферизации в буферном режиме и блочном режиме - переполнение стека
Ответы
Ответ 1
Я нашел одно решение.
Сделайте node script, который запустит интерфейс JavaScript REPL.
node -in- node.js
var repl = require("repl");
repl.start();
Передать node путь \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
, чтобы запустить оболочку JavaScript в Windows Emacs. Я не знаю, почему это работает. Завершение вкладки, подсветка синтаксиса, многострочный ввод через Shift + Enter не работает.
Ответ 2
Самый простой способ иметь node.js(проверенный с использованием node v0.8.1) в качестве нижней оболочки под Emacs - использовать js-comint. Затем установите (setq inferior-js-program-command "node --interactive")
, чтобы заставить node работать в интерактивном режиме. Затем команда M-x run-js
откроет интерпретатор.
Аналогично, вы можете легко убедиться, что node --interactive
работает внутри eshell.
Ответ 3
Из http://www.gnu.org/software/emacs/windows/Sub_002dprocesses.html, похоже, что может произойти то, что вывод буферизируется с помощью node. Если есть опция, которая изменяет его буферизацию, вы можете попробовать передать это.
Возможно, существует другой способ его решения, предполагая, что это проблема буферизации, но мои знания в области окон недостаточно полны, чтобы знать. Я, например, хотел бы получить общее решение этого на платформах Windows, это раздражающая проблема, когда она возникает.
Ответ 4
Если js-comint не работает для вас, вы можете попробовать:
(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)
Способ js-comint
, кажется, работает лучше.