2012-11-01 33 views
5

Câu hỏi này Node.js prompt '>' can not show in eshell giải quyết vấn đề cho nút repl, nhưng giải pháp đó không hoạt động khi bạn gọi nút từ npm.npm không hiển thị lời nhắc đúng dưới emacs eshell

By dụ nếu tôi làm

$ npm init 
This utility will walk you through creating a package.json file. 
It only covers the most common items, and tries to guess sane defaults. 

See `npm help json` for definitive documentation on these fields 
and exactly what they do. 

Use `npm install <pkg> --save` afterwards to install a package and 
save it as a dependency in the package.json file. 

Press ^C at any time to quit. 
^[[1G^[[0Jname: (nodo1) ^[[15G 

Hoặc nếu bạn có một package.json với một "kịch bản": { "bắt đầu": "nút"}

$ npm start 
npm WARN package.json [email protected] No README.md file found! 
> node 

^[[1G^[[0J> ^[[3G 

Tôi biết cái này có thể được giải quyết bằng cách sử dụng "bắt đầu": "env NODE_NO_READLINE = 1 nút", nhưng viết ở khắp mọi nơi không phải là một giải pháp tìm kiếm. Và có lẽ người dùng khác của gói không sử dụng emacs và cần đặt env var theo cách khác.

Tôi có thử với một bí danh cho khung cảnh NPM NODE_NO_READLINE = 1 nhưng kết quả tương tự

alias npm='env NODE_NO_READLINE=1 npm' 

Trả lời

4

Đây là chế độ COMINT lọc các ký tự đặc biệt nhiều vỏ phía trước đích sử dụng để tô màu cho văn bản. Bạn có thể quen thuộc với các thông điệp như "sử dụng thiết bị đầu cuối câm hoặc thiết bị đầu cuối Emacs" nếu bạn đã từng tương tác với một chương trình shell thông qua Emacs. Một số có thể phát hiện ra rằng Emacs hoặc thiết bị đầu cuối câm được sử dụng và sẽ không gửi các ký tự mà những người không thể giải thích, nhưng Node không làm điều đó. Bất kể, bạn có thể sử dụng một cái gì đó như thế này:

(add-to-list 
     'comint-preoutput-filter-functions 
     (lambda (output) 
      (replace-regexp-in-string "\\[[0-9]+[GK]" "" output))) 

ở đâu đó trong .emacs của bạn.

Stackoverflow sẽ không sao chép các ký tự điều khiển đúng cách, ký tự đầu tiên trong regexp (ngay sau dấu trích dẫn và trước dấu gạch chéo) là ký tự ^[. Bạn có thể nhập nó vào Emacs bằng cách thực hiện C-q 0 3 3 mọi thứ bạn nhập tiếp theo sẽ khiến ký tự điều khiển được chèn vào bộ đệm hiện tại.

+1

Giải pháp của bạn hoạt động trên trình bao nhưng không hoạt động trong eshell. Các eshell sử dụng eshell-output-filter-functions để lọc nên sử dụng phương pháp tương tự (add-to-list 'eshell-output-filter-functions' (lambda() (lưu-tham quan (replace-regexp "\\ [[0-9] + [GKJ] "" "nil \t \t eshell-last-output-start \t \t eshell-last-output-end))) hoạt động nhưng chậm. Những gì tôi đang suy nghĩ là làm thế nào để nói với npm để sử dụng NODE_NO_READLINE = 1 –

+0

Tôi nhận được: > console.log ('Đây là công cụ cắt theo cách lạ?') console.lo ('là công cụ cuttin này một cách kỳ lạ? ') Điều này dừng các ký tự đặc biệt, nhưng tôi không còn g. Định dạng ký tự đặc biệt comint trông như thế nào để tạo một regex? – Mittenchops

+0

regex phải là "\ 033 \\ [[0-9] + [GK]" để mw hoạt động dựa trên http://stackoverflow.com/questions/13862471/using-node-js-with-js-comint -in-emacs – pellekrogholt

Các vấn đề liên quan