2010-07-15 21 views
5

Ich mache ein Programm, das einige Informationen in ncurses anzeigt, und öffnet dann vim (mit system), um dem Benutzer zu erlauben, eine Datei zu bearbeiten. Nach dem Beenden von vim wird der ncurses-Bildschirm jedoch nicht neu gezeichnet. refresh und wrefresh nichts tun, was zu einem kompletten Abfall meiner schönen Speisekarte führt.C - von ncurses ui zu externem Programm und zurück

Also werde ich zurück zur Kommandozeile gesendet. Die Menüpunkte werden neu gezeichnet, wenn ich zu ihnen gehe. Umher ein bisschen Ergebnisse in etwas, das wie folgt aussieht:

Tragedy

Wie Sie sehen, ich bin nicht mehr in meiner ziemlich ncurses Umgebung ,.

Ich könnte Ncurses komplett abreißen und Dinge wieder einrichten, aber dann einige Dinge (wie Menü-Position) ist nicht erhalten.

Wie mache ich das richtig? Gibt es eine bessere Möglichkeit, ein externes Programm aufzurufen und hier elegant zurückzukehren?

Antwort

1

Ich musste nie Flüche vollständig neu starten.

was ist, wenn Sie so etwas wie

def_prog_mode() dann endwin()

ausführen Systemaufruf tun

und refresh() sollte wiederherstellen

+0

Dank! Dies scheint zu funktionieren, aber hin und wieder komme ich zurück zu meiner Flüche Benutzeroberfläche und keiner meiner Tastaturanschläge registrieren. Also muss ich das Programm beenden. Irgendwelche Ideen? –

+0

Wie init ncurses? initscr();/* initialisiere die Curses-Bibliothek */ Tastatur (stdscr, TRUE);/* Tastaturbelegung aktivieren */ nonl();/* tell curses nicht zu tun NL-> CR/NL am Ausgang */ cbreak();/* nimm Eingabezeichen einzeln, keine Wartezeit für \ n */ noecho();/* Echo nicht Eingabe */ Ändert etwas die Eingabemethode? Sie könnten cbreak() aufrufen, wenn Sie zurückkehren – Tree77

+0

Ich mache alle oben genannten, leider immer noch kein Glück. –

0

Trennen Sie Ihren Programmstatus vom Fluchzustand.

Die einzige saubere Art, die ich kenne, ist, Flüche ganz zu stoppen und neu zu starten. Wenn Ihr Programm eine saubere Vorstellung von seinem internen Zustand hat (wie es sollte), dann sollte es einfach sein, zu derselben Position zurückzukehren.

Viel Glück!