è possibile avere un modo multipiattaforma per gestire le chiavi backspace e frecce all'interno di un programma C o OCaml?Riconoscimento dei tasti freccia con stdin
In realtà una soluzione OCaml sarebbe apprezzata, ma molte funzioni standard UNIX sono incluse direttamente nelle chiamate API corrispondenti, quindi non ci dovrebbero essere problemi nel porting di una soluzione C.
Quello che otterrò è catturare i tasti freccia per sovrascrivere il suo comportamento all'interno della shell (riproponendo l'ultima riga o operazioni come queste). Penso che questa cosa cada prima del programma vero e non sia gestita dal codice stesso, quindi non so se sia possibile.
Il programma viene compilato sia su Linux, OS X e Windows (su Cygwin) quindi mi piacerebbe farlo per tutte le piattaforme ..
Sono quasi riuscito a farlo funzionare, ma come dovrei gestire l'eco manuale del personaggio? Lo chiedo perché lo stdin viene quindi inoltrato a un parser che analizza riga per riga e lo interpreta. Dovrei mettere nel mezzo e stampare ogni carattere? Ma poi, quando l'utente preme il tasto, dovrebbe sostituire il carattere già stampato con qualcosa di diverso. – Jack
Dopo aver riletto le tue domande penso che usare readline/ledit sia probabilmente la soluzione migliore. Ma se vuoi fare le cose manualmente, dovrai controllare manualmente lo stdin del parser. Leggi da stdin, controlla una sequenza di escape up-char, direttamente sullo stdin del tuo parser. Sto facendo qualcosa di simile qui: https://github.com/aplusbi/reflow/blob/master/reflow.ml nella funzione 'main', dove sto leggendo stdin in una stringa e poi scriverlo in un file_descr . Probabilmente finirai per fare lo stesso, ma prima controllerai le sequenze di escape. –
questi caratteri freccia sono in realtà dall'ECMA 48 qui di seguito http://man7.org/linux/man-pages/man4/console_codes.4.html puoi vedere quali caratteri di controllo di ECMA 48 supporta Linux: sembrerebbe che sposta il cursore a sinistra 5 caratteri che puoi fare \ 027 [5D – aeroson