Sto pensando di scrivere un’applicazione per console in C # e voglio incorporare funzionalità di modifica della cronologia, del completamento e della riga di comando come GNU readline (ma non necessariamente così esteso!)
Esiste una libreria esistente per .net che fornisce questo tipo di funzionalità? Immagino che un’opzione potrebbe essere utilizzare i servizi di interoperabilità per chiamare GNU readline. Ma esiste un’opzione nativa?
Potresti voler controllare getline.cs di Miguel de Icaza (il link nel post del blog è rotto, ora il codice può essere trovato qui ). A seconda delle funzioni di readline di cui hai effettivamente bisogno, potrebbe essere sufficiente per i tuoi scopi.
La cosa bella è che è tutto contenuto in un singolo file (quindi getline.cs) e MIT X11 concesso in licenza.
Usarlo è abbastanza facile.
Se vuoi provarlo, basta scaricare il file e compilarlo:
C:\> csc.exe /d:DEMO getline.cs C:\> getline.exe shell>
La parte #ifdef DEMO
mostra anche il REPL di base:
var le = new LineEditor("whatever"); string s; while ((s = le.Edit("my prompt> ", "")) != null) { // User input from command line / prompt now in "s". }
L’unica cosa che so è Mono-Readline .
Fornisce un’interfaccia .NET alla libreria GNU Readline – è un po ‘grezza però, solo la versione 0.0.1, e l’ho sempre visto girare sul runtime Mono.
Si dovrebbe fare attenzione anche con le licenze … AFAIK qualsiasi cosa che colleghi le librerie GNU Readline è necessario per essere rilasciato sotto licenza GPL.
un progetto che mira a emulare la maggior parte delle funzioni di RedLine è Deveel ReadLine , ma devo dire che non è mantenuto. L’ultima volta che l’ho usato ha funzionato molto bene su entrambi .NET e Mono, anche se c’è un piccolo bug quando si annulla una linea che è stata automaticamente piegata.