2012-02-09 4 views
9

Voglio usare rlwrap con un erlang personalizzato repl.È possibile utilizzare il comando TAB completato da un comando wrapping?

Funziona perfettamente se lo eseguo come "rlwrap -a myrepl".

Il problema è che myrepl ha un completamento di tabulazione incorporato che viene calpestato da rlwrap.

Voglio fare rlwrap di rilasciare il tasto TAB

+0

Che cos'è myrepl? Questa è una domanda erlang o una domanda perl/rlwrap? – Isac

+0

Per me i vantaggi dell'utilizzo di rlwrap sono maggiori del valore del completamento automatico di Erlang. Non potrei farli funzionare insieme, quindi uso "rlwrap erl -oldshell". – alavrik

risposta

18

Non è possibile utilizzare rlwrap s' editing linea/storia e il completamento TAB del vostro repl allo stesso tempo.

rlwrap fornisce editing linea, la storia e il completamento (molto semplice) per i comandi che non ce l'hanno. Un comando che ha qualcosa di stravagante come il completamento del TAB non dovrebbe richiedere rlwrap per eseguire la modifica della riga, dovrebbe?

L'(--always-readline) opzione -a è un modo piuttosto grezzo per il comportamento di modifica linea sostituto di rlwrap per quella del vostro comando. È inteso principalmente per i comandi che hanno un editor di riga molto semplice, senza ad es. la cronologia dei comandi

Se si desidera utilizzare l'opzione -a perché si preferisce fanciness rlwrap s'(come la storia persistente, o richieste di colore) a (come il completamento TAB) del vostro comando, andare avanti, ma non è possibile scegliere alcuni fanciness di uno e mantenere alcuni degli altri.

Questo è il (piccolo) programma di prezzo (ei loro utenti) devono pagare per evitare la libreria readline e la licenza GPL che viene fornita con esso.

Hans (rlwrap autore)


Edit (aprile 2017):

In molti casi sarà possibile utilizzare un filter per ripristinare il completamento. Vedere A node shell based on readline per un esempio di questo.

+3

La shell di Erlang ha il completamento del TAB, ma manca in molte altre aree. Nessuna cronologia tra sessioni, capacità di editing di righe limitate, ecc. –

+0

@Hans vedete qualche motivo per cui, se cambio la fonte di rlwrap e rimuovo il TAB dai tasti speciali o forse lo ricolleghiamo ad un'altra chiave, non lo farò funzionare? Non ho avuto il tempo di provare, ma sto approfittando del fatto che hai risposto al mio post. –

+6

@ Gabriel: La rimozione del TAB dai "tasti speciali" non è sufficiente, questo ti darà solo un TAB morto. Ciò che realmente deve essere fatto è che il TAB cancella il buffer di input del comando sottostante, passa il buffer di lettura della riga corrente ad esso, posiziona il cursore, passa il TAB, analizza l'output risultante (inclusi i comandi di spostamento del cursore) e infine riempie il buffer di input readline e imposta rl_point di conseguenza. Tutti questi passaggi sono difficili e soggetti a errori; in particolare l'analisi dell'output del comando richiede che rlwrap contenga un emulatore di terminale virtuale. –

0

Rlwrap è carino. Ma in Erlang, offre solo una storia persistente mentre rompe il completamento del tab di erl.

Il problema fondamentale è Erlang. REPL è solo vecchio e rotto, e non segue le normali convenzioni * nix. Inoltre, si rifiutano di risolverlo a causa della paura di amministratori di casuali casuali che non accettano cambiamenti. Nessuna quantità di attacchi di "duct-tape" rlwrap può correggere un UX REPL scadente.

Sarebbe meglio (anche se molto più lavoro) scrivere un REPL da zero come pry/ipython/etc. che fa colore configurabile, completamento scheda, cronologia persistente, paging, osservatore CLI, plugin, ecc.

Rlwrap brilla su programmi con shell primitive.

+0

Penso che tu sia troppo severo con "amministratori di casuali casuali" e sovrastima la difficoltà di usare l'eccellente libreria 'readline'. Il motivo principale per questi REPL vecchi e falliti è la licenza GPL 'readline's: usare' readline' significa che il tuo programma deve essere GPL. Vedi questo [scambio email] (http://clisp.cvs.sourceforge.net/viewvc/clisp/clisp/doc/Why-CLISP-is-under-GPL) di un quarto di secolo fa - probabilmente uno dei primi casi di Applicazione GPL, in cui 'readline' ha svolto un ruolo chiave. –

Problemi correlati