2010-07-15 18 views
5

Sto creando un programma che visualizza alcune informazioni in ncurses e quindi apre vim (utilizzando system) per consentire all'utente di modificare un file. Dopo che si è uscito vim, la schermata ncurses non si ridisegnerà. refresh e wrefresh non fare nulla, con conseguente cestinazione completa del mio bellissimo menu.C - passando da ncurses ui a programma esterno e ritorno

Quindi, torno alla riga di comando. Le voci del menu si ridisegnano quando mi sposto. Muoversi un po 'i risultati in qualcosa che assomiglia a questo:

Tragedy

Come potete vedere, non sono più nel mio ambiente piuttosto ncurses ,.

Potrei abbattere completamente ncurses e impostare di nuovo le cose, ma poi alcune cose (come la posizione del menu) non sono conservate.

Come si esegue questa operazione correttamente? C'è un modo migliore per chiamare un programma esterno e tornare qui con garbo?

risposta

1

Non ho mai dovuto riavviare completamente le maledizioni.

cosa succede se fai qualcosa come

def_prog_mode() poi endwin()

eseguire chiamata di sistema

e refresh() dovrebbe ripristinare

+0

Grazie! Questo sembra funzionare, ma ogni tanto riesco a tornare all'interfaccia utente di curses e nessuno dei miei tasti registrati. Quindi devo uccidere il programma. Qualche idea? –

+0

come si inizia ncurses? initscr();/* inizializza la libreria curses */ tastiera (stdscr, TRUE);/* abilita mappatura tastiera */ nonl();/* dire a curses di non eseguire NL-> CR/NL su output */ cbreak();/* prendere i caratteri di input uno alla volta, senza attendere per \ n */ noecho();/* input non echo */ Qualcosa sta cambiando il metodo di input? si può chiamare cbreak() quando si restituisce – Tree77

+0

Sto facendo tutto quanto sopra, ancora sfortunatamente sfortunatamente. –

0

Separa lo stato del programma dallo stato di curses.

L'unico modo pulito che conosco è quello di fermarsi e riavviare curses interamente. Se il tuo programma ha una nozione pulita del suo stato interno (come dovrebbe), allora dovrebbe essere facile tornare alla stessa posizione.

Buona fortuna!

Problemi correlati