2012-12-13 16 views
13

Używam Emacsa 24.2. Mam zainstalowane js-comint i js-mode z MELPA, wykonany run-js, a teraz w REPL zamiast > znakiem mam ten bełkot:Używanie Node.js z JS-comint w Emacs

^[[1G> ^[[0K^[[3G 

REPL sama w trybie Inferior Javascript działa dobrze, po prostu znak > jest zmieniana . Jeśli wprowadzisz niedokończone wyrażenie, wydrukuje ono nawet ^[[1G... ^[[0K^[[5G. ^[ to znaki systemowe, które nie są kopiowane za pomocą funkcji kopiuj-wklej. Dodaję je, abyś miał pomysł.

W moim init-file:

(require 'js-comint) 
(setq inferior-js-program-command "nodejs") 

W terminalu wywołującego nodejs produkuje pracy rEPL.

Dlaczego monit zachowuje się w ten sposób? Co powinienem zrobić, by to poprawić?

Odpowiedz

17
(setq inferior-js-mode-hook 
     (lambda() 
     ;; We like nice colors 
     (ansi-color-for-comint-mode-on) 
     ;; Deal with some prompt nonsense 
     (add-to-list 
     'comint-preoutput-filter-functions 
     (lambda (output) 
      (replace-regexp-in-string "\033\\[[0-9]+[GK]" "" output))))) 

\033 jest znakiem ucieczki drukuje jak ^[.

+0

ale dlaczego monit produkuje śmieci? –

+1

Wprowadzono drobną zmianę do ostatniej instrukcji: '(zamień-regexp-in-string" \ 033 \\ [[0-9] + [A-Z] "" "output)))))' – narayan

17

Wystarczy dodać jeden wiersz w .emacs:

(setenv "NODE_NO_READLINE" "1") 

odpowiedzi pochodzą z tego postu: Node.js prompt '>' can not show in eshell

+0

+1. to w zasadzie zadziałało dla mnie, dzięki. W moim katalogu aplikacji utworzyłem plik o nazwie "repl", aw nim umieścić NODE_NO_READLINE = 1 węzeł. Następnie po prostu wywołaj polecenie ./repl z poziomu powłoki emacs i otrzymasz replikę węzła w emacs z poprawnym dopasowaniem modułu i brakiem wyjściowego giberrisha. – Scott

1

nie wiem, jak niedawno, ale teraz można pobrać i używać nodejs-repl.