2012-11-01 10 views
5

Questa domanda Node.js prompt '>' can not show in eshell risolve il problema per il nodo repl, ma quella soluzione non funziona quando si chiama il nodo da npm.npm non visualizza prompt correttamente in emacs eshell

Per esempio, se io faccio

$ 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 

Oppure, se si dispone di un package.json con un "script": { "start": "nodo"}

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

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

So che questo potrebbe essere risolto usando "start": "env NODE_NO_READLINE = 1 nodo", ma scrivilo ovunque non è una soluzione di ricerca. E forse altri utenti del pacchetto non usano emacs e hanno bisogno di impostare l'env var in altro modo.

devo provare con un alias per impostazione npm NODE_NO_READLINE = 1, ma lo stesso risultato

alias npm='env NODE_NO_READLINE=1 npm' 

risposta

4

Questa è la modalità comint filtrando i caratteri speciali molti front-end shell usano per colorare il testo. Probabilmente hai familiarità con messaggi come "usare un terminale stupido o terminale Emacs" se hai mai interagito con un programma shell tramite Emacs. Alcuni possono rilevare che Emacs o terminale stupido viene utilizzato e non invierà caratteri che quelli non possono interpretare, ma il nodo non lo fa. Indipendentemente da ciò, potresti usare qualcosa del genere:

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

da qualche parte nel tuo .emacs.

Stackoverflow non copierà correttamente i caratteri di controllo, il primo carattere nell'espressione regolare (subito dopo la citazione e prima della barra) è il carattere ^[. È possibile inserirlo in Emacs facendo C-q 0 3 3 qualsiasi cosa si digiti successivamente causerà l'inserimento del carattere di controllo nel buffer corrente.

+1

La soluzione funziona su shell ma non su eshell. L'eshell utilizza le funzioni eshell-output-filter per filtrare in modo da utilizzare un approccio simile (add-to-list "eshell-output-filter-functions" (lambda() (save-excursion (replace-regexp "\\ [[0-9] + [GKJ]" "" nil \t \t eshell-last-uscita-start \t \t eshell-last-uscita-end)))) opere, ma è lento. Quello che sto pensando è come dire a npm di usare il NODE_NO_READLINE = 1 –

+0

Ottengo: > console.log ('questo è roba di taglio in un modo strano?') console.lo ('è questo roba cuttin fuori in un modo strano? ') Questo ferma i caratteri speciali, ma non ho più g. Che aspetto ha il formato speciale dei caratteri di Comint per eseguire un'espressione regolare? – Mittenchops

+0

regex doveva essere "\ 033 \\ [[0-9] + [GK]" per mw lavorare basato su http://stackoverflow.com/questions/13862471/using-node-js-with-js-comint -in-emacs – pellekrogholt

Problemi correlati