Подтвердить что ты не робот

Как запустить 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 в режиме буферизации в буферном режиме и блочном режиме - переполнение стека

4b9b3361

Ответ 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 , кажется, работает лучше.